Calculating roots of an equation in Matlab.
6 次查看(过去 30 天)
显示 更早的评论
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.
采纳的回答
Dyuman Joshi
2022-8-15
编辑:Dyuman Joshi
2022-8-16
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).
更多回答(2 个)
Star Strider
2022-8-15
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 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!