How to solve an equation contains norminv?

1 visualización (últimos 30 días)
Susan
Susan el 28 de Feb. de 2023
Comentada: Susan el 1 de Mzo. de 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])]
Could someone please help me out?
Thanks in advance

Respuesta aceptada

Walter Roberson
Walter Roberson el 28 de Feb. de 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.
  9 comentarios
Susan
Susan el 1 de Mzo. de 2023
@Walter Roberson Got you! Thans again

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Vector Fields en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by