MATLAB命令lsim是否适用于线性化状态空间模型?

问题描述:

状态空间模型是在表格上: DX = AX +卜 Y = CX +都被线性化MATLAB命令lsim是否适用于线性化状态空间模型?

非线性状态空间模型是这样的形式:

dΔx = AΔx + BΔu 
Δy = CΔx + DΔu 

其中:

Δx = [x1 - x10; x2 - x20; x3 - x30; .... ; xn - xn0] 
Δu = [u1 - u10; u2 - u20; u3 - u30; .... ; um - um0] 

x10,x20,x30,xn0,u10,u20,u30,um0是线性化的常数/初始值。

所以!该问题是关于MATLAB命令 “lsim”:

lsim (sys, u, t, x0) 

在这种情况下,SYS是从lineraized状态空间模型的A,B,C,d的矩阵。 u是信号矢量,t是时间矢量。但是x0 ....我可以说x0是x10,x20,x30,...,xn0?我可以说u = u - u0,u0是u10 u10,u20,u30,...,um0?

例子:

u = linspace(5, 5, 100); % insignal 5 
t = linspace(0, 100, 100); % 100 seconds 
u0 = [0.2; -1.2; -3]; 
u = u - u0; % 
x0 = [-2; 2; -1] 
lsim (sys, u, t, x0) 

这将导致:

Δx = [x1 - 2; x2 + 2; x3 - 1] 
Δu = [u1 + 0.2; u2 - 1.2; u3 - 3] 

我说得对不对?

+0

有什么理由让你认为你可能不适合?这个问题的答案是“这个功能是专门为这项任务设计的吗?”我觉得比较清楚,那么真正的问题是什么? –

+0

问题是我可以模拟我的线性化状态空间模型,如上所示。 –

+0

该方法通常是:尝试一下,如果它有效,那么很好!如果它不起作用,那么你来问一下 –

有一个现成的Simulink S-Functiondsfunc.m这是一个状态空间模型的模拟,它可以很容易地适应包含线性化状态空间矩阵,在每个时间步进改变。

只需构建一个simulink文件dsfunc.slx并使用sim命令sim('dsfunc')命令运行它。

好的部分是S函数正确地处理状态,并且每次都调整状态空间模型,从一个迭代到另一个迭代保持状态。

此外,您可以使用单个for循环轻松完成此操作。如图所示包含线性化常数。

function [t,u,x,y]=example2 
% Start 
dt=0.001; 
N=1000; 
n=2; 
r=1; 
t=(0:N-1)'*dt; 
u=rand(N,r); 
% First 
[A,B,C,D,x0,y0]=ABCD(t(1),zeros(n,1),u(1,:)'); 
x(1,:)=x0'; 
y(1,:)=(C*x(1,:)'+D*u(1,:)'+y0)'; 
% Cycle 
for i=2:N 
    [A,B,C,D,x0,y0]=ABCD(t(i),x(i-1,:)',u(i-1,:)'); 
    x(i,:)=(A*x(i-1,:)'+B*u(i-1,:)'+x0)'; 
    y(i,:)=(C*x(i,:)'+D*u(i,:)'+y0)'; 
end 
plot(t,[u x y]);legend({'u' 'x1' 'x2' 'y'}); 


function [A,B,C,D,x0,y0]=ABCD(t,x,u) 
A=[0.1 -0.9;0 0.1]; 
B=0.5*ones(2,1); 
C=[1 1]; 
x0=[0];y0=[0]; 

enter image description here

+0

谢谢!但我更喜欢使用lsim命令:) –

+0

是的我虽然想在几个点上进行线性化。发生你只需要一个线性模型去。那没问题 :\。 – hyprfrcb