我试图用函数ode45来解决一个非常简单的ODE(1.命令反应率),但是虽然我能够成功地做到这一点,但我并不是100%确定实际发生了什么。这是参考代码:
x0 = [0.1,0.1];
tspan = [0, 10];
k = [1, 1];
[t_a, x_a] = ode45(@odefun, tspan, x0, [], k);
plot(t_a, x_a)
xlabel('t')
ylabel('x')
legend('A','B')
function dxdt = odefun(t,x,k)
k1 = k(1);
dxdt = zeros(2,1);
dxdt(1) = -2*k1*x(1)*x(1);
dxdt(2) = k1*x(1)*x(1);
end
这产生了预期的结果,但我不明白的是,odefun的输入参数究竟是什么(我知道它们代表什么,但不知道它们是如何创建的,因为我从未定义它们)。文档对此没什么大帮助,所以我想知道,来自哪里?它们是由ode45提供的吗?如果是这样,当odefun是ode45的输入时,这怎么可能?
显然这段代码并非由我完整编写,因此,更具体地说,我无法理解我如何知道我必须使用x(1)。
感谢您的帮助!
答案 0 :(得分:0)
t
和x
输入由ode45根据您提供的t和x的初始值生成。 ode45在解决问题时用新值t和x调用函数,新值基于函数的输出。