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

12 views (last 30 days)
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 Comments
Paul
Paul on 10 Nov 2021
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?
Ioannis Saravanos
Ioannis Saravanos on 10 Nov 2021
Gc_a is the response of the system. So im trying to define everything meaning control, disturbance and process to get the plot

Sign in to comment.

Accepted Answer

VBBV
VBBV on 10 Nov 2021
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 Comment
Ioannis Saravanos
Ioannis Saravanos on 10 Nov 2021
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?

Sign in to comment.

More Answers (1)

KSSV
KSSV on 10 Nov 2021
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

Categories

Find more on Programming in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!