【问题标题】:Solving coupled Differential Equation by Matlab or by calculations通过 Matlab 或计算求解耦合微分方程
【发布时间】:2013-01-04 11:24:42
【问题描述】:

通过 Mat-lab 或计算求解耦合非线性微分方程

equation 1:   x'(t) = -a* x(t) /(x(t) + y(t))
equation 2:   y'(t) = -b* y(t) /(x(t) + y(t))

我在mathematica 中尝试过,但得到了一个非常复杂的解决方案。

Solve[{x'[t] == -a* x[t] /(x[t] + y[t]), y'[t] == -b* y[t] /(x[t] + y[t])}, {x, y}, t]

如何绘制它?

我的初始条件是

 x(0) = xo
 y(0) = yo

另外,a 和 b 是常数。

在插入 a 和 b 的值后,我必须绘制 x 和 y wrt t 。 ( a= 2 , b =5 说)

【问题讨论】:

    标签: matlab differential-equations


    【解决方案1】:

    在这种情况下需要注意很多事情:

    1. 你需要创建一个同时包含 a 和 b 的函数:

      function dy =soProblem(t,y,a,b)
          dy=[-a*y(1)/(y(1)+y(2)); -b*y(2)/(y(1)+y(2))];
      end
      
    2. 调用标准ode函数:

      a = 2;
      b = 5; tend = 10; x0 = 1; y0 = 2;
      [T,Y] = ode45(@(t,y)soProblem(t,y,a,b),[0 tend],[x0 y0]);
      plot (T,Y)
      
    3. 意识到你手上可能有一个stiff equation

    4. 享受识别理想函数调用的乐趣:

      [T15,Y15] = ode15s(@(t,y)soProblem(t,y,a,b),[0 tend],[x0 y0]);
      [T23t,Y23t] = ode23t(@(t,y)soProblem(t,y,a,b),[0 tend],[x0 y0]);
      [T23tb,Y23tb] = ode23tb(@(t,y)soProblem(t,y,a,b),[0 tend],[x0 y0]);
      %note ode23s doesn't converge (or at least takes forever)
      plot (T,Y,T15,Y15,T23t,Y23t,T23tb,Y23tb)
      
    5. 了解mathematica 变得焦躁不安的原因

    【讨论】:

      【解决方案2】:

      在数学中: 试试 ndsolve

      在matlab中:

      创建一个函数文件yourfunction.m:

      function [Y_prime]=yourfunction(t, Y)
          Y_prime=[-2*Y(1)./(Y(1) + Y(2)) -5*Y(2)./(Y(1) + Y(2))];
      end
      

      然后

      [T,Y] = ode45(yourfunction,[0 t_end],[x0 y0]);
      plot(T,Y(:,1));
      hold on
      plot(T,Y(:,2));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-16
        相关资源
        最近更新 更多