Substitute symbolic sub-expression in expression

3 vues (au cours des 30 derniers jours)
Martin Androvich
Martin Androvich le 3 Juin 2020
Commenté : Valeri Aronov le 27 Juin 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 commentaire
Valeri Aronov
Valeri Aronov le 27 Juin 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.

Connectez-vous pour commenter.

Réponse acceptée

Jyotsna Talluri
Jyotsna Talluri le 8 Juin 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 commentaires
Martin Androvich
Martin Androvich le 8 Juin 2020
That's tricky, haha! But it works, so thanks a bunch 😊
Martin Androvich
Martin Androvich le 8 Juin 2020
Modifié(e) : Martin Androvich le 8 Juin 2020
But what if the expression is generated from some other function, e.g. simplify(), where I cannot simply manually enclose it in braces?

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Formula Manipulation and Simplification dans Help Center et File Exchange

Produits


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by