2016-09-30 35 views
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)。

感谢您的帮助!

+0

该文档很清楚“odefun”是什么。它说:“要解决的功能,指定为定义要集成的功能的功能句柄。”至于'x(1)'完全取决于你的函数。 – Matt

+1

此代码无法运行。具体来说'dxd'应该是'dxdt'。此外,初始条件只有一个值,但你的'odefun'提供两个输出,这意味着你有一个微分方程组。请仔细检查您的帖子并使用正确的代码进行更新。 – rayryeng

+0

对不起,从编辑器复制时我很sl I,我纠正了它,并希望更清楚。 @Matt也许我有一些基本的问题,理解handel正在做什么(我正在阅读它一段时间,但我不认为我完全掌握了它在这个特定的上下文中)。但我仍然没有看到输入来自哪里。对不起,如果这是愚蠢的 – YumTum

回答

0

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

相关问题