Divide transfer function get "Model I/O dimensions must agree." Please help

clc;
clear;
num1 = {1, 1, 1, 1, 1, 1, 1};
num2 = {-4, -4, -4, -4, -4, -4, -4};
den1 = {[10 1], [10 1], [10 1], [10 1], [10 1], [10 1], [10 1]};
den2 = {[15 1], [15 1], [15 1], [15 1], [15 1], [15 1], [15 1]};
Gp= tf(num1,den1, 'IODelay', [3 4 5 6 7 8 9]);
Gp = minreal(Gp);
Gd= tf(num2,den2, 'IODelay', [3 4 5 6 7 8 9]);
Gd = minreal(Gd);
a=(3:1:9);
kc=(5./(0.8.*a));
Ti=10;
s = tf('s');
Gc = kc*(1/(1/10*s));
Gc=minreal(Gc);
Gc_a = (Gc*Gp)/(1+(Gc*Gp)); %y/SP
Hello all, this is my code. However when I run it every single * or / gets an error message of Model I/O dimensions must agree. Any help here?

2 Kommentare

I only see one error on the last line
num1 = {1, 1, 1, 1, 1, 1, 1};
num2 = {-4, -4, -4, -4, -4, -4, -4};
den1 = {[10 1], [10 1], [10 1], [10 1], [10 1], [10 1], [10 1]};
den2 = {[15 1], [15 1], [15 1], [15 1], [15 1], [15 1], [15 1]};
Gp= tf(num1,den1, 'IODelay', [3 4 5 6 7 8 9]);
Gp = minreal(Gp);
Gd= tf(num2,den2, 'IODelay', [3 4 5 6 7 8 9]);
Gd = minreal(Gd);
a=(3:1:9);
kc=(5./(0.8.*a));
Ti=10;
s = tf('s');
Gc = kc*(1/(1/10*s));
Gc=minreal(Gc);
Gc_a = (Gc*Gp)/(1+(Gc*Gp)); %y/SP
Error using * (line 80)
Model I/O dimensions must agree.
This error arises becsue Gc and Gp are both 1x7 tf matrices. Can't mutiply a 1 x 7 with another 1 x 7.
What exactly are you trying to accomplish?
Gc_a is the response of the system. So im trying to define everything meaning control, disturbance and process to get the plot

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

clc;
clear;
num1 = {1, 1, 1, 1, 1, 1, 1};
num2 = {-4, -4, -4, -4, -4, -4, -4};
den1 = {[10 1], [10 1], [10 1], [10 1], [10 1], [10 1], [10 1]};
den2 = {[15 1], [15 1], [15 1], [15 1], [15 1], [15 1], [15 1]};
Gp= tf(num1,den1, 'IODelay', [3 4 5 6 7 8 9]);
Gp = minreal(Gp);
Gd= tf(num2,den2, 'IODelay', [3 4 5 6 7 8 9]);
Gd = minreal(Gd);
a=(3:1:9);
kc=(5./(0.8.*a));
Ti=10;
s = tf('s');
Gc = kc*(1/(1/10*s));
Gc=minreal(Gc);
K = Gc.*Gp;
KK = ((1+(Gc.*Gp))); % auxiliary variable
Gc_a = tf(Gc.*Gp,KK) %apply the transfer function to convert coefficients from statespace
Gc_a = From input 1 to output: 2.083 exp(-3*s) * ----------- s^2 + 0.1 s From input 2 to output: 1.562 exp(-4*s) * ----------- s^2 + 0.1 s From input 3 to output: 1.25 exp(-5*s) * ----------- s^2 + 0.1 s From input 4 to output: 1.042 exp(-6*s) * ----------- s^2 + 0.1 s From input 5 to output: 0.8929 exp(-7*s) * ----------- s^2 + 0.1 s From input 6 to output: 0.7812 exp(-8*s) * ----------- s^2 + 0.1 s From input 7 to output: 0.6944 exp(-9*s) * ----------- s^2 + 0.1 s Continuous-time transfer function.
apply the transfer function to convert coefficients from statespace

1 Kommentar

Gc_a = tf(1,KK); Is this correct to create a transfer function with 1 in the numerator divided by KK factor in the denominator?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

May be you can run a loop for each tf..
for i = 1:7
Gc_a(i) = (Gc(i)*Gp(i))/(1+(Gc(i)*Gp(i))); %y/SP
end

Kategorien

Produkte

Version

R2021b

Community Treasure Hunt

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

Start Hunting!

Translated by