我正在追踪飞行动力学课程,我想在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('----------------------------------------')
答案 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)
或类似的东西?