登录论坛

查看完整版本 : [求助]自己编的m文件一直报错。。。不知错在哪里


louyu1984
2008-12-17, 19:42
下面是我编的一段程序,自己编写的龙格库塔算法。。。主要是一个控制算法对一个非线性对象进行控制。。。但是仿真总是出错,找了一个下午也不知道错误在哪里。。。
哪位大侠帮帮忙。。。



clear;
v=10;u=1;f=10;kq1=0.1820;kq2=0.1886;v01=30.48;v02=55.33;b=4000e2;m=2200;A1=3.1416;A2=1.6567;t=0.01;kv=1;be=3.9e5;p0=0.5;ps=315000000;f=100000;%parameters
x1(1)=0; x2(1)=0;x3(1)=p0;x4(1)=0;f(1)=0;g(1)=0;df(1)=0;dg(1)=0;%initial value
h=0.01;%stepsize
for i=1:500

x1n=x1(i);x2n=x2(i);x3n=x3(i);x4n=x4(i);fn=f(i);gn=g(i);dfn=df(i);dgn=g(i);

i=i+1;

k1=x2n;
l1=(A1*x3n-b*x2n-f)/m;
p1=(-A1*x2n+sqrt(ps-x3n)*x4n*kq1)*be/(v01+A1*x1n);
n1=(-x4n+kv*u)/t;

k2=x2n+0.5*l1*h;
l2=(-b*(x2n+0.5*l1*h)+A1*(x3n+0.5*p1*h)-f)/m;
p2=(-A1*(x2n+0.5*l1*h)+sqrt(ps-(x3n+0.5*h*p1))*(x4n+0.5*n1*h)*kq1)*be/(v01+A1*(x1n+0.5*k1*h));
n2=(-(x4n+0.5*n1*h)+kv*u)/t;

k3=x2n+0.5*l2*h;
l3=(-b*(x2n+0.5*l2*h)+A1*(x3n+0.5*p2*h)-f)/m;
p3=(-A1*(x2n+0.5*l2*h)+sqrt(ps-(x3n+0.5*h*p2))*(x4n+0.5*n2*h)*kq1)*be/(v01+A1*(x1n+0.5*k2*h));
n3=(-(x4n+0.5*n2*h)+kv*u)/t;

k4=x2n+l3*h;
l4=(-b*(x2n+l3*h)+A1*(x3n+p3*h)-f)/m;
p4=(-A1*(x2n+l3*h)+sqrt(ps-(x3n+h*p3))*(x4n+n3*h)*kq1)*be/(v01+A1*(x1n+k3*h));
n4=(-(x4n+0.5*n3*h)+kv*u)/t;

x1(i)=x1n+h*(k1+2*k2+2*k3+k4)/6;
x2(i)=x2n+h*(l1+2*l2+2*l3+l4)/6;
x3(i)=x3n+h*(p1+2*p2+2*p3+p4)/6;
x4(i)=x4n+h*(n1+2*n2+2*n3+n4)/6;

f(i)=(m*v+(b-m)*x2(i)+f)/A1;
df(i)=(f(i)-fn)/h;
g(i)=((v01+A1*x1(i))*(df(i)+f(i)-x3(i))+A1*be*x2(i))/(kq1*be*sqrt(ps-x3(i)));
dg(i)=(g(i)-gn)/h;
u=(t*dg(i)+t*g(i)+(1-t)*x4(i))/kv;

%u=0.1*(10-x2(i));
%%x7(i)=u;u=15000*(10-x2(i))+20000*(x2(i)-x2n)/h;
%x7(i)=u;
if x3(i)>314000000;
x3(i)=314000000;
end

%u=15*(10-x2(i));
end

louyu1984
2008-12-17, 19:42
忘高手帮我一下,万分感谢。。。。

endlich
2008-12-18, 23:49
i=i+1,这个在matlab编程里很少看到

sanchol
2008-12-19, 17:59
楼主说清楚啊,仿真总是出错什么意思,是仿真无法进行总有个提示吧。通着看你的文件没什么问题,是结果不正确还是不能进行仿真

LiSheng
2009-02-17, 13:43
怎么看着 i=i+1; 像编的的C程序一样

happyzy
2009-03-08, 20:39
怎么看着 i=i+1; 像编的的C程序一样

大家都说了,就错在这里。

MATLAB里不用i=i+1的

删掉试试。