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

news2024/9/26 5:13:52

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

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

对微分方程\frac{du}{dt}=f(t,u),在区间[t_{n},t_{n+1}]=[t_{n},t_{n}+\Delta t]上的四阶Runge-Kutta方法的公式如下:

\left\{\begin{matrix} U_{n+1}=U_{n}+\frac{h}{6}(K_{1}+2K_{2}+2K_{3}+K_{4})\\ K_{1}=f(t_{n},U_{n})\\ K_{2}=f(t_{n}+\frac{1}{2}h,U_{n}+\frac{1}{2}hK_{1})\\ K_{3}=f(t_{n}+\frac{1}{2}h,U_{n}+\frac{1}{2}hK_{2})\\ K_{4}=f(t_{n}+h,U_{n}+hK_{3}) \end{matrix}\right. ,h=\Delta t

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

考虑三阶方程的初值问题\left\{\begin{matrix} v^{'''}(t)+v^{''}(t)+4v^{'}(t)+4v(t)=4t^{2}+8t-10\\ v(0)=-3,v^{'}(0)=-2,v^{''}(0)=2\\ \end{matrix}\right.,其精确解为v(t)=-sin(2t)+t^{2}-3,采用4阶Runge-Kutta法求解上述问题,时间步长取\Delta t=0.1,给出0\leq t\leq 1的数值解并计算它的误差。

解:

T=\begin{bmatrix} V\\ V^{'}\\ V^{''} \end{bmatrix},则有

T^{'}=\begin{bmatrix} V^{'}\\ V^{''}\\ V^{'''} \end{bmatrix}=\begin{bmatrix} 0 &1 & 0\\ 0& 0 & 1\\ -4 & -4 &-1 \end{bmatrix}\begin{bmatrix} V\\ V^{'}\\ V^{''} \end{bmatrix}+\begin{bmatrix} 0\\ 0\\ 4t^{2}+8t-10 \end{bmatrix}

T^{'}=\begin{bmatrix} V^{'}\\ V^{''}\\ V^{'''} \end{bmatrix}=\begin{bmatrix} 0 &1 & 0\\ 0& 0 & 1\\ -4 & -4 &-1 \end{bmatrix}T+\begin{bmatrix} 0\\ 0\\ 4t^{2}+8t-10 \end{bmatrix}

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

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

代码运行结果如下:

>> 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1533591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Elasticsearch - Docker安装Elasticsearch8.12.2

前言 最近在学习 ES,所以需要在服务器上装一个单节点的 ES 服务器环境:centos 7.9 安装 下载镜像 目前最新版本是 8.12.2 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2创建配置 新增配置文件 elasticsearch.yml http.host…

.locked勒索病毒是什么,企业数据被加密了如何恢复?

.locked勒索病毒介绍 .locked勒索病毒是一种恶意软件,它利用加密技术锁定用户的数据或系统,并以此进行勒索。用户一旦感染此病毒,将无法访问其重要文件,病毒会要求用户支付一笔赎金以获取解密密钥。这种病毒通常使用强大的加密算法…

为什么选VR全景技术进行乡村展示,VR全景技术助力乡村振兴

引言: 在科技飞速发展的当下,乡村振兴成为国家重要战略,如何创新性地展示乡村特色,提升乡村吸引力,成为当务之急。VR全景技术,作为一种新兴的展示手段,可以为乡村展示提供全新的视角&#xff0…

可观测性体系建设后,该如何挖掘数据及工具价值?

在现代企业的运维管理中,构建高效且可靠的可观测性体系是保障系统稳定性和业务连续性的关键。然而,运维团队成员的技术能力参差不齐往往成为实现这一目标的障碍。尤其在处理复杂系统故障时,高度依赖专业知识和经验的可观测性工具很难被全员有…

如何在Linux Ubuntu系统安装Nginx服务并实现无公网IP远程连接

文章目录 1. 安装Docker2. 使用Docker拉取Nginx镜像3. 创建并启动Nginx容器4. 本地连接测试5. 公网远程访问本地Nginx5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 在开发人员的工作中,公网远程访问内网是其必备的技术需求之一。对于…

vue key的bug

今天遇到一个bug,列表删除元素时,明明在外层设置了key,但是列表元素的状态居然复用了,找了好久原因,最后是key的取值问题,记录一下。 首先key可以取undefine,这个是不会报错的 然后项目的代码结…

C#配置连接数据库字段

在Web.config文件中 添加如下配置 <!--连接数据库字段--><connectionStrings><add name"sql" connectionString"server.;uidsa;pwd8888;databaseArticleWebSite" /></connectionStrings>

element plus等框架中属性值是组件如何传入,替换分页图标

在 Vue 中替换element plus 分页图标 正常写法引入组件 import prevIcon from /components/xx.vue;<el-pagination layout"prev, pager, next" :prev-icon"prevIcon" :total"5" />利用 h 函数写法 const prevIcon h(div, [xr]);可以写…

发送邮件接口的工作原理?有哪些常用参数?

发送邮件接口的功能有哪些&#xff1f;如何选择发送邮件接口&#xff1f; 无论是商务沟通、信息传递还是个人交流&#xff0c;发送邮件都是一种高效且便捷的方式。而在这背后&#xff0c;发送邮件接口发挥着至关重要的作用。那么&#xff0c;发送邮件接口的工作原理究竟是怎样…

springboot网站开发如何配置log4j日志插件

springboot网站开发如何配置log4j日志插件&#xff01;为了便于服务器等环境下的错误情况的排查根源&#xff0c;还是很有必要使用日志插件的&#xff0c;它可以记录下我们提前埋下的锚点信息。 在遇到故障&#xff0c;查看这些锚点记录的日志信息&#xff0c;可以快速高效的解…

C++第九弹---类与对象(六)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】 日期类 1、日期类的分析和设计 1.1、日期类的功能说明 1.2、日期类的分析和设计 1.2.1、数据结构的分析 1.2.2、文件结构设计 2、日期类的结构分析…

深度学习 精选笔记(13.1)卷积神经网络-LeNet模型

学习参考&#xff1a; 动手学深度学习2.0Deep-Learning-with-TensorFlow-bookpytorchlightning ①如有冒犯、请联系侵删。 ②已写完的笔记文章会不定时一直修订修改(删、改、增)&#xff0c;以达到集多方教程的精华于一文的目的。 ③非常推荐上面&#xff08;学习参考&#x…

HCIA复习

上面的文件里有思维导图哦~ 一、情景再现&#xff1a;ISP网络为学校提供了DNS服务&#xff0c;所以&#xff0c;DNS服务器驻留在ISP网络内&#xff0c;而不再学校网络内。DHCP服务器运行在学校网络的路由器上。 小明拿了一台电脑&#xff0c;通过网线&#xff0c;接入到校园网…

使用el-cascader组件写下拉级联多选并且具有全选功能

样式 说明: 级联选择器中加上全选的按钮, 并且保证数据响应式。 思路 因为是有全选的功能,所以不能直接使用el-cascader组件, 而是选择使用el-select组件, 在此组件内部使用el-cascader-panel级联面板全选按钮也是写在el-select组件中, 并且去监听全选按钮的状态, 根…

The Open Group开放数字标准组合|管理您的数字景观

据麻省理工学院斯隆Sloan和凯捷咨询Capgemini称&#xff0c;90%的首席执行官认为数字经济将影响他们的行业&#xff0c;但只有不到15%的首席执行官正在执行数字战略。 数字化转型对于企业在当今不断变化的市场和技术环境中持续保持竞争力至关重要。近年来&#xff0c;商业世界发…

‍Java OCR技术全面解析:六大解决方案比较

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

HarmonyOS ArkTS 基础组件

目录 一、常用组件 二、文本显示&#xff08;Text/Span) 2.1 创建文本 2.2 属性 2.3 添加子组件(Span) 2.4 添加事件 三、按钮&#xff08;Button&#xff09; 3.1 创建按钮 3.2 设置按钮类型 3.3 悬浮按钮 四、文本输入&#xff08;TextInput/TextArea&#xff09;…

vue-生成二维码

安装 yarn add qrcodejs2 --save npm install qrcodejs2 --save 使用 <template><div><div id"qrcodeImg"></div><!-- 创建一个div&#xff0c;并设置id --></div> </template> <script> import QRCode from q…

vue3中如何实现多个侦听器(watch)

<body> <div id"app"><input type"button" value"更改名字" click"change"> </div> <script src"vue.js"></script> <script>new Vue({el: #app,data: {food: {id: 1,name: 冰激…

C语言学习 三、运算符与表达式

3.1 运算符分类 c语言提供了13种类型的运算符&#xff0c;如下所示&#xff1a; &#xff08;1&#xff09;算术运算符&#xff08; - * / %&#xff09; &#xff08;2&#xff09;关系运算符&#xff08;> < > < !&#xff09; &#xff08;3&#xff09;逻…