# Substitute symbolic sub-expression in expression

2 views (last 30 days)
Martin Androvich on 3 Jun 2020
Commented: Valeri Aronov on 27 Jun 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
Valeri Aronov on 27 Jun 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.

Jyotsna Talluri on 8 Jun 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']);
Martin Androvich on 8 Jun 2020
That's tricky, haha! But it works, so thanks a bunch ðŸ˜Š
Martin Androvich on 8 Jun 2020
Edited: Martin Androvich on 8 Jun 2020
But what if the expression is generated from some other function, e.g. simplify(), where I cannot simply manually enclose it in braces?

### Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

R2020a

### Community Treasure Hunt

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

Start Hunting!