四阶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
相关推荐
森焱森23 分钟前
单片机中 main() 函数无 while 循环的后果及应对策略
c语言·单片机·算法·架构·无人机
平和男人杨争争41 分钟前
机器学习12——支持向量机中
算法·机器学习·支持向量机
10岁的博客1 小时前
代码编程:一场思维与创造力的革命
开发语言·算法
Aczone281 小时前
嵌入式 数据结构学习 (六) 树、哈希表与内核链表
数据结构·学习·算法
定偶1 小时前
进制转换小题
c语言·开发语言·数据结构·算法
体系结构论文研讨会2 小时前
多项式环及Rq的含义
算法
智驱力人工智能2 小时前
极端高温下的智慧出行:危险检测与救援
人工智能·算法·安全·行为识别·智能巡航·高温预警·高温监测
森焱森2 小时前
60 美元玩转 Li-Fi —— 开源 OpenVLC 平台入门(附 BeagleBone Black 驱动简单解析)
c语言·单片机·算法·架构·开源
课堂剪切板3 小时前
ch07 题解
算法·深度优先
科大饭桶5 小时前
数据结构自学Day5--链表知识总结
数据结构·算法·leetcode·链表·c