Substitute symbolic sub-expression in expression

3 visualizaciones (últimos 30 días)
Martin Androvich
Martin Androvich el 3 de Jun. de 2020
Comentada: Valeri Aronov el 27 de Jun. de 2021
I have an equation
eq = Tnext - 2*Tn + Tprev == - sigma*Tinf^4*h^2 - alpha*Tinf*h^2 + sigma*Tn^4*h^2 + alpha*Tn*h^2
in which I want to replace the sub-expression
sigma*Tinf^4*h^2 - alpha*Tinf*h^2
with
C = sigma*Tinf^4*h^2 - alpha*Tinf*h^2
such that it becomes
eq = Tnext - 2*Tn + Tprev == - C + sigma*Tn^4*h^2 + alpha*Tn*h^2
I have tried the following:
eq_to_sub = sigma*Tinf^4*h^2 - alpha*Tinf*h^2;
syms C
eq = subs(eq, eq_to_sub, C)
subsx = @(u,w0,w0str) feval(symengine,'subsex',u,[char(w0) '=' w0str]);
eq = subsx(eq, eq_to_sub, 'C')
which doesnt change the equation at all. Weirdly, both methods work if the sub-expression (to substitute) is limited to
eq_to_sub = sigma*Tinf^4;
resulting in
Tnext - 2*Tn + Tprev == Tn*h^2*alpha - C*h^2 + Tn^4*h^2*sigma + (-h^2)*Tinf*alpha
  1 comentario
Valeri Aronov
Valeri Aronov el 27 de Jun. de 2021
Note that the monomials in C have different signs, but the same monomials in eq have the same sign. C is not found in eq because of it.

Iniciar sesión para comentar.

Respuesta aceptada

Jyotsna Talluri
Jyotsna Talluri el 8 de Jun. de 2020
Enclose the subexpresssion in braces as it contains more than one term.
eq = Tnext - 2*Tn + Tprev == - (sigma*Tinf^4*h^2 + alpha*Tinf*h^2) + sigma*Tn^4*h^2 + alpha*Tn*h^2;
C = sigma*Tinf^4*h^2 + alpha*Tinf*h^2;
q = feval(symengine,'subsex',eq,[char(C) '=C']);
  2 comentarios
Martin Androvich
Martin Androvich el 8 de Jun. de 2020
That's tricky, haha! But it works, so thanks a bunch 😊
Martin Androvich
Martin Androvich el 8 de Jun. de 2020
Editada: Martin Androvich el 8 de Jun. de 2020
But what if the expression is generated from some other function, e.g. simplify(), where I cannot simply manually enclose it in braces?

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Symbolic Math Toolbox en Help Center y File Exchange.

Productos


Versión

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by