MATLAB Answers

Substitute symbolic sub-expression in expression

2 views (last 30 days)
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

  0 Comments

Sign in to comment.

Accepted Answer

Jyotsna Talluri
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']);

  2 Comments

Martin Androvich
Martin Androvich on 8 Jun 2020
That's tricky, haha! But it works, so thanks a bunch 😊
Martin Androvich
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?

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!