Calculating roots of an equation in Matlab.
5 views (last 30 days)
Show older comments
I am trying to calculate switching points. To do this I need to calculate the root of this equation (theta). To do this I have tried the code below.
a = 2
kepa = 3/13
lambda = 9
b = -log(kepa)/lambda
syms theta a
g = 2*(normcdf(a) + (theta - 1) .* normcdf(a*(1-theta)) + 1/(a*sqrt(2*pi)) * (exp(-(a.^2)/2) - ...
exp(-((a.*(1-theta)).^2)/2))) - theta == b;
soltheta = solve(g, theta)
This outputs:
soltheta =
Empty sym: 0-by-1.
I am not sure why this is the case? I know a solution exists and is around 0.175. How do I get this to output a solution for theta? Any help will be greatly appreciated, thank you.
Accepted Answer
Dyuman Joshi
on 15 Aug 2022
Edited: Dyuman Joshi
on 16 Aug 2022
Some slight tweaks
I used vpasolve cause symbolic solver will give an error and will return the answer using vpasolve only.
Defining a variable and then declaring it as a syms variable will overwrite it's value.
a = 2;
kepa = 3/13;
lambda = 9;
b = -log(kepa)/lambda;
syms theta
g = 2*(normcdf(a) + (theta - 1) .* normcdf(a*(1-theta)) + 1/(a*sqrt(2*pi)) * (exp(-(a.^2)/2) - ...
exp(-((a.*(1-theta)).^2)/2))) - theta == b;
soltheta = vpasolve(g, theta)
Edit - Note that there are 2 solutions to the equation and only the first solution is obtained here (closer to 0).
More Answers (2)
Star Strider
on 15 Aug 2022
When you delcared ‘a’ as symbolic, you cleared its numeric value.
Try this —
a = 2
kepa = 3/13
lambda = 9
b = -log(kepa)/lambda
syms theta
g = 2*(normcdf(a) + (theta - 1) .* normcdf(a*(1-theta)) + 1/(a*sqrt(2*pi)) * (exp(-(a.^2)/2) - ...
exp(-((a.*(1-theta)).^2)/2))) - theta;
soltheta(1,:) = vpasolve(g == b, -1);
soltheta(2,:) = vpasolve(g == b, 2)
format long
numtheta = double(soltheta)
figure
fplot(g, [-1 3])
yline(b)
grid
.
0 Comments
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!