我的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)
其中函数F
在F.m
中定义为:
function result = F(x, kmat)
result = kmat*x;
end
现在,当我运行这个脚本时,我得到以下输出(xs
的大小):
size_xs =
2 12
但是,我明确指出,我希望在0到10之间的50个点上求解ODE(请参见定义ts
的linspace
命令)。如果我尝试找到ts
的大小,我会得到:
>> size(ts)
ans =
1 50
所以ts
中有50个点,但ode45
忽略了这一点?为什么?
单个输出表单将始终返回一个结构,用于deval
以生成密集输出。
要通过时间矢量(本例中为ts
)自动返回您请求的点,您需要使用两种输出形式:
[t,xs] = ode45(@(t, x) F(x, kmat), ts', x_0);