我的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(参见linspace
命令定义ts
)。如果我尝试找到ts
的大小,我会得到:
>> size(ts)
ans =
1 50
ts
中有50分,但ode45
忽略了这一点?怎么样?
答案 0 :(得分:1)
single output表单将始终返回一个与deval
一起使用的结构,以生成密集输出。
要通过时间向量自动返回您请求的点数(在本例中为ts
),您需要使用two-output表单:
[t,xs] = ode45(@(t, x) F(x, kmat), ts', x_0);