How to solve an equation contains norminv?

1 回表示 (過去 30 日間)
Susan
Susan 2023 年 2 月 28 日
コメント済み: Susan 2023 年 3 月 1 日
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

採用された回答

Walter Roberson
Walter Roberson 2023 年 2 月 28 日
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 件のコメント
Walter Roberson
Walter Roberson 2023 年 3 月 1 日
Susan
Susan 2023 年 3 月 1 日
@Walter Roberson Got you! Thans again

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeVector Fields についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by