当前位置:   article > 正文

matlab:采用4阶龙格库塔方法求解微分方程_四阶龙格库塔法解弹道微分方程

四阶龙格库塔法解弹道微分方程

参考书目:《数值方法(matlab)》,作者:周璐 翻译。

  1. %龙格-库塔方法求解微分方程
  2. function [t,y] = my_rk4(f, t0, tf , y0, h)
  3. %f-函数; t0,tf:区间; y0,初值;h 步长
  4. M = floor((tf - t0)/h); % 离散点的个数
  5. t = zeros(M +1, 1);
  6. y = zeros(M +1, 1);
  7. t = [t0 : h :tf]';
  8. y(1) = y0;
  9. for i =1:M
  10. k1 = feval(f, t(i), y(i));
  11. k2 = feval(f, t(i)+h/2, y(i)+h/2*k1);
  12. k3 = feval(f, t(i)+h/2, y(i)+h/2*k2);
  13. k4 = feval(f, t(i)+h, y(i)+h*k3);
  14. y(i+1) = y(i) + h/6*( k1 + 2* k2 + 2* k3 + k4 );
  15. end
  1. clear all;clc
  2. %调用龙格库塔方法求解微分方程-
  3. %函数原型 function [t,y] = my_rk4(f, t0, tf , y0, h)
  4. format long
  5. t0 = 0;tf = 3;
  6. y0 = 1;
  7. h1 = 1; h2 = 0.5; h3 = 0.25; h4 = 1/8;
  8. [t1,y1] = my_rk4(@myfun, t0, tf , y0, h1)
  9. [t2,y2] = my_rk4(@myfun, t0, tf , y0, h2)
  10. [t3,y3] = my_rk4(@myfun, t0, tf , y0, h3)
  11. [t4,y4] = my_rk4(@myfun, t0, tf , y0, h4)
  12. plot(t1,y1,'b>',t2,y2,'y*' ,t3,y3,'ro',t4,y4,'g--');hold on;
  13. xlabel('t');ylabel('y');grid on;
  14. legend('h=1', 'h=1/2','h=1/4','h=1/8');
  15. plot(t4, 3*exp(-t4/2) - 2 +t4);
  16. %第二种写法
  17. % myfun1 = @(t,y)1/2*(t - y)
  18. % [t,y1] = my_euler(myfun1, t0, tf , y0, h1)
  19. % [t,y2] = my_euler(myfun1, t0, tf , y0, h2)
  20. % [t,y3] = my_euler(myfun1, t0, tf , y0, h3)
  21. % [t,y4] = my_euler(myfun1, t0, tf , y0, h4)

结果:

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/550651
推荐阅读
相关标签
  

闽ICP备14008679号