为什么ode45在我请求的时间点没有返回解决方案,即使我指定了超过2个元素的时间跨度?

时间:2015-04-04 16:14:16

标签: matlab

我的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(参见linspace命令定义ts)。如果我尝试找到ts的大小,我会得到:

>> size(ts)

ans =

     1    50

ts中有50分,但ode45忽略了这一点?怎么样?

1 个答案:

答案 0 :(得分:1)

single output表单将始终返回一个与deval一起使用的结构,以生成密集输出。

要通过时间向量自动返回您请求的点数(在本例中为ts),您需要使用two-output表单:

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