yellowsj
2008-03-29, 17:01
数据矩阵A 9*9,B 9*4,Kc 4*9,具体信息省略。
以下是两段程序:
(1)错误程序
function f=fun_2(X,A,F)
x0=[0,0,0,0,0,0,1,0,0]';
X=zeros(9,1);
k1=zeros(9,1);
k2=zeros(9,1);
k3=zeros(9,1);
k4=zeros(9,1);
F=zeros(9,1);
u=Kc*x0;
h=0.1;t=0;n=1;
X_rec(:,n)=X;t_rec(n)=0;
while t<=10
n=n+1;
F=B*u;
k1=h*fun_2(X,A,F);
k2=h*fun_2(X+k1/2,A,F);
k3=h*fun_2(X+k2/2,A,F);
k4=h*fun_2(X+k3,A,F);
X=X+(k1+2*k2+2*k3+k4)*(1/6);
X_rec(:,n)=X;
t_rec(n)=(n-1)*h;
t=t+h;
X=x0-X;
u=Kc*X;
end
function f=fun_2(X,A,F)
f=A*X+F;
(2)正确程序
function f=fun_2(X,x0,A,F)
x0=[0,0,0,0,0,0,1,0,0]';
X=zeros(9,1);
k1=zeros(9,1);
k2=zeros(9,1);
k3=zeros(9,1);
k4=zeros(9,1);
F=zeros(9,1);
F=B*Kc;
h=0.1;t=0;n=1;
X_rec(:,n)=X;t_rec(n)=0;
while t<=10
n=n+1;
k1=h*fun_2(X,x0,A,F);
k2=h*fun_2(X+k1/2,x0,A,F);
k3=h*fun_2(X+k2/2,x0,A,F);
k4=h*fun_2(X+k3,x0,A,F);
X=X+(k1+2*k2+2*k3+k4)*(1/6);
X_rec(:,n)=X;
t_rec(n)=(n-1)*h;
t=t+h;
end
function f=fun_2(X,x0,A,F)
f=A*X+F*(x0-X);
两段程序的逻辑是相同的,主要差别已经用红字标出,望各位大侠指教!:cry: :cry: :cry:
主要变量的关系是:f=A*X+B*u, u=Kc*(x0-X).
以下是两段程序:
(1)错误程序
function f=fun_2(X,A,F)
x0=[0,0,0,0,0,0,1,0,0]';
X=zeros(9,1);
k1=zeros(9,1);
k2=zeros(9,1);
k3=zeros(9,1);
k4=zeros(9,1);
F=zeros(9,1);
u=Kc*x0;
h=0.1;t=0;n=1;
X_rec(:,n)=X;t_rec(n)=0;
while t<=10
n=n+1;
F=B*u;
k1=h*fun_2(X,A,F);
k2=h*fun_2(X+k1/2,A,F);
k3=h*fun_2(X+k2/2,A,F);
k4=h*fun_2(X+k3,A,F);
X=X+(k1+2*k2+2*k3+k4)*(1/6);
X_rec(:,n)=X;
t_rec(n)=(n-1)*h;
t=t+h;
X=x0-X;
u=Kc*X;
end
function f=fun_2(X,A,F)
f=A*X+F;
(2)正确程序
function f=fun_2(X,x0,A,F)
x0=[0,0,0,0,0,0,1,0,0]';
X=zeros(9,1);
k1=zeros(9,1);
k2=zeros(9,1);
k3=zeros(9,1);
k4=zeros(9,1);
F=zeros(9,1);
F=B*Kc;
h=0.1;t=0;n=1;
X_rec(:,n)=X;t_rec(n)=0;
while t<=10
n=n+1;
k1=h*fun_2(X,x0,A,F);
k2=h*fun_2(X+k1/2,x0,A,F);
k3=h*fun_2(X+k2/2,x0,A,F);
k4=h*fun_2(X+k3,x0,A,F);
X=X+(k1+2*k2+2*k3+k4)*(1/6);
X_rec(:,n)=X;
t_rec(n)=(n-1)*h;
t=t+h;
end
function f=fun_2(X,x0,A,F)
f=A*X+F*(x0-X);
两段程序的逻辑是相同的,主要差别已经用红字标出,望各位大侠指教!:cry: :cry: :cry:
主要变量的关系是:f=A*X+B*u, u=Kc*(x0-X).