How to solve a symbolic complex equation with real and imaginary parts?

85 次查看(过去 30 天)
I have to solve this polynomium: to . So, I know that to solve this equation I have to replace the s to get
Therefore, the real and imaginary parts will be zero and we have and
So, to solve this in matlab, I write this code:
syms s k w
den = s^3 + 9*s^2 + 14*s + 126
assume([ k> 0,w >0])
solw = solve(imag(den)==0, w)
den = subs(den, w, solw)
solk = solve(den==0, k)
Then, this code work well, but if I change the polynomial degree I will have to change the parameters of solve function. So I to know if there is a more generic way to solve this equations
Thanks for reading

采纳的回答

Paul
Paul 2021-4-7
I'm not sure what "change the paramters of the solve function" means. If a general apprach is desired, maybe something along the lines of simultaneously solving two equations for two unkonwns:
>> syms s w k
assume(w>=0); assume(k>=0);
D(s) = s^3 + 9*s^2 + 14*s + 2*k;
eqn = [real(D(1j*w))==0, imag(D(1j*w))==0];
sol = solve(eqn,[w k],'ReturnConditions',true);
[sol.w sol.k]
ans =
[ 0, 0]
[ 14^(1/2), 63]
Change D(s) as desired.
  3 个评论
Walter Roberson
Walter Roberson 2021-4-7
If your polynomial degree is 3 or higher, there is a risk that solve() will decide to return root() objects instead of explicit solutions. You can reduce that problem by using
sol = solve(eqn,[w k],'ReturnConditions',true, 'maxdegree', 4);
which tells it to use explicit formulas up to degree 4.
However, with large enough polynomial degree, solve() will not be able to find an explicit solution, and you will start seeing root() constructs. You can vpa() to get numeric equivalents.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Calculus 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by