Matlab中矩阵ODE的数值解

时间:2015-06-27 19:02:48

标签: matlab matrix ode

我正在尝试解决类型

的Cauchy问题

ý' = A(t)的* Y

是一个与时间相关的方阵,取决于许多参数。

我所做的是定义一个函数(根据需要在一个单独的文件中)

function timedepf=timedep(time,y,L,t,gamma,Rx,Ry,T)
a=zeros(3*L);
for j=1:L
    a(j,j+1)=-t;
    a(j+1,j)=-t;
    a(L,1)=-t;
    a(1,L)=-t;
    a(L+j,L+j+1)=-t;
    a(L+j+1,L+j)=-t;
    a(L+L,L+1)=-t;
    a(L+1,L+L)=-t;
    a(2*L+j,2*L+j+1)=-t;
    a(2*L+j+1,2*L+j)=-t;
    a(2*L+L,2*L+1)=-t;
    a(2*L+1,2*L+L)=-t;
    a(j,L+j)=Rx*cos(2*pi*time/T)*exp(-1i*gamma*j);
    a(L+j,j)=Rx*cos(2*pi*time/T)*exp(1i*gamma*j);
    a(L+j,2*L+j)=Rx*cos(2*pi*time/T)*exp(-1i*gamma*j);
    a(2*L+j,L+j)=Rx*cos(2*pi*time/T)*exp(1i*gamma*j);
    a(2*L+j,j)=Ry*sin(2*pi*time/T)*exp(-1i*gamma*j);
    a(j,2*L+j)=Ry*sin(2*pi*time/T)*exp(1i*gamma*j);
end
timedepf=a*y;

(请不要关心A的实际形式,它只是一个3 * L X 3 * L方阵),然后调用求解器

time_span=[0 T];
[time,V]=ode45(@(time,V)timedep(time,V,L,t,gamma,Rx,Ry,T),time_span,V0);

其中V0是合适的3 * L X 3 * L初始条件。然后我收到了错误

Error using  * 
Inner matrix dimensions must agree.

Error in timedep (line 23)
timedepf=a*y;
Error in @(time,V)timedep(time,V,L,t,gamma,Rx,Ry,T)


Error in odearguments (line 88)
f0 = feval(ode,t0,y0,args{:});   % ODE15I sets args{1} to yp0.

Error in ode45 (line 114)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in Pumping (line 65)
[time,V]=ode45(@(time,V)timedep(time,V,L,t,gamma,Rx,Ry,T),time_span,V0);

我无法找出错误的地方。你能帮我吗?

非常感谢!

0 个答案:

没有答案