Matlab Lsim MIMO系统错误

时间:2015-11-18 16:43:34

标签: matlab

我正在追踪飞行动力学课程,我想在4个输入之一绘制步进输入(0.01745)的响应。 我有4个输入: U,W,Q,θ-

然而,我收到一个错误: 使用DynamicSystem / lsim时出错(第98行) 在模拟对特定的响应时 输入信号,输入数据U必须是矩阵 与时间向量中的样本一样多的行 T,以及与输入通道一样多的列。

就我在工作区看到的那样,我满足了这些要求...... 当我使用u = ones(size(t))时,我的代码确实有效,但这会在所有4个通道u,w,q,theta上给出一个步骤输入....你能帮助我吗?谢谢:))

    clear all; clc;


A=[ 0.00501 0.00464 -72.90 -31.34;
    -0.08570 -0.545 309 -7.4;
    0.00185 -0.00767 -0.395 0.00132;
    0 0 1 0];

B=[5.63 -23.8 -4.51576 0]'; 

C=[1 0 0 0;
    0 1 0 0;
    0 0 1 0;
    0 0 0 1];

D=0;

sys=ss(A,B,C,D);
t=0:0.1:1000;

%definieer initial conditions: 
u0=0;
w0=0;
q0=0;
theta0=0;
x0=[u0 w0 q0 theta0]';

u1=zeros(size(t));         %u
u2=zeros(size(t));         %w
u3=zeros(size(t));         %q
u4=zeros(size(t))+0.01745; %theta0
u=[u1;u2;u3;u4]'; **% this line gives the error**

%u=zeros(size(t)); **%this works but gives step input at all 4 inputs...**

figure(1)
subplot(1,2,1)
lsim(sys,u,t,x0)
xlabel('time');
ylabel('theta (rad)                                  q (rad/s)                            w (ft/s)                               u (ft/s)');
subplot(1,2,2)
pzmap(sys)
title('pole-zere map A-7A corsair II, ex 6.1');

damp(sys)%geeft eigenvalue,damping,freq
[U,D]=eig(A);
eigenvector=U;

disp('----------------------------------------')
disp('magnitude, welke mode is het sterkst voor (u,w,q,theta)')
disp('   |short-period mode |    phugoid mode|')
EigenvecMagnitude=abs(U);
EigenvecMagnitude
disp('----------------------------------------')

1 个答案:

答案 0 :(得分:0)

ss的文档说明矩阵与以下系统模型有关:

dx/dt = Ax(t) + Bu(t)
 y(t) = Cx(t) + Du(t)

,特别是B" - 是一个Nx-by-Nu实数或复数值矩阵",其中Nx是状态维度(在你的4中) case)和Nu是控件维度,根据你的B=[5.63 -23.8 -4.51576 0]';是1。

但是,当您尝试使用代码中显示的矩阵u=[u1;u2;u3;u4]';作为控件输入时,由于其尺寸不符合预期(4而不是1),因此将失败。控制输入​​的长度(对应于t)在您的代码中似乎没问题。

总之,您需要修改至少 B(请注意,我不是特定系统的专家 - 您自己最了解!)做这个工作。也许您需要Bnew = diag(B)或类似的东西?