How to solve a symbolic complex equation with real and imaginary parts?
50 次查看(过去 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
0 个评论
采纳的回答
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
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 Center 和 File Exchange 中查找有关 Calculus 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!