How to solve an equation contains norminv?
2 views (last 30 days)
Show older comments
Hi all,
I'd like to solve the following equation.
sol = [];
for L = -20:10:120
syms x
eqn = 10*log10(10.^(0.1*(norminv(x)*7.6 + 9.88)) + 10.^(0.1*(norminv(x)*6.5 + 12.1)) + 10.^(-0.3)) == L
S = solve(eqn);
sol = [sol S];
end
I modified the equation by replacing the norminv (x) with -sqrt(2)*erfcinv(2*x), i.e.,
sol = [];
for L = -20:10:120
syms x
eqn = 10*log10(10.^(0.1*(-sqrt(2)*erfcinv(2*x)*7.6 + 9.88)) + 10.^(0.1*(-sqrt(2)*erfcinv(2*x)*6.5 + 12.1)) + 10.^(-0.3)) == L
S = solve(eqn);
sol = [sol S];
end
However, I got a warning saying, "Warning: Unable to find explicit solution. For options, see help.". So, I add the following lines, hoping to solve the equation, but still unsuccessful.
S = solve(eqn);
string(lhs(eqn)-rhs(eqn))
sol = [sol vpasolve(eqn, [-143, -109.5937])]
Could someone please help me out?
Thanks in advance
0 Comments
Accepted Answer
Walter Roberson
on 28 Feb 2023
syms x
eqn = 10*log10(10.^(0.1*(-sqrt(2)*erfcinv(2*x)*7.6 + 9.88)) + 10.^(0.1*(-sqrt(2)*erfcinv(2*x)*6.5 + 12.1)) + 10.^(-0.3))
double(limit(eqn, x, 1e-200))
double(limit(eqn, x, 1-sym(1e-50)))
The left hand side is the same for all of them, and you cannot get it down below -3 and cannot get it much above 120-ish. So there is no real-valued solution for L = -20 or L = -10
For the other values... use vpasolve() with around 0.01 as an initial guess, and after that use the previous solution as the initial guess for the next round.
9 Comments
Walter Roberson
on 1 Mar 2023
That is why I coded test for empty result in https://www.mathworks.com/matlabcentral/answers/1920765-how-to-solve-an-equation-contains-norminv#comment_2640465
More Answers (0)
See Also
Categories
Find more on Vector Fields in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!