马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
哪位朋友能帮我解释下面我的一个问题嫩?谢谢赐教!
第一部分主代码:
clear all;
close all;
global S A F c alfa beta
xk=[0,0];
ts=0.001;
T=1;
TimeSet=[0:ts:T];
[t,y]=ode45('chap2_1eq',TimeSet,xk,[],[]); %%求解微分方程函数
x1=y(:,1);
x2=y(:,2);
if S==1
rin=1.0;
drin=0;
elseif S==2
rin=A*sin(F*2*pi*t);
drin=A*F*2*pi*cos(F*2*pi*t);
end
e1=rin-x1;
e2=drin-x2;
s=c*e1+e2;
for k=1:1:T/ts+1
u(k)=(alfa*abs(e1(k))+beta*abs(e2(k)))*sign(s(k));
end
下面的画图代码,不写出来了。
第二部分控制子程序:
function dx=PlantModel(t,x,flag,para)
global S A F c alfa beta %%定义全局变量
S=1; %%这个S=1的意思选取S=1时候的状态
if S==1
rin=1.0;
drin=0;
elseif S==2
A=0.5;F=3;
rin=A*sin(F*2*pi*t);
drin=A*F*2*pi*cos(F*2*pi*t);
end
c=30; %%未知变量设置
alfa=500;
beta=10;
e1=rin-x(1);
e2=drin-x(2);
s=c*e1+e2;
u=(alfa*abs(e1)+beta*abs(e2))*sign(s);
dx=zeros(2,1); %%定义状态方程结构数
dx(1)=x(2); %%设置系统状态方程
dx(2)=-(25+5*sin(3*2*pi*t))*x(2)+(133+50*sin(1*2*pi*t))*u;
我的问题是:
1蓝色代码部分,为什么第一部分主程序和第二部分控制子程序都需要写出来,难道这个是规定的吗?还有就是第一部分的没有写出 A=0.5;F=3;而第二部分却写明了,这个是为什么嫩;
答:需要写出; A=0.5;F=3写在控制子程序里面,主程序好比是一个未知参数的控制方法的模型(比如simulink里面的一个结构模型,结构模型的具体参数需可以任意设定,要是A=0.5;F=3加在前面主程序,好比simulink里面的一个结构模型被固定了,扩展应用性就受到限制),控制子程序就是一个被控制器,在这里就需要一些确定的参数了。
2红色代码部分,为什么前面和后面也不一样,就是一个是x1,后面却成了x(1)?
答:同样和上面一样,因为主程序要适应大众性,给的仅仅是一个控制结构,而控制子程序才是你所需要控制的部件的状态,所以这里x1和x(1)更本没有关系,你也可以写成x1和xx(1);
3橘黄代码部分,这个定义是什么意思?
答:定义空间输出结构,就是有多少输出,必须指出来(我是这样理解的,不知道对不对)
[ 本帖最后由 retin 于 2009-1-7 16:56 编辑 ] |