Polynomial has more than one symbolic variable error

조회 수: 50 (최근 30일)
Tracy Campbell
Tracy Campbell 2021년 10월 9일
답변: Walter Roberson 2021년 10월 12일
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
Walter Roberson
Walter Roberson 2021년 10월 9일
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
Tanmay Das 2021년 10월 12일
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)

댓글을 달려면 로그인하십시오.

답변 (2개)

Tanmay Das
Tanmay Das 2021년 10월 12일
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.

Walter Roberson
Walter Roberson 2021년 10월 12일
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
G1 = 
G2=x2/xi
G2 = 
gg1 = G1(1);
gg2 = G2(1);
[gg]=subs({gg1, gg2}, {b,k1,k2,k3,m1,m2}, {0.7,100,40,50,20,10})
gg = 
G1 = gg(1)
G1 = 
G2 = gg(2)
G2 = 
[num1,den1]=numden(G1)
num1 = 
T
den1 = 
ξ
[num2,den2]=numden(G2)
num2 = 
den2 = 
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')
num2 = 
num2s = 
[den2, den2s] = coeffs(den2, s,'all')
den2 = 
den2s = 
G1=tf(num1,den1)
Error using tf (line 303)
The values of the "Numerator" and "Denominator" properties must be row vectors or cell arrays of row vectors, where each vector is nonempty and containing numeric data. Type "help tf.num" or "help tf.den" for more information.
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()

카테고리

Help CenterFile Exchange에서 Assumptions에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by