Asked by John
on 7 Jan 2019

I'm trying to simplify the following expression using the subs function. In the code below, I was expecting Asubs = 3*Phi. Any ideas on what might be wrong in my code?

clear all;

clc;

syms phi(c,cbar,sigma) Phi(c,cbar,sigma) A(csol,cbar,sigma)

assumeAlso(sigma,'real')

assumeAlso(sigma>0)

phi(c,cbar,sigma)= (1/sqrt(2*sym(pi)*sigma^2))*exp(-(c-cbar)^2/(2*sigma^2))

A(csol,cbar,sigma)=3*int(phi(c,cbar,sigma),c,-inf,csol)

Phi(csol,cbar,sigma) = 1/2 + 1/2*erf(sqrt(2)*(csol-cbar)/(2*sigma))

%Phi(x,sigma) = 1/2 + 1/2*erf(sqrt(2)*(x)/(2*sigma))

Asubs = subs(A,Phi)

Answer by Star Strider
on 7 Jan 2019

Accepted Answer

Since ‘Phi’ does not appear as such specifically in ‘A’, the substitution will fail.

Perhaps this is closer to what you want:

As = simplify(A/Phi)

prodcing:

As(csol, cbar, sigma) =

3

John
on 7 Jan 2019

Star Strider
on 7 Jan 2019

I am still at a loss to understand what you are doing.

I would not use the Symbolic Math Toolbox for such calculations. It is primarily designed for derivations and other such. Use the matlabFunction (link) function to create anonymous functions from your symbolic functions. Then use them in your calculations.

Sign in to comment.

Answer by madhan ravi
on 7 Jan 2019

syms c cbar sigma Phi A csol

assumeAlso(sigma,'real')

assumeAlso(sigma>0)

phi(c,cbar,sigma)= (1/sqrt(2*sym(pi)*sigma^2))*exp(-(c-cbar)^2/(2*sigma^2))

A(csol,cbar,sigma)=3*int(phi(c,cbar,sigma),c,-inf,csol)

Phi(csol,cbar,sigma) = 1/2 + 1/2*erf(sqrt(2)*(csol-cbar)/(2*sigma))

%Phi(x,sigma) = 1/2 + 1/2*erf(sqrt(2)*(x)/(2*sigma))

Asubs = vpa(subs(A,Phi)) % cbar csol and sigma values are not known

John
on 7 Jan 2019

This doesn't make the substitution. It only evaluates the square roots, pi, etc

madhan ravi
on 7 Jan 2019

because cbar csol and sigma are symbolic variables

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.