Matlab中解常微分方程(组)的命令

news2024/12/23 11:35:43

常微分方程组求解命令与示例

线性常微分方程(组)

ode45

  • 4 order 龙格库塔法
  • example

\left\{\begin{matrix} \frac{dy_1}{dt}=-2y_1+y_2\\ \frac{dy_2}{dt}=y_1-2y_2 \end{matrix}\right.

odefun = @(t, y) [-2*y(1) + y(2); y(1) - 2*y(2)];
tspan = [0 10];
y0 = [1; 0];
[t, y] = ode45(odefun, tspan, y0);

ode23

  •  使用二三阶Bogacki-Shampine方法求解非刚性ODEs
odefun = @(t, y) [-2*y(1) + y(2); y(1) - 2*y(2)];
tspan = [0 10];
y0 = [1; 0];
[t, y] = ode23(odefun, tspan, y0);
plot(t,y)

ode15s

  • 使用隐式Stiff方法求解刚性ODEs
    • 高频振荡(解在短时间内快速变化)
    • 稳定性(对初始条件和参数的微小变化非常敏感)
    • 刚性矩阵(通常具有较大的条件数,刚性ODEs的数值解法可能会受到数值稳定性的挑战)
    • 通常需要使用隐式方法进行求解
  • example

\left\{\begin{matrix} \frac{dy_1}{dt}=-100y_1+99y_2\\ \frac{dy_2}{dt}=y_1-y_2 \end{matrix}\right.

  • ode15s的求解结果

  •  ode23的求解结果

  •  其实这个例子并不好找,但是有这个程序的存在肯定有他的道理

ode23t

  • 变步长的三阶 Rosenbrock 方法
odefun = @(t, y) [-3*y(1) + 2*y(2); y(1) - y(2)];
tspan = [0 10];
y0 = [1; 0];
[t, y] = ode23t(odefun, tspan, y0);
plot(t, y(:, 1), 'r', t, y(:, 2), 'b');
legend('y_1', 'y_2');

ode23tb

  • 使用变步长的三阶 Rosenbrock 方法求解问题,并自动调整步长以保持精度
odefun = @(t, y) [-3*y(1) + 2*y(2); y(1) - y(2)];
tspan = [0 10];
y0 = [1; 0];
[t, y] = ode23tb(odefun, tspan, y0);
plot(t, y(:, 1), 'r', t, y(:, 2), 'b');
legend('y_1', 'y_2');

ode113

  • 使用 Adams-Bashforth-Moulton 方法求解非刚性问题

ode23s

  • 使用二阶 Rosenbrock 方法
    • 适用于解非刚性的常微分方程组

选择最合适的求解器

  • 方程组的刚性性质:ode15s
  • 方程组的非刚性性质:ode45
  • 同时具有刚性和非刚性特性:ode23t
  • 阶跃函数或突变:ode23tb

控制求解的精度

  • 'RelTol':相对误差容限,默认值为1e-3
    • 数值解与真实解之间的差异相对于真实解的比例
  •  'AbsTol':绝对误差容限,默认值为1e-6
    • 数值解与真实解之间的差异的绝对值
  •  'Refine':求解结果的细化程度,默认值为4
    • 在数值解过程中所采用的离散化方法的精细程度
odefun = @(t, y) [-3*y(1) + 2*y(2); y(1) - y(2)];
options = odeset('RelTol', 1e-6, 'AbsTol', 1e-8, 'Refine', 10);
tspan = [0 10];
y0 = [1; 0];
[t, y] = ode23tb(odefun, tspan, y0,options);
plot(t, y(:, 1), 'r', t, y(:, 2), 'b');
legend('y_1', 'y_2');

求解误差的评估

Richardson 外推法

  • 常见,略

Runge-Kutta-Fehlberg(RKF)方法

  • 选择初始步长 h0,并计算每个步长上的解 y_i
  • 使用两个不同阶数的Runge-Kutta方法计算两个近似解 y_i^4 和 y_i^5
  • 计算误差 error_i = |y_i^5 - y_i^4|
  • 根据误差的大小决定是否需要调整步长
  • 如果误差小于容忍误差 tolerance,继续使用当前步长进行下一步计算;如果误差大于容忍误差,缩小步长并重新计算

非线性常微分方程(组)

  • 我们需要将非线性问题线性化来解决这个问题
  • 一般有这几种方法
    • 线性化代换:引入新的变量
    • 幂级数展开法
    • 线性化近似
    • 线性化近似和线性化变换的结合
  • 当然,我们的重点不在这里,这太要求技巧了
  • 数值积分方法

偏微分方程组求解

  • 使用pdetool即可

water begin

窄带和分光片

带宽在 GHz量级甚至MHz量级的窄带光学滤波器逐渐成为不可或缺的核心器件之一。因此在大气激光通信的自适应光学设备中有重要地位。[]

大气激光通信不能够排除天光背景噪声的干扰,因此削弱无用光留下信号光是激光通信的重要步骤之一。

这里列出五种窄带滤光技术,原子共振滤光器,法拉第反常色散滤光器,双折射滤光器,法布里-珀罗滤光器和可调谐声光滤光器。[]

原子共振滤光器是利用原子共振跃迁对信号光进行超窄带滤光,其带宽可达0.001nm。原子共振滤光器的主要原理是信号光进入原子共振滤光器内部后被原子蒸气吸收,原子蒸气经过弛豫,辐射出不同于信号光的特定波长的荧光,从而实现滤光。

这是原子共振滤光器的工作原理图:

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

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

相关文章

Devops系列二(使用helm chart,将java应用发布部署至k8s的示例)

一、接着上一篇的话 docker镜像已经有了,本文我们将接着演示如何使用helm部署应用到k8s。 分为两大部分: 制作helm chart,推送到私有仓库nexushelm拉取chart,部署到k8s 二、制作helm chart 要求你先安装helm,随便一…

Rust 第四天—Rust进阶1

上一篇介绍了Rust的所有权特性,今天就把剩下一些之前没介绍但项目中常用的内容总结一下. 结构体泛型trait 1 结构体 和c语言一样,Rust使用struct关键字来定义一个结构体,结构体可以将不同的类型数据进行整合,加快内存访问速度. 1.1 结构体定义 struct Test{username:Strin…

【第四天学习】决策分支,判断语录

决策分支 If语句 If语句是对基础的一种选择结构语句,它主要有三种形式,分别是if语句,if else语句和if else If else多分支语句。 int nCheck 0; if(nNum4) { nCheck4; } else { nCheck8; }If语句其实就是一个判断语句,它会判断…

详细解释lvs的工作原理

vsl用于集群中的直接路由它的原理如下 如果在公司并发太高了怎么解决 1.加配置cpu 内存 带宽 ssd高效硬盘 2.加服务器 为用户提供服务 横向扩展 集群是什么 由的多台主机构成,相当于一台大型计算机,只提供一个访问入口(域名与ip地址) 集群用在那个场景 高并发场景 vrrp是…

linux下删除ARP缓存表【网络工程】(保姆级图文)

目录 linux下删除ARP缓存表总结 欢迎关注 『网络工程专业』 系列,持续更新中 欢迎关注 『网络工程专业』 系列,持续更新中 温馨提示:对虚拟机做任何设置,建议都要先快照备份! linux下删除ARP缓存表 这里老师的命令ip…

docker的安装和使用

1.新建一个项目 比如vue init vuelatest完事之后运行打包到build目录下 2.在项目根目录下通过执行命令 touch Dockerfile 3.拉取nginx镜像 首先打开你的Docker,默认会启动。控制台拉取 Nginx 镜像:运行 docker pull nginx4.在根目录创建Nginx配置文件…

【多线程】锁策略

1. 说在前面 这里的锁策略内容,属于典型的面试八股文!如果未来工作,需要实现一把锁,那么得好好研究下锁策略,但基本上不会让我们自己设计一把锁的。 而这里的锁策略内容不局限于 Java,任何 "锁" …

python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)

简介 有些 post 的请求参数是 json 格式的,这个前面发送post 请求里面提到过,需要导入 json模块处理。现在企业公司一般常见的接口因为json数据容易处理,所以绝大多数返回数据也是 json 格式的,我们在做判断时候,往往只…

golang 实现四层负载均衡

大家好,我是蓝胖子,做开发的同学应该经常听到过负载均衡的概念,今天我们就来实现一个乞丐版的四层负载均衡,并用它对mysql进行负载均衡测试,通过本篇你可以了解到零拷贝的应用,四层负载均衡的本质以及实践。…

代码模版-element plus如何进行前端校验输入框

文章目录 步骤一:引入 element plus 框架步骤二:使用 element plus 的 form步骤三:form 明确指定 rules步骤四:事件触发校验 使用 vue3 element plus 步骤一:引入 element plus 框架 先 npm 安装 在 src/main.js 中…

linux[armbian]环境安装nginx

文章目录 linux[armbian]环境安装常用命令遇到的问题和解决方法问题一:conf/koi-win复制错误解决方法问题二:缺少相关的日志目录解决方法 linux[armbian]环境安装 下载Nginx: 访问[Nginx官方网站](https://nginx.org/)&#xff0c…

排序算法(1):冒泡排序

在计算机科学领域,排序算法是一个重要的主题。冒泡排序法是最基础且简单的排序算法之一,它的原理简单易懂,是学习排序算法的理想起点。本文将详细介绍冒泡排序法的原理、实现方法以及优化技巧,帮助读者全面了解和掌握这一经典算法…

重新安装conda时报错

自己因为最近利用 conda 安装了比较多的软件,在输入创建环境时: conda create -n python27 python2.7 报错,环境创建不成功。 显示 miniconda3 文件夹已存在 (因为安装时会默认安装至此目录,如果此目录已经存在则会冲突报错&…

【基础算法】贪心算法

贪心算法又称贪婪算法,是一种常见的算法思想。贪心算法的优点是效率高,实现较为简单,缺点是可能得不到最优解。 贪心算法的基本思想 贪心算法就是在求解问题时,总是做出当前看来最好的选择。也就是说贪心算法并不从整体最优上考…

word转PDF后图片为何会变小?怎么解决?

有些同学反映将Word文档转换为PDF后,发现里面的图片居然变小了,这是什么原因造成的?该怎么解决呢? 先来说说原因,我个人认为可能是由以下原因造成的: 1、word插入图片后压缩“太狠”了。当你在word中插入…

GENMARK控制器维修S08S4P.D工业电脑维修

机器人GENMARK SYSTEM CONTROLLER系统控制器维修S08S4P.D工业电脑;晶圆转移机器人SΛΛALL CONTROLLER; SΛΛC1100 半导体设备机械臂GENMARK控制器等 GenMark的两大构架:eSensor(电子传感)和Elecitrowetting&#xf…

ibaq intensity 蛋白组学 蛋白质组学两个定量方法(iBAQ和LFQ)的区别及常见的标准化方法

4.MaxQuant中的Intensity,LFQ和iBAQ 大佬的软件,三种定量算法都发了文章。 Intensity是将某Protein Groups里面的所有Unique和Razor peptides的信号强度加起来,作为一个原始强度值。用得很少。iBAQ是在Intenstiy的基础上,将原始…

JUC#线程池加锁逻辑梳理

带着问题看源码 为什么要用线程池?Java是实现和管理线程池有哪些方式? 请简单举例如何使用。为什么很多公司不允许使用Executors去创建线程池? 那么推荐怎么使用呢?ThreadPoolExecutor有哪些核心的配置参数? 请简要说明ThreadPoolExecutor可以创建的是哪三种线程池呢?当…

【Web3】Web3Js高频Api

目录 Web3Js方法 初始化Web3实例 Web3Api 创建账号Api 获取余额Api 单位转换工具函数 Web3Js方法 web3.eth:用于与以太坊区块链和智能合约之间的交互。 web3.utils:包含一些辅助方法。 web3.shh:用于协议进行通信的P2P和广播。 web3…

1066 Root of AVL Tree (PAT甲级)

这道题类似1123题。 #include <cstdio> #include <algorithm>struct node{int key;node* left nullptr;node* right nullptr; };int N, t; node* root nullptr;int getHeight(node* r){if(!r){return 0;}return std::max(getHeight(r->left), getHeight(r-&…