作业帮 > 综合 > 作业

编写MATLAB s-function状态方程中的未知数怎么给进去的问题?状态方程如下:

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 17:26:12
编写MATLAB s-function状态方程中的未知数怎么给进去的问题?状态方程如下:
X'=A*X+B*U
y=C*x+D*U;用的是连续状态,编写s函数时因为矩阵A中有未知数w,具体的程序如下:
function [sys,x0,str,ts,simStateCompliance] = quanjie(t,x,u,flag)
Rs=1.405;
Ls=0.178039;
Rr=1.395;
Lr=0.178039;
Lm=0.1722;
Rsr=Rs+(Lm/Lr)^2*Rr;
Ls1=Ls-Lm^2/Lr;
Tsr=Ls1/Rsr;
Tr=Lr/Rr;
switch flag,
case 0,
[sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case {2,4,9}
sys = [];
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag',num2str(flag));
end
function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 4;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 4;
sizes.NumInputs = 2;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1; % at least one sample time is needed
sys = simsizes(sizes);
x0 = [0 0 0 0]';
str = [];
ts = [0 0];
simStateCompliance = 'UnknownSimState';
function sys=mdlDerivatives(t,x,u)
A=[-1/Tsr 0 Lm/(Ls1*Lr*Tr) Lm*wr/(Ls1*Lr)
0 -1/Tsr -Lm*wr/(Ls1*Lr) Lm/(Ls1*Lr*Tr)
Lm/Tr 0 -1/Tr -wr;
0 Lm/Tr wr -1/Tr ];
B=[1/Ls1 1/Ls1 0 0]';
sys = A*x+B*u;
function sys=mdlOutputs(t,x,u)
C=[1 0 0 0
0 1 0 0
0 0 0 0
0 0 0 0];
sys = C*x;
wr是要通过观测器出来的4个量计算的,怎么把wr值给入到矩阵中进行运算啊?我理解的s函数输入参数外,其他输入为状态变量的输入.请高人指教,感激!
你的问题可以化为下面向量的问题
已知a=(1,1,1),b=(-1,1,1),c=a×u,d=c×u,
c和d的夹角是50°,c和v的夹角是55°,d和v的夹角是4.9°,
u⊥v,|u|=1,|v|=1
求u,v
题中的a,b,c,d,u,v均为三维向量,×表示向量内积,|u|表示向量u的模
其中,向量b对应你以前的(m,n,p),向量u对应你以前的(h,k,l),向量v对应你以前的(u,v,w)
由上题,c=a×u,d=c×u可得c⊥u,d⊥u又u⊥v,且c,d,v有相同的起点即坐标原点,从而c,d,v在同一平面上且有相同的起点,且均与u垂直
所以c,d,v之间的夹角必定满足某个等式,回到题上也就是说,55°=50°+5°,
进一步说,你给的条件是矛盾的,所以matlab找不到解
就算你给出的条件是对的,由于你给出的前三个方程并非完全独立的,也不足以确定你想要的结果