I get "Warning: Unable to determine poles" when I try to find the poles and zeros of a 5th-order equation with multiple variables.

4 vues (au cours des 30 derniers jours)
I am trying to find the poles and zeros of an equation with 6 variables other than s. If I assign numbers to all of the variables, I get numerical poles and zeros, but what I want is poles and zeros as an expression of the variables. When I try that, it responds, "Warning: Unable to determine poles." I tried adding some reasonable assumptions but got the same answer.
Here is the code that works:
>> clear;
syms R A B C M N s;
assume(in(R , 'real') & R>0);
assume(in(A , 'real') & A>0 & A<1);
assume(in(B , 'real') & B>0 & B<1);
assume(in(C , 'real') & C>0 & C<1);
assume(in(M , 'real') & M>0 & M<1);
assume(in(N , 'real') & N>0 & N<1);
R=13;
A=1/2;
B=1/3;
C=1/5;
M=1/7;
N=1/11;
H = R/(1+R*(A+B+C)*s+(A*(M+N)+B*N)*s^2+R*(M*A*B+(M+N)*A*C+N*B*C)*s^3+(M*N*A*B)*s^4+(A*B*C*M*N)*s^5);
poles(H,s)
ans =
- 0.039821880406990304571458835810199 + 4.4322993309209319898785104967336i
- 0.039821880406990304571458835810225 - 4.4322993309209319898785104967336i
-0.074481183590774866175653557958632
- 2.4229375277976222623407143852105 - 39.657656365577651242370854262579i
- 2.4229375277976222623407143852105 + 39.657656365577651242370854262579i
And here is the code that doesn't:
>> clear;
syms R A B C M N s;
assume(in(R , 'real') & R>0);
assume(in(A , 'real') & A>0 & A<1);
assume(in(B , 'real') & B>0 & B<1);
assume(in(C , 'real') & C>0 & C<1);
assume(in(M , 'real') & M>0 & M<1);
assume(in(N , 'real') & N>0 & N<1);
H = R/(1+R*(A+B+C)*s+(A*(M+N)+B*N)*s^2+R*(M*A*B+(M+N)*A*C+N*B*C)*s^3+(M*N*A*B)*s^4+(A*B*C*M*N)*s^5);
poles(H,s)
Warning: Unable to determine poles.
> In sym/poles (line 101)
ans =
Empty sym: 0-by-1
Is there a way to make the second code work?
Thanks!
  2 commentaires
David Goodmanson
David Goodmanson le 7 Nov 2022
Modifié(e) : David Goodmanson le 10 Nov 2022
Hi Sita,
In this case solving for the poles is the same as solving (algebraically) for the zeros of a fifth degree polynomial in x, with arbitrary coefficients. For a polynomial of degree > 4, this is not possible.
Sita
Sita le 9 Nov 2022
Déplacé(e) : John D'Errico le 9 Nov 2022
Thanks everyone for your answers. I was thinking it might be impossible, so it's good to know that that's the case. I can settle for plugging in values and having it calculate numerical poles to find limits.

Connectez-vous pour commenter.

Réponse acceptée

John D'Errico
John D'Errico le 7 Nov 2022
Modifié(e) : John D'Errico le 7 Nov 2022
You need to understand that this becomes a problem of solving for the roots of a general 5th degree polynomial. If ALL of the coefficients of that polynomial are known, as NUMBERs, then the solver can find the roots using numerical methods. But if even ONE of the variables is an unknown, then it is provable in general that no solution can be determined, except for some trivial cases. Sorry, but this result has been known for well over a two hundred years.
So no, it is absolutely impossible to solve the second problem as posed. This is not a problem in MATLAB. Some other tool, perhaps Mathematica, will still be unable to solve a problem that is mathematically impossible to solve.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Produits


Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by