# How to solve an equation contains norminv?

6 views (last 30 days)
Susan on 28 Feb 2023
Commented: Susan on 1 Mar 2023
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])]

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))
eqn = double(limit(eqn, x, 1e-200))
ans = -3.0000
double(limit(eqn, x, 1-sym(1e-50)))
ans = 123.5352
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.
Susan on 1 Mar 2023
@Walter Roberson Got you! Thans again