使用ode45函数时odefun的输入变量是什么?

时间:2016-09-30 16:49:09

标签: matlab ode

我试图用函数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)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

tx输入由ode45根据您提供的t和x的初始值生成。 ode45在解决问题时用新值t和x调用函数,新值基于函数的输出。