Matlab 四阶龙格库塔法求解二元常微分方程组

article/2025/8/29 19:45:38

龙格库塔法是一种求解高阶常微分方程的常用方法,在工程当中应用广泛,例如求解物体的运动方程等。
这里我们通过matlab程序编写龙格库塔算法求解二元常微分方程组,假设有常微分方程组:
{ x ¨ − x ˙ + 2 y ¨ + y ˙ = − 2 s i n t − 3 c o s t x ¨ + y ¨ = − s i n t − c o s t x ( 0 ) = 0 y ( 0 ) = 1 x ˙ ( 0 ) = 1 y ˙ ( 0 ) = 0 \left\{ \begin{array}{lr} \ddot{x}-\dot{x}+2\ddot{y}+\dot{y}=-2\rm sin \it t - \rm 3\rm cos \it t \\ \ddot{x}+\ddot{y}=-\rm sin \it t - \rm \rm cos \it t \\ x(0)=0 \\ y(0)=1 \\ \dot{x}(0)=1 \\ \dot{y}(0)=0 \\ \end{array} \right. x¨x˙+2y¨+y˙=2sint3costx¨+y¨=sintcostx(0)=0y(0)=1x˙(0)=1y˙(0)=0
该方程有精确解:
{ x = s i n t y = c o s t \left\{ \begin{array}{lr} x=\rm sin \it t \\ y=\rm cos \it t \\ \end{array} \right. {x=sinty=cost
u 1 = x u_1=x u1=x, u 2 = x ˙ u_2=\dot{x} u2=x˙, w 1 = y w_1=y w1=y, w 2 = y ˙ w_2=\dot{y} w2=y˙,则原式可写为
{ f 1 ( t ) = u 2 = x ˙ f 2 ( t ) = u 2 ′ = x ¨ = c o s t − x ˙ + y ˙ f 3 ( t ) = w 2 = y ˙ f 4 ( t ) = w 2 ′ = y ¨ = − s i n t − 2 c o s t + x ˙ − y ˙ \left\{ \begin{array}{lr} f1(t)=u_2=\dot{x} \\ f2(t)=u_2'=\ddot{x}=\rm cos \it t -\dot{x}+\dot{y} \\ f3(t)=w_2=\dot{y} \\ f4(t)=w_2'=\ddot{y}=-\rm sin \it t - \rm 2\rm cos \it t +\dot{x}-\dot{y} \\ \end{array} \right. f1(t)=u2=x˙f2(t)=u2=x¨=costx˙+y˙f3(t)=w2=y˙f4(t)=w2=y¨=sint2cost+x˙y˙
可以编写四个子函数如下:

function output = f1(x,u1,u2,w1,w2)
output = u2;
function output = f2(x,u1,u2,w1,w2)
output = cos(x)-u2+w2;
function output = f3(x,u1,u2,w1,w2)
output = w2;
function output = f4(x,u1,u2,w1,w2)
output = -sin(x)-2*cos(x)-w2+u2;

四阶龙格库塔函数程序

function [u1,u2,w1,w2] = RK4_2variable(u1,u2,w1,w2,h,a,b)x = a:h:b;for i = 1:length(x)-1k11 = f1(x(i) , u1(i) , u2(i) , w1(i) , w2(i));
k21 = f2(x(i) , u1(i) , u2(i) , w1(i) , w2(i));
L11 = f3(x(i) , u1(i) , u2(i) , w1(i) , w2(i));
L21 = f4(x(i) , u1(i) , u2(i) , w1(i) , w2(i));k12 = f1(x(i)+h/2 , u1(i)+h*k11/2 , u2(i)+h*k21/2 , w1(i)+h*L11/2, w2(i)+h*L21/2);
k22 = f2(x(i)+h/2 , u1(i)+h*k11/2 , u2(i)+h*k21/2 , w1(i)+h*L11/2, w2(i)+h*L21/2);
L12 = f3(x(i)+h/2 , u1(i)+h*k11/2 , u2(i)+h*k21/2 , w1(i)+h*L11/2, w2(i)+h*L21/2);
L22 = f4(x(i)+h/2 , u1(i)+h*k11/2 , u2(i)+h*k21/2 , w1(i)+h*L11/2, w2(i)+h*L21/2);k13 = f1(x(i)+h/2 , u1(i)+h*k12/2 , u2(i)+h*k22/2 , w1(i)+h*L12/2 , w2(i)+h*L22/2);
k23 = f2(x(i)+h/2 , u1(i)+h*k12/2 , u2(i)+h*k22/2 , w1(i)+h*L12/2 , w2(i)+h*L22/2);
L13 = f3(x(i)+h/2 , u1(i)+h*k12/2 , u2(i)+h*k22/2 , w1(i)+h*L12/2 , w2(i)+h*L22/2);
L23 = f4(x(i)+h/2 , u1(i)+h*k12/2 , u2(i)+h*k22/2 , w1(i)+h*L12/2 , w2(i)+h*L22/2);k14 = f1(x(i)+h , u1(i)+h*k13 , u2(i)+h*k23 , w1(i)+h*L13 , w2(i)+h*L23);
k24 = f2(x(i)+h , u1(i)+h*k13 , u2(i)+h*k23 , w1(i)+h*L13 , w2(i)+h*L23);
L14 = f3(x(i)+h , u1(i)+h*k13 , u2(i)+h*k23 , w1(i)+h*L13 , w2(i)+h*L23);
L24 = f4(x(i)+h , u1(i)+h*k13 , u2(i)+h*k23 , w1(i)+h*L13 , w2(i)+h*L23);u1(i+1) = u1(i) + h/6 * (k11 + 2*k12 + 2*k13 + k14);
u2(i+1) = u2(i) + h/6 * (k21 + 2*k22 + 2*k23 + k24);
w1(i+1) = w1(i) + h/6 * (L11 + 2*L12 + 2*L13 + L14);
w2(i+1) = w2(i) + h/6 * (L21 + 2*L22 + 2*L23 + L24);end
end

计算主程序

% main func
clear;clc;
u1(1) = 0;
u2(1) = 1;
w1(1) = 1;
w2(1) = 0;
h=0.01;
a = 0;b=20;
[u1,u2,w1,w2] = RK4_2variable(u1,u2,w1,w2,h,a,b);
figure 
plot(a:h:b,u1,'r-');
hold on
plot(a:h:b,sin(a:h:b),'b-.');
xlabel('time');
ylabel('x');
legend('计算值','精确值');

计算结果如图
在这里插入图片描述


http://chatgpt.dhexx.cn/article/NECY8WuS.shtml

相关文章

四阶龙格库塔法求解微分方程【MATLAB||C】

四阶龙格库塔法求解微分方程 作者:PEZHANG 时间:2021.11.6 求解过程数学描述 四阶龙格库塔的求解过程可用如下数学公式描述: k 1 f ( t n , y n ) k_1f\left( t_n,y_n \right) k1​f(tn​,yn​) k 2 f ( t n h 2 , y n h 2 k 1 ) k_2f\…

算法-----龙格-库塔法(转)

数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。这些技术由数学家卡尔龙格和马丁威尔海姆库塔于1900年左右发明。 龙格库塔法的家族中的一个成员如此常用,以至于经常被称…

隐式龙格库塔法举例说明

隐式龙格-库塔法 题目具体分析前期准备确定系数MATLAB求解 题目 用隐式中点公式求解常微分方程: { d y d x y , y ( 0 ) 1. \begin{cases} \dfrac{dy}{dx}y,\\ y(0)1. \end{cases} ⎩⎨⎧​dxdy​y,y(0)1.​ 具体分析 前期准备 首先对和在区间上进行离散化,然…

龙格库塔法求解微分方程

在https://blog.csdn.net/weixin_42141390/article/details/110184743一文中,我们曾经讨论了欧拉法,龙格-库塔法也跟欧拉法一样,是用梯形的面积去替代积分的面积的一种方法。 欧拉法简介 设有微分方程: d x ( t ) d t f ( x )…

数值计算大作业:常微分初值问题数值解法(欧拉法、改进欧拉法、四阶龙格库塔法程序在Matlab中的实现)

作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业。 我把矩常微分初值问题用欧拉法、改进欧拉法、与四阶龙格库塔法分别在MATLAB中编程实现。具体的程序详细标注后放在文章最后了,每道题我只展示运算结果与结论,需要的同…

Matlab之四阶龙格—库塔法方法:解常微分初值问题

目录 1. 题目 2. 算法原理 3. 代码 4. 结果 4.1 运行结果 4.2 结果分析 【若觉文章质量良好且有用,请别忘了点赞收藏加关注,这将是我继续分享的动力,万分感谢!】 直接通过解题的方式进行学习,代入感更强 1. 题…

龙格库塔方法的原理和案例及MTATLAB编程

文章目录 龙格库塔法的原理利用四阶龙格库塔法求解一个案例用MATLAB编程 龙格库塔法的原理 在百度百科中是这么解释的:在各种龙格-库塔法当中有一个方法十分常用,以至于经常被称为“RK4”或者就是“龙格-库塔法”。该方法主要是在…

欧拉法、改进的欧拉法、龙格-库塔法求解初值问题

求解初值问题 简介前期准备欧拉法改进的欧拉法龙格-库塔法标准四阶显式Kutta公式三级三阶显式公式四级四阶显式Kutta公式四级四阶显式Gill公式 示例MATLAB代码结果 简介 通过求解简单的初值问题: { d u d x f ( x , u ) ( 1 ) u ( x 0 ) u 0 ( 2 ) \begin{cases…

6.2 龙格—库塔法

学习目标: 学习龙格-库塔法的具体明确的学习目标可以有以下几点: 理解龙格-库塔法的基本思想和原理:我们应该了解龙格-库塔法的数值求解思想和数值误差的概念,包括截断误差和稳定性等基本概念,并且要熟悉龙格-库塔法的…

四阶龙格库塔法求解一次常微分方程组(python实现)

四阶龙格库塔法求解一次常微分方程组 一、前言二、RK4求解方程组的要点1. 将方程组转化为RK4求解要求的标准形式2. 注意区分每个方程的独立性 三、python实现RK4求解一次常微分方程组1. 使用的方程组2. python代码3. 运行结果 一、前言 之前在博客发布了关于使用四阶龙格库塔方…

四阶龙格库塔算法及matlab代码

常微分方程 Ordinary differential equation,简称ODE,自变量只有一个的微分方程。 例子1: d y d x f ( x , y ) \dfrac {dy} {dx}f(x,y) dxdy​f(x,y) , f ( x , y ) f(x,y) f(x,y)是已知函数 偏微分方程 Partial differential equation…

经典四阶龙格库塔法

关注微信公众号“二进制小站”~~获取更多分析~~(文末二维码~~) 龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法,经常被称为“RK4”或者就是“龙格库塔法”。 令初值问题表述如下。 对于该问题的RK4由如下方程给出: 其中&…

四阶龙格库塔法(Runge-Kutta)求解常微分方程的 Matlab程序及案例

文章目录 1. 算法2. 程序3. 案例4. 联系作者 1. 算法 上一篇介绍了显式欧拉法、隐式欧拉法、两步欧拉法和改进欧拉法求解常微分方程初值问题;其中显式欧拉法和隐式欧拉法是一阶算法精度,截断误差为 O ( h 2 ) O\left( {{h^2}} \right) O(h2)&#xff1b…

【Runge-Kutta】龙格-库塔法求解微分方程matlab仿真

1.软件版本 MATLAB2013b 2.算法理论 龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。龙格库塔法的家族中的一个成员如此常用,以至于经常被称为“RK4”或者就是“龙格库塔法”。令初值问题表述…

龙格-库塔方法学习笔记

1、龙格-库塔法简介 龙格—库塔法是一种在工程上应用广泛的高精度单步算法,其中包括著名的欧拉法,用于数值求解微分方程。 由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。 在各种龙格—库塔法当中有一个方法十…

四阶龙格库塔法的计算例子

序 没有对比就没有伤害,本文先给出很多时候直接采用的矩形法,然后与四阶龙格库塔法做比较,着重说明四阶龙格库塔法。 一、矩形法 1.1 原理 设微分方程 y ˙ f ( y ) (1.1) \dot yf(y) \tag{1.1} y˙​f(y)(1.1) 求 y y y。 使用数值方法…

龙格-库塔法(Runge-Kutta methods)

非线性的常微分方程通常是难以求出解析解的,只能通过多次迭代求近似的数值解。 龙格-库塔法(Runge-Kutta methods)是用于非线性常微分方程的解的重要的一类隐式或显式迭代法。简写做RK法。 对于任意的Yf(X),假设某点(Xi,Yi)的斜…

龙格-库塔(Runge-Kutta)方法C++实现

龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在数学支持的基础之上的。 1 中点法 2传统二阶龙格库塔法: 3 传统三阶龙格库塔法 4 传…

龙格库塔法

1 基本思想 我们求解常微分方程的时候,某些常微分方程有解析方法,但是大多数的常微分方程只能用数值解法来求解。 数值解法的一个基本特点就是“递进式”,顺着节点的顺序一步一步向前推进。 龙格库塔法的基本思想就是利用f(x,y)在某些特殊点…

关于html中文字空格以及换行符的处理

在阮一峰大神的博客中发现空格原来可以有多种处理方式,过去只知道用$nbsp;真是惭愧。长路漫漫吖 目录 1、html里面的空格2、怎样原样显示空格和换行符2.1 使用pre标签2.2 使用white-space设置样式 3、参考链接 1、html里面的空格 在html里面,空格和换行符…