【Matlab】一、解常微分方程ODE

news2024/9/21 20:26:55

文章目录

  • 求解常微分方程 ODE
    • (1)求解解析解
    • (2)求解数值解

求解常微分方程 ODE

​ 在matlab中,我们可以求解常微分方程的解析解,和数值解,一般使用dsolve来求解常微分方程的解析解,使用类似于ode45的求解器来求解常微分方程的数值解。

(1)求解解析解

求解解析解,例如求解该方程的解析解
d y d x = 3 x 2 + 1 \frac{dy}{dx}=3x^2 + 1 dxdy=3x2+1
只需要在命令行中输入

dsolve('Dy=3*x^2+1', 'x')

或者是加上初始条件,求该方程在该初始条件下的解
d y d x = 3 x 2 , y ∣ x = 0 = 2 \frac{dy}{dx}=3x^2, y|_{x=0}=2 dxdy=3x2,yx=0=2
在命令行输入

dsolve("Dy = 3*x^2", "y(0)=2", "x")

例如求一个常微分方程组
{ x ˙ = y , y ¨ − y ˙ = 0 , x ∣ t = 0 = 1 ; y ˙ ∣ t = 0 = 1 \left\{ \begin{array}{lr} \dot{x}=y, \\ \ddot{y}-\dot{y}=0, \quad x|_{t=0}=1; \dot{y}|_{t=0}=1 \end{array} \right. {x˙=y,y¨y˙=0,xt=0=1;y˙t=0=1
在命令行输入

[x, y] = dsolve('Dx=y, D2y-Dy=0', 'x(0)=2, y(0)=2, Dy(0)=1')

(2)求解数值解

求数值解,有一些非线性的常微分方程是不能求出解析解的,我们一般求取其在一段区间内的数值解,采用迭代的方式来求解数值解,ode是matlab专门用于解微分方程的功能函数,具体的说明如下:

ode45是解决问题的首选,如果长时间没有结果,那么则采用ode15s试试。下面介绍ode45的函数格式

%函数格式  
%[T,Y] = ode45(‘odefun’,tspan,y0)
%[T,Y] = ode45(‘odefun’,tspan,y0,options)
%[T,Y,TE,YE,IE] = ode45(‘odefun’,tspan,y0,options)
%sol = ode45(‘odefun’,[t0 tf],y0...)
%其中: odefun是函数句柄,可以是函数文件名,匿名函数句柄或内联函数名;
%          tspan 是求解区间 [t0 tf],或者一系列散点[t0,t1,...,tf]%          y0 是初始值向量
%          T 返回列向量的时间点
%          Y 返回对应T的求解列向量
%          options 是求解参数设置,可以用odeset在计算前设定误差,输出参数,事件等
%          TE 事件发生时间
%          YE 事件发生时之答案
%          IE 事件函数消失时之指针i

首先得将微分方程标准化,类似于选择状态变量写状态空间表达式,对于一般的微分方程

{ F ( y , y ˙ , y ¨ , … , y ( n − 1 ) , t ) = 0 y ( t 0 ) = c 0 , y ˙ ( t ) = c 1 , … , y ( n − 1 ) ( t 0 ) = c n − 1 \left\{ \begin{array}{lr} F(y,\dot{y},\ddot{y},\dots,y^{(n-1)},t)=0 \\ y(t_0)=c_0, \dot{y}(t)=c_1, \dots, y^{(n-1)}(t_0)=c_{n-1} \end{array} \right. {F(y,y˙,y¨,,y(n1),t)=0y(t0)=c0,y˙(t)=c1,,y(n1)(t0)=cn1

首先选择选择一组微分作为状态变量

x = [ x 1 x 2 x 3 ⋮ x n ] = [ y y ˙ y ¨ ⋮ y ( n − 1 ) ] \bold x = \begin{bmatrix} x_1 \\ x_2 \\ x_3 \\ \vdots \\x_{n} \end{bmatrix} = \begin{bmatrix} y \\ \dot{y} \\ \ddot{y} \\ \vdots \\y^{(n-1)} \end{bmatrix} x=x1x2x3xn=yy˙y¨y(n1)

然后将待求解的微分方程 F ( y , y ˙ , y ¨ , … , y ( n − 1 ) , y n , t ) = 0 F(y,\dot{y},\ddot{y},\dots,y^{(n-1)},y^n,t)=0 F(y,y˙,y¨,,y(n1),yn,t)=0,写成 y n = G ( y , y ˙ , y ¨ … , y n − 1 , t ) = G ( x 1 , x 2 , x 3 … , x n , t ) y^{n}=G(y,\dot{y},\ddot{y} \dots,y^{n-1}, t)=G(x_1,x_2,x_3 \dots,x_{n},t) yn=G(y,y˙,y¨,yn1,t)=G(x1,x2,x3,xn,t)的形式,然后写出 x ˙ \dot{\bold x} x˙

x ˙ = [ x 1 ˙ x 2 ˙ x 3 ˙ ⋮ x n ˙ ] = [ y ˙ y ¨ ⋮ y ( n − 1 ) y ( n ) ] = [ x 2 x 3 x 4 ⋮ G ( x 1 , x 2 , x 3 … , x n , t ) ] \bold{\dot{x}} = \begin{bmatrix} \dot{x_1} \\ \dot{x_2} \\ \dot{x_3} \\ \vdots \\ \dot{x_n} \end{bmatrix} = \begin{bmatrix} \dot{y} \\ \ddot{y} \\ \vdots \\ y^{(n-1)} \\ y^{(n)} \end{bmatrix} = \begin{bmatrix} x_2 \\ x_3 \\ x_4 \\ \vdots \\ G(x_1,x_2,x_3 \dots,x_{n},t) \end{bmatrix} x˙=x1˙x2˙x3˙xn˙=y˙y¨y(n1)y(n)=x2x3x4G(x1,x2,x3,xn,t)

上述步骤便是我们需要在odefun中完成的,举一个示例:在时间区间 t = [ 3.9 , 4 ] t=[3.9,4] t=[3.9,4],求解微分方程

y ′ ′ = − t y + e t y ′ + 3 s i n 2 t , y ∣ t = 3 = 8 , y ′ ∣ t = 3 = 2 y''=-ty+e^ty'+3sin2t, y|_{t=3}=8, y'|_{t=3}=2 y=ty+ety+3sin2t,yt=3=8,yt=3=2
那么即
x ˙ = [ x [ 1 ] − t ∗ x [ 1 ] + e t ∗ x [ 2 ] + 3 s i n 2 t ] \bold{\dot{x}} = \begin{bmatrix} \bold{x}[1] \\ -t*\bold{x}[1]+e^t*\bold{x}[2]+3sin2t \end{bmatrix} x˙=[x[1]tx[1]+etx[2]+3sin2t]

%在odefun.m脚本文件中完成以下内容
function dxdt = odefun(t, x)
	dxdt = zeros(2, 1);  %初始化为 2 x 1的零矩阵
	dxdt(1) = x(2);
	dxdt(2) = -t*x(1)+exp(t)*x(2)+3*sin(2*t);
end
%在main.m脚本文件中完成以下内容
tspan = [3.9, 4];
y0 = [8, 2];
[t, y] = ode45('odefun', tspan, y0);	%x的第一列为y,第二列为y’。如果遇到变量不是列向量形式的,可以考虑利用reshape函数做矩阵变换。
plot(t, y(:,1), '-o', t, y(:,2), '-*');
legend('y', "y'");
xlabel('t');

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

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

相关文章

jsp 上传文件及实体信息,ajax post 请求(formdata)报错400<======>前后端代码示例

Content-Type最常见的几种类型: 通常,没有声明,默认application/x-www-form-urlencoded application/x-www-form-urlencoded form表单默认的数据格式,提交的数据形式 key1val1&key2val2(参数少) mu…

[附源码]计算机毕业设计线上社区管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

〖全域运营实战白宝书 - 高转化文案速成篇③〗- 高打开率标题型文案的10大黄金法则

大家好,我是 哈士奇 ,一位工作了十年的"技术混子", 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 💬 人生格言:优于别人,并不高贵,真正的高贵应该是优于过去的自己。💬 &#x1f4e…

第一期 | 整洁,从桌面开始

文章目录前言一、主要内容介绍二、文件分类,整理你的桌面1.网格对齐图标,取消自动排列2.保持工作状态,提取近期文件3.用好排序,让文件一目了然4.分类整理,让文件听你的话5.按照实际情况作调整三、合理归档,…

[附源码]JAVA毕业设计框架的企业机械设备智能管理系统的设计与实现(系统+LW)

[附源码]JAVA毕业设计框架的企业机械设备智能管理系统的设计与实现(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支…

文献阅读-VQAR-基于计算机视觉和自然语言处理的信息检索技术综述

VQAR: Review on Information Retrieval Techniques based on Computer Vision and Natural Language Processing 标题:VQAR-基于计算机视觉和自然语言处理的信息检索技术综述 Authors:Shivangi ModiDhatri Pandya Journal:2019 3rd Inter…

在Docker中运行Dubbo应用,详细教程,一学就会

Dubbo概述 Dubbo是阿里开源的一个分布式服务框架,在国内粉丝很多。官网上的介绍是: DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000…

Spring_第2章_注解开发+整合Mybatis+Junit

Spring_第2章_注解开发整合MybatisJunit 文章目录Spring_第2章_注解开发整合MybatisJunit一、第三方资源配置管理1 管理DataSource连接池对象问题导入1.1 管理Druid连接池【重点】1.2 管理c3p0连接池2 加载properties属性文件【重点】问题导入2.1 基本用法2.2 配置不加载系统属…

浅谈Android输入法(IME)架构

简介: 输入法 (IME) 是一种可让用户输入文本的用户控件。Android 提供了一种可扩展的输入法框架。借助该框架,应用可以为用户提供备选输入法,例如屏幕键盘,甚至语音输入。安装所需的 IME 后,用户可以从系统设置中选择要…

每日一题:斐波那契数列

每日一题:斐波那契数列 我们先来看一下斐波那契数列的定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而…

Linux进程调度(二)——主动调度

目录 分析__schedule() 第一步: 第二步: pick_next_task的实现如下: 第三步: 进程上下文切换 内存空间的切换: 寄存器和栈的切换switch_to 指令指针的保存与恢复 总结 进程的调度分为两种方式,本篇…

MOOC——多项式加法(5分)好难!

1.多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x63x512x36x20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂…

java GUI 实现的socket在线聊天系统项目源码运行教程

大家好,今天给大家演示一下一个简单的图形界面的聊天程序,上次我们演示的是Java实现的群聊程序,还可以发送文件,今天这个小程序只能聊天,不能发文件,功能非常简单,可在局域网内实现互相聊天&…

html当当书网站 html网上在线书城 html在线小说书籍网页 当当书城网页设计

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

社区系统项目复盘-7

文章目录Spring Security权限控制置顶、加精、删除Redis高级数据类型网站数据统计使用Spring Security进行权限控制,对登录检查功能进行了重写。对不同的登录账号授予不同的权限,实现了置顶、加精、删除功能。使用Redis高级数据类型HyperLogLog和Bitmap实…

2-分类问题 SVM 核函数

目录 一,核函数的引入 二,核函数的定义 三,核函数介绍: 四,核函数总结: 一,核函数的引入 世界上本来没有两个完全一样的物体,对于所有的两个物体,我们可以通过增加维…

ES6 Reflect

前言 此文总结了Reflect对象的部分语法,对比了与Object方法的差异性,希望对你有用。 语法 Reflect与Math类似,都是JavaScript内置对象,提供了工具方法。 typeof Reflect // objectget Reflect.get(target, property, receiver) …

冷热电气多能互补的微能源网鲁棒优化调度(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Linux——VIM编辑器(详细)

目录 一、基本简介 1.1 基本简介 1.2 我们怎么使用终端进入到桌面? 1.3 模式间转换 二、一般模式 2.1 操作指令 2.2 什么情况下是一般模式呢? 2.3 怎么进行光标的快速移动? 2.4 复制粘贴操作 2.5 删除操作 三、编辑模式 四、命令行…

Java项目:SSM教师师资管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目包含管理员与教师两种角色; 管理员角色包含以下功能: 管理员角色登录,教师管理,教师授课管理,审批教师的项目开…