用四阶RungeKutta方程解二阶常微分方程,并计算船舶在规则波中的横摇角(附Matlab代码)
前几天接到师姐分派的任务,让我求解一艘船模的横摇角的时间历程曲线,为后期的减摇控制准备。
1 首先冷静分析一下,原方程如下:
我们要求解的就是theta角和时间t之间的关系曲线,这是一道典型的二阶常微分方程的求解,用四阶龙格库塔方程可以求解。
2 古典龙格库塔算法公式:
高等数值计算课本(清华大学出版社,186页)
但是古典龙格库塔方法解决的是一阶常微分方程,也就是类似于这样的方程组
但是我们现在面对的是
查了一下书,没有教二阶常微分该怎么解,于是自己网上找答案:
3 网上的一道例题提供了解决办法
4 现在可以开始编程了,我没有用Matlab自带的Ode45函数,我是自己编写的四阶Rungekutta方程,代码如下:
%横摇角时间历程曲线计算主程序
global a b c d h t y z D h_
a = 18.4;
b = 0.3;
c = 214.88;
d = 0;
h = 0.1;
y = 0;
z = 0;
D = 1.58*10^3;
h_ = 0.136;
t = 0;
for i = 1:1000d = -D*h_*0.26;d1=sin(t);[Y,Z] = RungeKutta_2(y,z);t = t+h;z = Z;y = Y;y_(i) = yt_(i)=t;
end
max(y)
plot(t_(1:1000),y_(1:1000));
xlabel('时间t')
ylabel('横摇角theta')
title('横摇角时历曲线')
该程序引用了Rungekutta_2.m程序,代码如下:
function [Y,Z]=RungeKutta_2(y,z)
global a b c d h y z D h_ t k11=z;
k21=(d*sin(t)-c*y-b*z)/a;
k12=z+(h/2)*k21;
k22=(d*sin(t+0.5*h)-c*(y+(h/2)*k11)-b*(z+(h/2)*k21))/a;
k13=z+(h/2)*k22;
k23=(d*sin(t+0.5*h)-c*(y+(h/2)*k12)-b*(z+(h/2)*k22))/a;
k14=z+h*k23;
k24=(d*sin(t+h)-c*(y+h*k13)-b*(z+h*k23))/a;Z=z+(h/6)*(k11+2*k12+2*k13+k14);
Y=y+(h/6)*(k21+2*k22+2*k23+k24);
用的时候把这两个放在一个文件夹就行了。
5 运行结果
符合规则波下船舶的横摇运动特征。完事了。
一起学习,一起进步!!
用四阶RungeKutta方程解二阶常微分方程,并计算船舶在规则波中的横摇角(附Matlab代码)相关推荐
- 四阶龙格库塔方程(Rungekutta)解二阶常微分方程组并计算船舶在迎浪下的纵摇埀荡耦合运动方程-附Matlab代码
今年年初的时候给师姐做了DDPG算法的船舶减横摇控制算法,师姐还有想法要让我把纵摇-埀荡两个自由度的减摇也做出来,这个任务归我了.实际上不管是多少个自由度的减摇,其实都需要解运动方程,当初做单自由度横 ...
- 四阶龙格库塔方程解二阶常微分方程组并计算船舶在迎浪下的纵摇埀荡耦合运动方程-附Python代码
0 写在前面 这篇博客是在将我上一篇博客的matlab代码移植到python中,应为后续要开展深度强化学习下的船舶减摇研究,总的来说还是在python上做这项工作比较合适.具体方程的解法和背景不在赘述 ...
- python解常微分方程龙格库_excel实现四阶龙格库塔法runge-kutta解二阶常微分方程范例.xls...
excel实现四阶龙格库塔法runge-kutta解二阶常微分方程范例,rungekutta,四阶rungekutta法,rungekuttamatlab,四阶rungekutta,rungekutt ...
- [Matlab科学计算] 四阶Runge-Kutta法解常微分方程
四阶Runge-Kutta法格式的详细推导请查找相关数值分析书籍,这里直接给出四阶Runge-Kutta法的经典格式和Matlab代码 Matlab代码如下:自行修改常微分方程即可 %% 四阶Rung ...
- 二阶椭圆型第一边值问题的数值解法(五点差分格式和有限体积法)附matlab代码
二阶椭圆型第一边值问题的数值解法(五点差分格式和有限体积法)附matlab代码 这里我们介绍五点差分格式和有限体积法求椭圆型第一边值问题, 题目: 分别采用矩形网格的五点差分格式和有限体积法求椭圆型第 ...
- 【Fluent】雷诺方程:推导与求解(附MATLAB代码)
目录 引言 雷诺方程的推导 雷诺方程的解 雷诺方程的推广 有限体积法 引言 雷诺方程,即湍流的平均运动方程,所属黏性不可压缩流体动力学,从Navier-Stokes方程派生,是经典润滑理论的基本方程之 ...
- Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法(附Matlab代码)
Caputo 分数阶一维问题基于 L1 逼近的空间二阶方法 Caputo 分数阶一维问题基于 L1 逼近的快速差分方法(附Matlab程序) 文章目录 Caputo 分数阶一维问题基于 L1 逼近的空 ...
- 【机械臂优化】基于粒子群算法实现考虑关节限位约束下的冗余机械臂求逆解附Matlab代码)
1 简介 2 部分代码 %%%%%%%%%%%%%%%%%%采用PSO算法对运动学冗余机械臂求一组最优逆解%%%%%%%%%%%%%%%%%%% %该程序对一个具有四自由度的机械臂做位置控制,由操作空 ...
- 基于混合整数二阶锥(MISOCP)的配电网重构(附matlab代码)
参考资料:主动配电网网络分析与运行调控 (sciencereading.cn) 配电网重构是指在满足配电网运行基本约束的前提下,通过改变配电网中一个或多个开关的状态对配电网中一个或多个指标进行优化.通 ...
最新文章
- bootstrap学习(四)表格
- java数组二分查找的简单例题_Java基础-练习 数组元素二分查找(折半查找)
- 字符串排序java_利用Java程序将字符串进行排序与拼接
- MySQL 存储引擎 | MyISAM 与 InnoDB
- Python生成器实现及yield关键字
- 湖南高校教师评职称计算机等级考试,湖南高校教师职称评审出台新规,这些要点你了解了吗?...
- python如何计算个人gpa_【Python】计算GPA | 学步园
- 局部内部类使用局部变量应注意什么?
- wms开发语言c 还是java,专业WMS和普通WMS之间差异有什么呢?
- 计算机指数函数符号,数学公式及符号大全
- oracle 11 ora 12514,客户端连接oracle11出现提示ORA-12514:错误解决方法
- 实战教程:平面设计配色原则
- vue使用svg图片
- 字母顺序排序(C语言)
- HTML 字体图标的引入
- 入网许可证_入网许可证
- 和睦小镇保卫战服务器位置,植物大战僵尸和睦小镇保卫战隐藏黄金地精及机关位置汇总[多图]...
- 关于py2neo中的merge,create,当反复执行时,会出现什么。。。
- 搭建电商系统平台需要多少钱?
- 第3课用计算机处理信息,第3课 用计算机处理信息 课件.
热门文章
- 酒店管理系统数据库设计
- 这次GDC China 2015的总结与关卡设计教程的梳理
- Hacking Team泄露数据表明韩国、哈萨克斯坦针对中国发起网络攻击
- ubuntu 下Vivado License Manager shows my machine HostID as quot;000000000000quot;
- Java 特殊回文。123321是一个非常特殊的数,它从左边读和从右边读是一样的。输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
- java语言就业方向_Java就业方向有哪些?
- 【毕业设计】 大数据二手房数据爬取与分析可视化 -python 数据分析 可视化
- 算法:找出1-10000之间的所有素数
- java多线程心法(基础概念)
- 机器学习服务文本翻译能力升级,中文直译模型让译文表达更地道!