利用Matlab求解高阶微分方程(ode45)

1、高阶微分方程的基本概念

       二阶以及二阶以上的微分方程称之为高阶微分方程,一般来说,微分方程的阶数越高,求解的难度也就越大。求高阶方程的一个常用方法就是降低阶数。对二阶方程 ,如果能用变量代换把它化成一阶方程,那么就可以用一阶微分方程的求解方法来解决了。

      同样,在matlab中不能直接求解高阶微分方程,我们需要使用变量替换将其转换为一阶微分方程来求解。本文基于ode45求解器进行求解。

2、利用ode45求解高阶微分方程

 2.1 方法简介

      ode45 是 MATLAB 中用于求解常微分方程(ODE)的函数之一,它基于变步长的龙格-库塔方法(5(4)阶方法)。ode45 通过自动调整步长来提高效率和精度。

 2.2 函数格式

ode45 的基本语法如下: [t, y] = ode45(odefun, tspan, y0)

  • odefun: 函数句柄,表示微分方程的右侧函数,应该以 t 和 y 为输入,返回导数 dy/dt。
  • tspan: 时间范围,通常是一个二元素向量 [t0, tf],表示时间区间从 t0 到 tf。
  • y0: 初始条件,是一个向量,包含了在 t0 时刻的解的初始值。
  • t: 求解出的时间向量,表示在每个时间点上计算的结果。
  • y: 对应的解向量,与 t 的大小相同。

 2.3 举例分析

以2022年国赛A题 波浪能最大输出功率设计 第一问为例(有些公式出现的很突兀,建议看一下论文,更易理解)参考资料:2022高教社杯全国大学生数学建模竞赛A题论文展示(A001)

第一问建立的数学模型如下:可以发现这是一个二阶二元微分方程,x_{f},x_{z}是未知量

我们对上述方程进行变化,化为一阶四元微分方程

下面开始编程实现

  1. 编写函数句柄:odefun
function dydt = odefun(t, y, params)% 提取参数zf = params.zf;w = params.w;K_zn = params.K_zn;K_tang = params.K_tang;C_x = params.C_x;B = params.B;S = params.S;mzz = params.mzz;% 提取状态变量x_f = y(1); % 浮子位移x_z = y(2); % 振子位移u = y(3);   % 浮子速度w_n = y(4); % 振子速度% 定义微分方程dx_f = u;dx_z = w_n;du = (zf*cos(w*t) + K_zn*(w_n - u) + K_tang*(x_z - x_f) - C_x*u - B*x_f) / S;dw = -(K_zn*(w_n - u) + K_tang*(x_z - x_f)) / mzz;% 返回结果dydt = [dx_f; dx_z; du; dw];
end

2. 调用ode45函数求解

% 初始化参数
clc; clear; close all;% 系统参数
params.zf = 6250;
params.w = 1.4005;
params.K_zn = 10000;
params.K_tang = 80000;
params.C_x = 656.3616;
params.B = 1025 * 9.8 * pi;
params.S = 4866 + 1335.535;
params.mzz = 2433;% 初始条件 [x_f(0), x_z(0), u(0), w(0)]
y0 = [0, 0, 0, 0];% 时间区间
T = (2 * pi) / params.w * 40; % 前40个波浪周期
tspan = [0 T];% 调用 ode45 求解
[t, y] = ode45(@(t, y) odefun(t, y, params), tspan, y0);% 提取解
x_f = y(:, 1); % 浮子位移
x_z = y(:, 2); % 振子位移
u = y(:, 3);   % 浮子速度
w_n = y(:, 4); % 振子速度% 绘图
figure;% 绘制位移图
subplot(1, 2, 1);
plot(t, x_f, 'r', t, x_z - x_f, 'b');
legend('浮子位移', '振子相对浮子位移');
xlabel('时间 (s)');
ylabel('位移 (m)');
title('位移随时间变化');% 绘制速度图
subplot(1, 2, 2);
plot(t, u, 'r', t, w_n - u, 'b');
legend('浮子速度', '振子相对浮子速度');
xlabel('时间 (s)');
ylabel('速度 (m/s)');
title('速度随时间变化');% 保存结果到 Excel 文件
% 初始化变量
resfx = [];
resfv = [];
reszx = [];
reszv = [];
dt = 0.2; % 时间间隔
time_points = 0:dt:T;% 查找时间点在时间向量中的索引并记录数据
for t_point = time_points[~, idx] = min(abs(t - t_point)); % 查找最接近的时间点resfx(end+1) = x_f(idx);resfv(end+1) = u(idx);reszx(end+1) = x_z(idx);reszv(end+1) = w_n(idx);
end% 保存结果到 Excel 文件
result = [time_points', resfx', resfv', reszx', reszv'];
xlswrite('myresult1.xlsx', result);

结果绘图:

(未完待续......,有时间再write一下四阶龙格-库塔 Runge—Kutta) 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习记录——day33 HTTP

目录 一、HTTP相关概念 二、客服端请求 1、请求首部 2、 响应首部 三、线程实现HTTP并发服务器 一、HTTP相关概念 1、HTTP,全称Hyper Text Transfer Protocol,用于万维网(world wide web)进行超文本学习的传输协议 2、HTTP属…

计算xpclr

1.conda安装xpclr 首先安装流程很轻松 conda create -n xpclr -c bioconda xpclr conda activate xpclr xpclr -h 2.按照要求准备文件 XPCLR - 简书 (jianshu.com) 根据教程准备文件,vcf,计算好的map,以及样本文件txt 其实官网也有介绍…

Docker基础概述、Docker安装、Docker镜像加速、Docker镜像指令

1.为什么学docker 开发环境与测试环境不同,导致错误 因此docker提供解决方法———系统平滑移植,容器虚拟化技术 将代码与软件与配置文件 打包成一个镜像 2.docker的历练 创建一个开发环境内成为镜像文件再用docker使用镜像 3.什么是docker Docke…

MySQL5.7数据库---入门教程(小白教程)

一、MySQL安装 本文以MySQL5.7安装为例。在设置完root密码和添加一个用户后,一路默认。 1、 2、通过点击红圈里的箭头选择对应的版本。 3、 4、端口(Port)一般默认不需要更改。 5、 二、配置环境变量 配置环境变量可以方便在win系统中cmd…

流媒体服务器二 3学习 librtmp 库的配置使用

librtmp 库是个啥? librtmp是一个开源的基于C语言的库,提供了一个连接RTMP服务器,发送和接收RTMP流的API。 它可以用来开发流媒体播放器,网络直播等应用。它的主要特点是快速、稳定和低延迟。 librtmp支持RTMP,RTMPS…

Qt第十七章 多线程

文章目录 多线程1. 线程概念的起源2. 三种方式创建线程3. 启动线程前的准备工作4. 启动线程/退出线程5. 操作运行中的线程6. 为每个线程提供独立数据7.子线程不能操作ui解决方案 多线程 1. 线程概念的起源 单核CPU 早期还没有线程的概念,如何保证2个进程同时进行呢…

基于Java爬取微博数据(四) 获取 图片 or 视频

基于Java爬取微博数据四 获取 图片 or 视频 图片 or 视频转存 图片 or 视频注意点 前面已经讲述了基于 Java 爬取微博正文列表内容,微博用户主页内容以及导出爬取到的微博数据等操作,那么下面讲述一下如何处理微博正文中的图片/视频等内容。 图片 or 视…

(转载)使用zed相机录制视频

参照下面这个链接 https://blog.csdn.net/peng_258/article/details/127457199?ops_request_misc&request_id&biz_id102&utm_termzed2%E5%BD%95%E5%88%B6%E6%95%B0%E6%8D%AE%E9%9B%86&utm_mediumdistribute.pc_search_result.none-task-blog-2~all~sobaiduweb…

代码复现改进

代码复现,文献复现,文章复现, 算法复现,科研复现 Matlab,Python中英文均可 保证质量,加快你的研究速度 代码改进跑通,模型优化改进

三种相机模型总结(针孔、鱼眼、全景)

相机标定 文章目录 相机标定前言 前言 我们最常见的投影模型Perspective Projection Model描述的就是针孔相机的成像原理。从上面的图根据相似三角形可以得出 参考链接 https://zhuanlan.zhihu.com/p/540969207 相机标定之张正友标定法数学原理详解(含python源码&a…

鹭鹰优化算法SBOA优化RBF神经网络的扩散速度实现多数入多输出数据预测,可以更改数据集(MATLAB代码)

一、鹭鹰优化算法介绍 鹭鹰优化算法(Secretary Bird Optimization Algorithm, SBOA)是一种新型的元启发式算法,它于2024年4月由Youfa Fu等人提出,并发表在SCI人工智能二区顶刊《Artificial Intelligence Review》上。该算法的灵感…

uniapp h5手机如何打开本地跑的前端项目进行本地调试

本地调试使用 vConsole是一个轻量级的移动端调试工具,可以在iOS设备上直接调试Uniapp H5应用。下面是具体的步骤: 在Uniapp项目中安装vConsole依赖:npm install vconsole。 在项目的main.js文件中引入vConsole库:import VConso…

将iso格式的镜像文件转化成云平台能安装的镜像格式(raw/vhd/QCOW2/VMDK )亲测--图文详解

1.首先,你将你的iso的文件按照正常的流程和需求安装到你的虚拟机中,我这里使用的是vmware,安装完成之后,关机。再次点开你安装好的那台虚拟机的窗口,如下图 选中要导出的镜像,镜像需要关机 2.点击工具栏的文件------选择 导出 整个工程到 ovf 格式—这里你可以选择你要导…

思科设备静态路由实验

拓扑及需求 网络拓扑及 IP 编址如图所示;PC1 及 PC2 使用路由器模拟;在 R1、R2、R3 上配置静态路由,保证全网可达;在 R1、R3 上删掉上一步配置的静态路由,改用默认路由,仍然要求全网可达。 各设备具体配置…

【数模修炼之旅】05 拟合模型 深度解析(教程+代码)

【数模修炼之旅】05 拟合模型 深度解析(教程代码) 接下来 C君将会用至少30个小节来为大家深度解析数模领域常用的算法,大家可以关注这个专栏,持续学习哦,对于大家的能力提高会有极大的帮助。 1 拟合模型介绍及应用 …

C++ | Leetcode C++题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNumbersWithUniqueDigits(int n) {if (n 0) {return 1;}if (n 1) {return 10;}int ans 10, cur 9;for (int i 0; i < n - 1; i) {cur * 9 - i;ans cur;}return ans;} };

91.WEB渗透测试-信息收集-Google语法(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;90.WEB渗透测试-信息收集-Google语法&#xff08;4&#xff09; 怎样判断哪些漏洞有什么样…

数据结构——顺序栈和链式栈

目录 引言 栈的定义 栈的分类 栈的功能 栈的声明 1.顺序栈 2.链式栈 栈的功能实现 1.栈的初始化 (1)顺序栈 (2)链式栈 (3)复杂度分析 2.判断栈是否为空 (1)顺序栈 (2)链式栈 (3)复杂度分析 3.返回栈顶元素 (1)顺序栈 (2)链式栈 (3)复杂度分析 4.返回栈的大…

怎么管控终端电脑上的移动端口

管控终端电脑上的移动端口&#xff0c;尤其是USB等移动端口&#xff0c;是确保企业数据安全和提升网络管理效率的重要手段。 一、使用注册表编辑器禁用USB端口&#xff08;适用于Windows系统&#xff09; 打开注册表编辑器&#xff1a; 同时按下“WinR”组合键&#xff0c;打…

IPD产品开发流程详细活动图及说明

1、概念阶段 完整见文章后 2、计划阶段 篇幅有限&#xff0c;获取完整阶段活动图以及步骤说明&#xff0c;见下图