【学习总结】动力学方程的龙格库塔积分法(含具体例子与代码)

news2024/10/2 13:35:13

本文仅用于个人学习总结,如有错误请批评指正。

参考资料

徐超江等,常微分方程基础教程,高等教育出版社,2023年。

1、欧拉法

1.1 前向欧拉

欧拉积分部分不用展开介绍,较为简单。直接拍照课本。

在这里插入图片描述

1.2 梯形法/隐式格式的迭代计算

欧拉法是左侧的数值作为”高度“,所以是一阶的,精度不高。要想高,采用梯形法。

在这里插入图片描述
梯形法是隐式求解,和后面龙格库塔的思路有些相像,所以摆在了这里。

2、龙格库塔积分

先放课本:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
课本给出了Runge-Kutta的提出思路:避免Taylor展开积分的高阶项造成计算量过大,而是采用这个区间的几个点来对积分进行估计,根据截断误差的阶数,求解对应的系数。可以看出系数是递归计算出来的。

3、高阶常微分方程组的求解

上述例子,都是对于:一元一阶微分方程进行的积分,如果出现了多个变量、或者高阶微分,怎么处理?

处理方法,就是引入中间变量,将高阶微分方程变为多个一阶微分方程,进行求解。参考书籍如下:

在这里插入图片描述注意这里的 f ( x , y , z , w ) f(x,y,z,w) f(x,y,z,w),就是最高阶数求导对应的方程。仔细观察这组式子,每个等式左侧都是变量/中间变量的一阶导数,右侧都没有导数,因此可以直接积分。

具体的积分方法,就套用上面的Runge-Kutta方法即可,写成下方这种向量形式只是表达简练,但计算时依然每个方程依此计算。

在这里插入图片描述在这里插入图片描述

4、具体例子

下面给出一个具体的动力学方程计算例子:

在这里插入图片描述
可以看出,需要计算的是 θ \theta θ x x x 随时间变化的方程,但原方程中出现了二阶导数。为了敲字方便,导数采用一撇 ′ ' 进行标识。

定义变量如下: y = [ θ ′ , x ′ , θ , x ] y=[\theta', x', \theta, x] y=[θ,x,θ,x],则原方程可以全部换成 y ( ) y() y() 进行表示:
m L 2 d y 1 d t + m L d y 2 d t + m g L y 3 = 0 mL^2 \frac{dy_1}{dt} + mL \frac{dy_2}{dt} + mgL y_3 = 0 mL2dtdy1+mLdtdy2+mgLy3=0 m L d y 1 d t + ( m + M ) d y 2 d y + c y 2 + k y 4 = F ( t ) mL \frac{dy_1}{dt} + (m+M) \frac{dy_2}{dy} + c y_2 + k y_4 = F(t) mLdtdy1+(m+M)dydy2+cy2+ky4=F(t) 以及两个中间变量的定义方程: d y 3 d t = y 1 \frac{dy_3}{dt}=y_1 dtdy3=y1 d y 4 d t = y 2 \frac{dy_4}{dt}=y_2 dtdy4=y2

这时候,为了凑出来龙格库塔积分时,方程的形式,即左侧是变量的一阶导数,右侧没有微分项。3式和4式是符合的,但1和2并不是。我们发现,如果1式将除了 d y 1 d t \frac{dy_1}{dt} dtdy1 全部外都移动到右侧,右侧存在一个 d y 2 d t \frac{dy_2}{dt} dtdy2,并不符合基本形式。

因此,我们对1式进行变换,得到: d y 1 d t = − 1 L ( d y 2 d t + g y 3 ) \frac{dy_1}{dt}= -\frac{1}{L} (\frac{dy_2}{dt} +g y_3) dtdy1=L1(dtdy2+gy3),将这个式子带入2式,得到: d y 2 d t = 1 M ( m g y 3 − c y 2 − k y 4 + F ( t ) L ) \frac{dy_2}{dt} = \frac{1}{M}(mgy_3-cy_2-ky_4+ \frac{F(t)}{L}) dtdy2=M1(mgy3cy2ky4+LF(t)) 同理,利用1式求出 d y 2 d t = − L d y 1 d t − g y 3 \frac{dy_2}{dt}=-L\frac{dy_1}{dt}-gy_3 dtdy2=Ldtdy1gy3 后带入2式,得到: d y 1 d t = 1 M L ( c y 2 + k y 4 − ( m + M ) g y 3 − F ( t ) L ) \frac{dy_1}{dt}=\frac{1}{ML}(cy_2+ky_4-(m+M)gy_3- \frac{F(t)}{L}) dtdy1=ML1(cy2+ky4(m+M)gy3LF(t))

此时,修改后的2个式子符合了上述龙格库塔积分的形式。
之后带入书本的式(8.46),依此计算出第 n n n 步的 y i , n y_{i,n} yi,n 即可。

Matlab代码

main函数如下:

clc; clear; close all;
y_init = [0, -1, 0, 0];
tb = 0;
te = 50;
step = 0.1;
[T, R] = rk4(@my_ode, tb, te, y_init, 1000);
figure(1);
plot(T, R(3,:), LineWidth=1)
xlabel("t");
ylabel("\theta");

其中rk4即Runge-Kutta的4阶积分。具体实现如下:

# rk4 的具体计算方法
function [T, R] = rk4(f, a, b, y_init, M)
	h = (b-a)/M;
	Y = zeros(4, M+1);
	T = a:h:b;
	Y(:, 1) = y_init';
	for j = 1:M
		k1 = h*feval(f, T(j), Y(:, j));
		k2 = h*feval(f, T(j) + h/2, Y(:,j)+k1/2);
		k3 = h*feval(f, T(j) + h/2, Y(:,j)+k2/2);
		k4 = h*feval(f, T(j) + h, Y(:, j)+k3);
		Y(:, j+1) = Y(:,j)+(k1 + 2*k2 + 2*k3 + k4)/6;
	end
	R = Y;
end

其中,my_ode 为具体的微分方程:

function eq = my_ode(t, y)
	m=0.4;
	M=1;
	L=0.5;
	g=9.81;
	k=1;
	c=1;
	# da/dt
	dy1_dt = (c*y(2)/M + k*y(4)/M - m*g*y(3)/M - g*y(3) - ft(t)/(M*L)) / L;
	dy2_dt = m*g*y(3)/M - c*y(2)/M - k*y(4)/M + ft(t)/M/L;
	dy3_dt = y(1);
	dy4_dt = y(2);
	eq = [dy1_dt; dy2_dt; dy3_dt; dy4_dt];
end

# ft为外部激励
function y = ft(x)
	y = exp(-x/2);
end

最终画出来的结果:

在这里插入图片描述

小结

花了一天时间,折腾半天,算是对求解有了更深入的理解。
感慨数学学了多少年,用的时候还是毛都不会。

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

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

相关文章

WebX代码和接口文档自动生成器

朋友最近自己搞了一个代码和接口文档自动生成平台WebX。大家有兴趣可以体验一下。 平台介绍地址:WebX平台

“深入理解网络科学与自定义网络构建“

目录 深入理解网络科学与自定义网络构建网络概念1.1 什么是网络?子网掩码网关规则 网络模式docker网络配置bridge模式host模式 none模式使用自定义网络结语 深入理解网络科学与自定义网络构建 网络概念 1.1 什么是网络? 在计算机科学中,网…

高精度AGV小车N/S极磁条导航传感器CNS-MGS-080N参数配置操作方法

高精度AGV小车N/S极磁条导航传感器CNS-MGS-080N主要运用于自主导航机器人、室内室外巡检机器人、自主导航运输车AGV(AGC)、自动手推车等自主导航设备,完成自主导航设备的预设运行路线检测及定位。基于预设磁轨迹的导航方式是自主移动平台如AGV、巡检机器人、无轨货架…

群晖Drive搭建云同步服务器结合内网穿透实现Obsidian笔记文件远程多端同步

文章目录 一、简介软件特色演示: 二、使用免费群晖虚拟机搭建群晖Synology Drive服务,实现局域网同步1 安装并设置Synology Drive套件2 局域网内同步文件测试 三、内网穿透群晖Synology Drive,实现异地多端同步Windows 安装 Cpolar步骤&#…

ros2 基础学习16 - RQT:模块化可视化工具

RQT:模块化可视化工具 ROS中的Rviz功能已经很强大了,不过有些场景下,我们可能更需要一些简单的模块化的可视化工具,比如只显示一个摄像头的图像,使用Rviz的话,难免会觉得操作有点麻烦。 此时,我…

如何获取一个德国容器

1.注册discord账号 discord注册网址:https://discord.com/ 下面是容器的discord邀请链接 https://discord.com/Discord邀请链接:https://discord.com/invite/jVMSWrchC4 2.进入discord群聊点击link 在点击网址,这个网址每星期都会变就是图…

基于springboot+vue的在线视频教育平台系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

【驱动】I2C驱动分析(四)-关键API解析

简介 在Linux内核源代码中的driver目录下包含一个i2c目录 i2c-core.c这个文件实现了I2C核心的功能以及/proc/bus/i2c*接口。   i2c-dev.c实现了I2C适配器设备文件的功能,每一个I2C适配器都被分配一个设备。通过适配器访设备时的主设备号都为89,次设备号…

k8s学习-Deployment

Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 , Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…

【AIGC】IP-Adapter:文本兼容图像提示适配器,用于文本到图像扩散模型

前言 IPAdapter能够通过图像给Stable Diffusion模型以内容提示,让其生成参考该图像画风,可以免去Lora的训练,达到参考画风人物的生成效果。 摘要 通过文本提示词生成的图像,往往需要设置复杂的提示词,通常设计提示词变…

【Maven】001-Maven 概述

【Maven】001-Maven 概述 文章目录 【Maven】001-Maven 概述一、Maven 概述1、为什么学习 MavenMaven 作为依赖管理工具Maven 作为构建工具其它 2、Maven 介绍3、Maven 软件工作模型图 一、Maven 概述 1、为什么学习 Maven Maven 作为依赖管理工具 依赖管理: Mave…

PLSQL 把多个字段转为json格式

PLSQL 把多个字段转为json格式 sql Select cc.bm, cc.xm, json_arrayagg(cc.hb) jgFrom (Select aa.bm, aa.xm, json_object(aa.ksbh, aa.wjmc) hbFrom (Select 001 bm, 老六 xm, 0001 ksbh, 文具盒 wjmcFrom dual tUnion AllSelect 001 bm, 老六 xm, 0002 ksbh, 毛笔 wjmcFr…

11.1 pcl_ros的点云学习

本文是看了两个博主的内容,整理在这里是为了以后用时方便查找,更容易理解。引用的博文路径如下(本人也是刚开始看PCL的运用,本文是完全抄下面博主的内容,觉得这位博主写的很详细很清楚,并且自己运行了一遍有…

Java网络编程:概述--快速入门

I. 介绍 1.1 什么是网络编程 - 网络编程是指通过计算机网络实现程序之间的通信。在Java中,网络编程通常涉及到数据的传输、通信协议的使用以及与网络相关的各种操作。 1.2. 为什么学习Java网络编程 - Java网络编程是Java开发者重要的技能之一,因为它允许…

git切换到另一分支更改也会随之过去

一次的修改如果没有 commit如果切换到另一分支就会把修改带到另一个分支 这时可以使用 git stash 其他使用场景 切换分支:当正在一个分支上工作,但需要临时切换到另一个分支处理一些紧急任务时,可以使用 git stash 保存当前的工作进度。完成…

奇安信 天擎 rptsvr 任意文件上传漏洞

产品介绍 奇安信天擎终端安全管理系统是面向政企单位推出的一体化终端安全产品解决方案。该产品集防病毒、终端安全管控、终端准入、终端审计、外设管控、EDR等功能于一体,兼容不同操作系统和计算平台,帮助客户实现平台一体化、功能一体化、数据一体化的…

Java数据结构之排序(头歌平台,详细注释)

第1关:选择排序 任务描述 给定一组无序的数据,如果要把它们从小到大重新排序,我们要如何实现这个排序功能呢? 本关任务:实现选择排序。 相关知识 选择排序(Selection sort)是一种简单直观的排序…

【MATLAB基础绘图第19棒】绘制小提琴图

MATLAB绘制小提琴图 小提琴图(Violin Plot)案例1:基础绘制参考 小提琴图(Violin Plot) 小提琴图(Violin Plot)可用于展示多组数据的分布状态和概率密度。 出自论文-J2020-Drought hazard trans…

蓝桥杯每日一题---基数排序

题目 分析 在实际的比赛过程中很少会自己手写排序,顶多是定义一下排序规则。之所以要练习一下基数排序,是因为在后续学习过程中学到后缀数组时需要自己手写基数排序,那么这里使用的方法也和后缀数组一致,理解这里也便于后缀数组的…

我的最大收获与成长

经历 I am not a designer nor a coder. Im just a guy with a point-of-view and a computer. 翻译:俺不是码畜,俺只是一条对着电脑有点想法的土木狗。 笔者1982年出生,西南交通大学渣硕,目前仍在土木行业(PS&#xf…