Polynomial has more than one symbolic variable error
32 views (last 30 days)
Show older comments
I created a code but recieving an error. Can someone have a look and figure out why and what is the best way to fix it? I'm a novice at Matlab so please be patient & kind.
Thanks
2 Comments
Walter Roberson
on 9 Oct 2021
Please post the code as text, rather than as an image. Our versions of MATLAB are not able to execute pictures of code for us to test with, and we are too lazy to type in that much code by hand.
Tanmay Das
on 12 Oct 2021
Hi, here is the reproduced code to the above image. Please feel free to explore it.
clc
clear all
syms m1 m2 J1 s b k1 k2 k3 r1 xi T real
t=0:0.5:100;
A=[-s^2*m1-s*b-k2, k2, 0; -k2, s^2*m2+k3+k2, -k3; -s^2*J1/r1-s*b/r1, 0, 0];
F=[T;0;T*r1];
U=A\F;
x1=U(1);
x2=U(2);
x3=U(3);
G1=T/xi
G2=x2/xi
gg1 = G1(1);
gg2 = G2(1);
[gg]=subs({gg1, gg2}, {b,k1,k2,k3,m1,m2}, {0.7,100,40,50,20,10});
G1 = gg(1);
G2 = gg(2);
[num1,den1]=numden(G1);
[num2,den2]=numden(G2);
num1=sym2poly(num1);
den1=sym2poly(den1);
num2=sym2poly(num2);
den2=sym2poly(den2);
G1=tf(num1,den1);
G2=tf(num2,den2);
step(G1,t)
figure(2)
step(G2,t)
Answers (2)
Tanmay Das
on 12 Oct 2021
Hi,
To my understanding, you are passing a polynomial with multiple symbolic variables to sym2poly function which is not allowed. Sym2poly function is basically used to extract vector of all numeric coefficients, including zeros, from symbolic polynomial. Subs function can be used to replace some of the symbolic variables to numeric values like already done with some of the variables in the attached code. The only thing to take care is that the symbolic polynomial passed as an argument to sym2poly function should be of only one symbolic variable.
0 Comments
Walter Roberson
on 12 Oct 2021
syms m1 m2 J1 s b k1 k2 k3 r1 xi T real
t=0:0.5:100;
A=[-s^2*m1-s*b-k2, k2, 0; -k2, s^2*m2+k3+k2, -k3; -s^2*J1/r1-s*b/r1, 0, 0];
F=[T;0;T*r1];
U=A\F;
x1=U(1);
x2=U(2);
x3=U(3);
G1=T/xi
G2=x2/xi
gg1 = G1(1);
gg2 = G2(1);
[gg]=subs({gg1, gg2}, {b,k1,k2,k3,m1,m2}, {0.7,100,40,50,20,10})
G1 = gg(1)
G2 = gg(2)
[num1,den1]=numden(G1)
[num2,den2]=numden(G2)
You can see that G2 is in terms of T, r1, J1, s, none of which you subs() for.
I suspect that you are trying to extract coeficients of s
[num2, num2s] = coeffs(num2, s, 'all')
[den2, den2s] = coeffs(den2, s,'all')
G1=tf(num1,den1)
Which just gets you to the next problem, namely that the coefficients of a transfer function tf() cannot be symbolic.
G2=tf(num2,den2)
step(G1,t)
figure(2)
step(G2,t)
Within the Control System Toolbox, MATLAB has no way at all to deal with symbolic coefficients. The most it has is a way to use tunable parameters. At any one time, a tunable parameter has a distinct value -- it is just that the structure of control systems created with tunable parameters allows the tunable parameters to be detected and manipulated more easily, such as for automatic tuning. But you cannot create a general step() diagram showing the general case, for example: you could only create a step diagram using the current value of the tunable parameter.
I suspect that to proceed you will need to substitute additional specific values like you already do in the subs().
But remember when you do so that you are going to end up with the first system being a scalar constant independent of s -- you can see G1 is independent of s even before any subs()
0 Comments
See Also
Categories
Find more on Number Theory in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!