Use "Solve" function to find certain value of magnitude of complex function

8 views (last 30 days)
I have a function with complex variable. I want to get the value of "s" at which the magnitude of the function equals certain value (e.g. 10).
I use "abs" to get the magnitude of the function, then use "solve". If I get the magnitude by using sqrt(real^2+imag^2) I et different answer (actually the one that I need).
However, when I plot both magnitudes, the results are the same.
Code is here:
syms s;
y = 10/((j*s)^2+(j*s)+1);
mag_sqrt = sqrt((real(y))^2+(imag(y))^2);
mag_abs = abs(y);
solve_abs = double(solve(20*log10(mag_abs)==10)) % answer = 0.0000 + 2.0532i , 0.0000 - 1.0532i (wrong answer)
solve_sqrt = double(solve(20*log10(mag_sqrt)==10)) % answer = 1.8819, -1.8819 (Correct answer)
ezplot(20*log10(mag_sqrt),0.1,100); grid on;
ezplot(20*log10(mag_abs),0.1,100); grid on;
phase = (180/pi)*double(subs(angle(y),s,solve_abs)) % answer = 0 (Wrong answer)
phase = (180/pi)*double(subs(angle(y),s,solve_sqrt)) % answer = -143.4806 , 143.4806 (Correct answer)

Answers (1)

Walter Roberson
Walter Roberson on 11 Dec 2016
syms s real
When you ask solve to solve a non-polynomial with multiple roots then it will return either a parameterized solution or else it will solve numerically. You did not constrain the range of values so it happened to decide to pick an imaginary valued solution. Forcing real values has a better chance of getting one of the two values you are expecting.
  2 Comments
inframeedo
inframeedo on 11 Dec 2016
I tried both definitions:
syms s real
and
syms s positive
I get this error:
Error using eval
Undefined function or variable 'NIL'.
Error in sym/double (line 828)
X = eval(Xstr);
Walter Roberson
Walter Roberson on 19 Dec 2016
syms s real
y = 10/((j*s)^2+(j*s)+1);
mag_sqrt = simplify(sqrt((real(y))^2+(imag(y))^2), 'steps', 20)
double(solve(20*log10(mag_sqrt)==10))

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!