主题:关于用ODE45求解400阶的微分方程组问题
请问在下面求解一个400阶的微分方程组中,我用ODE45求解:
[T,Y]=ode45(@fode,[0 0.001],zeros(400,1)) 为什么matlab会算不过来???[b]而当我把L0,G0,C0,R0参数改为1,且下面程序中的时间变量 t 改为1s时用[T,Y]=ode45(@fode,[0 3],zeros(400,1)) matlab又可以算。是不是参数为浮点数的问题?????[/b]下面的方程中我有设置当时间在30μs时方程有些改动。(此处当我把时间改为1s时才能算得过来)
请大侠们帮忙啊! [b]是不是参数为浮点数问题???[/b]
function dy=fode(t,y)
global L0 C0 R0 G0 h L M Rs U0;
[b]L0=1.228e-007;
C0=3.2960e-011;
R0=3.2568e-005;
G0=8.1325e-012;[/b]
L=100;
M=200;
h=L/M;
Rs=30;
A1=sparse(1:M,1:M,-G0/C0,2*M,2*M,M);
A2=sparse(1:M,M+1:2*M,1/(C0*h),2*M,2*M,M)+sparse(1:M-1,M+2:2*M,-1/(C0*h),2*M,2*M,M-1);
A3=sparse(M+1:2*M,1:M,-1/(L0*h),2*M,2*M,M)+sparse(M+2:2*M,1:M-1,1/(L0*h),2*M,2*M,M-1);
A4=sparse(M+1:2*M,M+1:2*M,-R0/L0,2*M,2*M,M);
A=A1+A2+A3+A4;
B=zeros(2*M,1);
if [b]t<30e-006 [/b]
A(M+1,M+1)=-(R0/L0+Rs/(L0*h));
U0=60;
else
A(1,M+1)=0;
A(M+1,1)=0;
A(M+1,M+1)=0;
U0=0;
end
B(M+1,1)=U0/(L0*h);
dy=A*y+B;
[T,Y]=ode45(@fode,[0 0.001],zeros(400,1)) 为什么matlab会算不过来???[b]而当我把L0,G0,C0,R0参数改为1,且下面程序中的时间变量 t 改为1s时用[T,Y]=ode45(@fode,[0 3],zeros(400,1)) matlab又可以算。是不是参数为浮点数的问题?????[/b]下面的方程中我有设置当时间在30μs时方程有些改动。(此处当我把时间改为1s时才能算得过来)
请大侠们帮忙啊! [b]是不是参数为浮点数问题???[/b]
function dy=fode(t,y)
global L0 C0 R0 G0 h L M Rs U0;
[b]L0=1.228e-007;
C0=3.2960e-011;
R0=3.2568e-005;
G0=8.1325e-012;[/b]
L=100;
M=200;
h=L/M;
Rs=30;
A1=sparse(1:M,1:M,-G0/C0,2*M,2*M,M);
A2=sparse(1:M,M+1:2*M,1/(C0*h),2*M,2*M,M)+sparse(1:M-1,M+2:2*M,-1/(C0*h),2*M,2*M,M-1);
A3=sparse(M+1:2*M,1:M,-1/(L0*h),2*M,2*M,M)+sparse(M+2:2*M,1:M-1,1/(L0*h),2*M,2*M,M-1);
A4=sparse(M+1:2*M,M+1:2*M,-R0/L0,2*M,2*M,M);
A=A1+A2+A3+A4;
B=zeros(2*M,1);
if [b]t<30e-006 [/b]
A(M+1,M+1)=-(R0/L0+Rs/(L0*h));
U0=60;
else
A(1,M+1)=0;
A(M+1,1)=0;
A(M+1,M+1)=0;
U0=0;
end
B(M+1,1)=U0/(L0*h);
dy=A*y+B;