0
我试图用函数ode45解决一个相当简单的ODE(1.命令反应速率),但是虽然我能够成功地完成,但我并不是100%确定实际发生了什么。这是参考代码:使用ode45函数时,odefun的输入变量是什么?
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)。
感谢您的帮助!
该文档很清楚“odefun”是什么。它说:“要解决的功能,指定为定义要集成的功能的功能句柄。”至于'x(1)'完全取决于你的函数。 – Matt
此代码无法运行。具体来说'dxd'应该是'dxdt'。此外,初始条件只有一个值,但你的'odefun'提供两个输出,这意味着你有一个微分方程组。请仔细检查您的帖子并使用正确的代码进行更新。 – rayryeng
对不起,从编辑器复制时我很sl I,我纠正了它,并希望更清楚。 @Matt也许我有一些基本的问题,理解handel正在做什么(我正在阅读它一段时间,但我不认为我完全掌握了它在这个特定的上下文中)。但我仍然没有看到输入来自哪里。对不起,如果这是愚蠢的 – YumTum