四阶Runge-Kutta方法求解高阶微分方程

一、经典的Runge-Kutta方法(四级四阶RK方法)

Runge-Kutta法(简写为RK方法)既可达到较高精度,又可避免高阶导数计算。

对微分方程,在区间上的四阶Runge-Kutta方法的公式如下:

二、利用4阶Runge-Kutta方法计算三阶微分方程的数值解

考虑三阶方程的初值问题,其精确解为,采用4阶Runge-Kutta法求解上述问题,时间步长取,给出的数值解并计算它的误差。

解:

,则有

这里就将三阶微分方程转换为了一阶微分方程。

Matlab 复制代码
format long

%步长
h=0.1;

%节点
X=0:0.1:1;

%节点数
n=length(X);

%计算精确解
exact=zeros(1,n);
exact(1)=-3;
for i=2:n
    exact(i)=-sin(2*X(i))+X(i)^2-3;
end

%定义初值
T0=[-3,-2,2]';

%矩阵A
A=[0,1,0;0,0,1;-4,-4,-1];

%矩阵B
B=@(t) [0,0,4*t^2+8*t-10]';

%采用4阶Runge-Kutta法计算数值解
RK=zeros(3,n);
RK(:,1)=[-3,-2,2]';
for i=2:n
    K1=A*RK(:,i-1)+B(X(i-1));
    K2=A*(RK(:,i-1)+h*K1/2)+B(X(i-1)+h/2);
    K3=A*(RK(:,i-1)+h*K2/2)+B(X(i-1)+h/2);
    K4=A*(RK(:,i-1)+h*K3)+B(X(i-1)+h);
    RK(:,i)=RK(:,i-1)+h*(K1+2*K2+2*K3+K4)/6;
end

%计算误差
error=zeros(1,n);
for i=1:n
    error(i)=exact(i)-RK(1,i);
end

代码运行结果如下:

Matlab 复制代码
>> exact

exact =

  列 1 至 8

  -3.000000000000000  -3.188669330795061  -3.349418342308651  -3.474642473395035  -3.557356090899523  -3.591470984807897  -3.572039085967226  -3.495449729988460

  列 9 至 11

  -3.359573603041505  -3.163847630878195  -2.909297426825682

>> RK

RK =

  列 1 至 8

  -3.000000000000000  -3.188665833333333  -3.349411584260417  -3.474633023698538  -3.557344818827218  -3.591459008229691  -3.572027702381619  -3.495440334073228
  -2.000000000000000  -1.760134166666667  -1.442126355739583  -1.050681117543240  -0.593430638007944  -0.080630473086421   0.475249299264954   1.060021210401120
   2.000000000000000   2.794664166666667   3.557647924406250   4.258534364434485   4.869382162297890   5.365839478508025   5.728114760558181   5.941765744667896

  列 9 至 11

  -3.359567595262150  -3.163846322248371  -2.909301945209178
   1.658345996992094   2.254344113727377   2.832228784247623
   5.998275203244931   5.895390485630893   5.637213316282446

>> error

error =

   1.0e-04 *

  列 1 至 8

                   0  -0.034974617277861  -0.067580482339125  -0.094496964977431  -0.112720723053350  -0.119765782056191  -0.113835856074829  -0.093959152320799

  列 9 至 11

  -0.060077793553326  -0.013086298240594   0.045183834957996
相关推荐
良月澪二1 小时前
CSP-S 2021 T1廊桥分配
算法·图论
wangyue42 小时前
c# 线性回归和多项式拟合
算法
&梧桐树夏2 小时前
【算法系列-链表】删除链表的倒数第N个结点
数据结构·算法·链表
QuantumStack2 小时前
【C++ 真题】B2037 奇偶数判断
数据结构·c++·算法
今天好像不上班2 小时前
软件验证与确认实验二-单元测试
测试工具·算法
wclass-zhengge3 小时前
数据结构篇(绪论)
java·数据结构·算法
何事驚慌3 小时前
2024/10/5 数据结构打卡
java·数据结构·算法
结衣结衣.3 小时前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
大二转专业5 小时前
408算法题leetcode--第24天
考研·算法·leetcode
凭栏落花侧5 小时前
决策树:简单易懂的预测模型
人工智能·算法·决策树·机器学习·信息可视化·数据挖掘·数据分析