ODE45:在稀疏矩阵中给出`expm`的不同结果

时间:2016-08-21 21:07:00

标签: matlab matrix ode differential-equations

K是一个大型稀疏矩阵,y是一个向量。从dtt1的特定时间步t1+dt

方法一: expm导致:

K = ...
y = ...    
y = expm(-1i*dt*K)*y; %new y

方法2:

ode45给出:

K = ...
y = ... 
y0 = y;
[T, Y] = ode45(@(t,y)dy(y,K),[t1 t1+dt],y0);
y = Y(end,:).'; %new y

其中:

function ydot = dy(y,K)
ydot = -1i*K*y;

这两种方法对大型稀疏矩阵给出了不同的结果。哪个是正确的?

1 个答案:

答案 0 :(得分:0)

正如我上面提到的,没有办法100%保证ode求解器结果的正确性。但你可以:

  • 手动设置积分步长的上限;
  • 尝试使用 僵硬的解决者(ode15s,ode23t等);
  • 提供雅可比矩阵或 dy(y,K)的雅可比模式可提高求解器的准确度。

以下是手动设置最大步长的示例:

options= odeset('MaxStep',1e-3); % some experimentally obtained value here
[T, Y] = ode45(@(t,y)dy(y,K),[t1 t1+dt],y0,options);
<{1}} JacobianJpattern选项的

Here is the description。请注意,您不能将它们与ode45一起使用,您应该使用其他解算器