当前位置:   article > 正文

matlab:使用四阶龙格库塔方法求解微分方程组_经典四阶龙格库塔法解一阶微分方程组 matlab

经典四阶龙格库塔法解一阶微分方程组 matlab
  1. %书籍:常用数值算法及其matlab实现
  2. %第10章 常微分方程初值问题的数值解法,例10.14使用
  3. %四阶龙格库塔方法
  4. function [t,z] = rk4symeq(fun, t0, tf, Za, h)
  5. %fun:微分方程的右表达式
  6. %t0, tn为区间
  7. %Za为初值,是列向量
  8. M = floor(tf-t0)/h ; %离散点的个数M+1
  9. if t0 >= tf
  10. printf('左端点必须小于右端点');
  11. return;
  12. end
  13. N = length(Za); %获得变量个数,N
  14. z = zeros(M+1, N);
  15. t = zeros(M +1, 1);
  16. t =[t0 : h :tf]';
  17. z(1,:) = Za'; %假设Za为列向量,与微分方程中的变量方向统一,变成行向量
  18. for i = 1:M
  19. K1 = feval(fun, t(i) , z(i,:)); %K是行向量
  20. K2 = feval(fun, t(i)+1/2*h ,z(i,:)+1/2* h*K1);
  21. K3 = feval(fun, t(i)+1/2*h ,z(i,:)+1/2* h*K2);
  22. K4 = feval(fun, t(i)+ h ,z(i,:)+ h*K3);
  23. z(i+1,:) = z(i,:) +h/6 *(K1 + 2*K2 + 2*K3 + K4);
  24. end
  25. 方程组1-输出为行向量
  26. %书籍:常用数值算法及其matlab实现
  27. %第10章 常微分方程初值问题的数值解法
  28. %四阶龙格库塔,例10.15
  29. function s = exa10_15(t,z)
  30. %z是个向量,1*3
  31. %输出s也是向量,1*3
  32. s = zeros(1,3);
  33. dy1 = -10*z(1) +10*z(2);
  34. dy2 = 28*z(1) - z(2) - z(1)*z(3);
  35. dy3 = -8/3*z(3) + z(1)*z(2);
  36. s = [dy1 dy2 dy3]; %输出s为行向量
  37. 微分方程组——输出为列向量
  38. %书籍:常用数值算法及其matlab实现
  39. %第10章 常微分方程初值问题的数值解法
  40. %四阶龙格库塔,例10.15
  41. function s = exa10_15b(t,z)
  42. %z是个向量,1*3
  43. %输出s也是向量,1*3
  44. s = zeros(1,3);
  45. dy1 = -10*z(1) +10*z(2);
  46. dy2 = 28*z(1) - z(2) - z(1)*z(3);
  47. dy3 = -8/3*z(3) + z(1)*z(2);
  48. s = [dy1; dy2; dy3]; %输出s为列向量,用于ode45调用
  49. 主函数
  50. clear all;clc;close all;
  51. %书籍:常用数值算法及其matlab实现
  52. %第10章 常微分方程组初值问题的数值解法
  53. %四阶龙格库塔,例10.15
  54. %函数原型 function [t,z] = rk4symeq(fun, t0, tn, Za, h)
  55. format long
  56. t0 = 0; tf = 5;
  57. Za = [-8 ; 8; 27]; %x初值
  58. h1 = 0.01;
  59. [t1,z1] = rk4symeq(@exa10_15, t0, tf , Za, h1);
  60. figure(1)
  61. plot(t1,z1(:,1),'b',t1,z1(:,2), 'r',t1,z1(:,3), 'g--')
  62. legend('y1','y2','y3')
  63. figure(2)
  64. plot3(z1(:,1),z1(:,2),z1(:,3));
  65. xlabel('x');ylabel('y');zlabel('z');
  66. [t2,z2] = ode45(@exa10_15b, [0,5] ,[-8 , 8 ,27]); %用系统函数
  67. figure(3)
  68. plot(t2,z2(:,1),'b',t2,z2(:,2), 'r',t2,z2(:,3), 'g--')
  69. legend('y1','y2','y3')

运行结果:

 

 

 

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

闽ICP备14008679号