如何在MATLAB中解决这个微分方程?

时间:2013-01-14 11:33:30

标签: matlab differential-equations

微分方程是:

k*r=sqrt( (r`)^2 + r^2 )

k的值是2.如何实现该功能并用ode45解决?

1 个答案:

答案 0 :(得分:0)

这非常简单。一些重要的事情:

  1. 您需要以ODE45期望的格式表达您的微分方程,即dy/dt = f(t,y)。这意味着对于你的函数,而不是k*r=sqrt( (drdt)^2 + r^2 ),你需要将其视为drdt = sqrt( (k*r)^2 - r^2 )(假设我正确地完成了我的代数)。

  2. 该函数需要可矢量化。对于这个问题,这几乎意味着使用^代替.^,而不是*,使用.*

  3. 然后我们可以使用基本的匿名函数语法来设置要解决的函数:

    k = 2;
    fn_drdt = @(t,r) sqrt( (k.*r).^2 - (r.^2)  );
    

    使用ODE45解决它

    tStart = 0;
    tEnd = 10;
    r_init = -5;
    [t, r] = ode45(fn_drdt, [tStart tEnd], r_init);
    

    然后制作基本情节

    plot(t,r,'.');
    

    添加标题

    title(sprintf('Solution to %s with k=%d ,r_0=%d', func2str(fn_drdt), k, r_init), 'fontname','courier')