为什么ode45不在我请求的时间点返回解决方案,即使我指定了一个包含2个以上元素的时间跨度



我的matlab脚本非常简单:

tstart = 0;
tend = 10;
num_points = 50;
ts = linspace(tstart, tend, num_points);
x_0 = rand(2, 1); % random column vector
kmat = rand(2, 2); % random RHS matrix
sol = ode45(@(t, x) F(x, kmat), ts', x_0);
xs = sol.y;
size(xs)

其中函数FF.m中定义为:

function result = F(x, kmat)
    result = kmat*x;
end

现在,当我运行这个脚本时,我得到以下输出(xs的大小):

size_xs =
     2    12

但是,我明确指出,我希望在0到10之间的50个点上求解ODE(请参见定义tslinspace命令)。如果我尝试找到ts的大小,我会得到:

>> size(ts)
ans =
     1    50

所以ts中有50个点,但ode45忽略了这一点?为什么?

单个输出表单将始终返回一个结构,用于deval以生成密集输出。

要通过时间矢量(本例中为ts)自动返回您请求的点,您需要使用两种输出形式:

[t,xs] = ode45(@(t, x) F(x, kmat), ts', x_0);

相关内容

最新更新