K
是一个大型稀疏矩阵,y
是一个向量。从dt
到t1
的特定时间步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;
这两种方法对大型稀疏矩阵给出了不同的结果。哪个是正确的?
答案 0 :(得分:0)
正如我上面提到的,没有办法100%保证ode求解器结果的正确性。但你可以:
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}} Jacobian
和Jpattern
选项的 Here is the description。请注意,您不能将它们与ode45
一起使用,您应该使用其他解算器