【matlab】ode45求解二阶微分方程,绘制曲线图 | 使用函数句柄的方法
朋友问题: 有微分方程如下:
md2ydt2+dydtexp(t)−y2=5m \frac{d^2y}{dt^2} + \frac{dy}{dt} exp(t) - y^2 = 5mdt2d2y+dtdyexp(t)−y2=5
其中,y(t=0)=1y(t=0)=1y(t=0)=1,dy/dt(t=0)=−10dy/dt (t=0) = -10dy/dt(t=0)=−10。
请在区间[0,5][0, 5][0,5]内绘制两个子图,分别为dy/dtdy/dtdy/dt与yyy,每个子图涵盖m=1m=1m=1与m=2m=2m=2两种情况。
所以本题的核心问题在于:用数值计算的方法求解该方程,得到各点,绘制点图。
使用 matlab 自带的 ode45
,方程组用句柄表示。
ode45
参见教程:如何使用ODE45
首先把题目方程转换,转换为 ode45
能理解的方式。
先声明变量:
y1=yy2=y′\begin{aligned} y_1 & = y \\ y_2 & = y' \\ \end{aligned}y1y2=y=y′
于是整理方程:
y1′=y2y2′=1m(5−y1′ey1+y12)\begin{aligned} y_1' & = y_2 \\ y_2' & = \frac{1}{m} (5 - y_1' e^{y_1} + y_1^2) \end{aligned}y1′y2′=y2=m1(5−y1′ey1+y12)
于是我们知道,ode45
中要有2个变量,且将其右边的式子分别表示出来,即:
dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m];
其中:
y(2)
代表 y1′=y2y_1' = y_2y1′=y2;(5 - y(1)*exp(y(2)) + y(2)^2)/m
代表 y2′=1m(5−y1′ey1+y12)y_2' = \frac{1}{m} (5 - y_1' e^{y_1} + y_1^2)y2′=m1(5−y1′ey1+y12)。
接着,规定初值:y(t=0)=1y(t=0)=1y(t=0)=1,dy/dt(t=0)=−10dy/dt (t=0) = -10dy/dt(t=0)=−10。
y10 = 1;
y20 = -10;
规定自变量 ttt 范围:
tspan = [0, 5];
输入 ode45
则为:
[t, y] = ode45(dy, tspan, [y10, y20]);
整个题目的代码为:
% 表示该方程组
m = 1;
dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m];
y10 = 1;
y20 = -10;
tspan = [0, 5];% m = 1
[t_m_1, y_m_1] = ode45(dy, tspan, [y10, y20]);
% m = 2
m = 2;
dy = @(t, y)[y(2); (5 - y(2)*exp(y(1)) + y(1)^2)/m];
[t_m_2, y_m_2] = ode45(dy, tspan, [y10, y20]);% plot
subplot(1, 2, 1);
plot(t_m_1, y_m_1(:, 2));
hold on
plot(t_m_2, y_m_2(:, 2));
title('dy/dt')
legend('m=1','m=2')subplot(1, 2, 2);
plot(t_m_1, y_m_1(:, 1));
hold on
plot(t_m_2, y_m_2(:, 1));
title('y')
legend('m=1','m=2')
顺便学了 ode45
,不错。
【matlab】ode45求解二阶微分方程,绘制曲线图 | 使用函数句柄的方法相关推荐
- matlab解方程x 2-x-2=0,matlab用三种方法求解二阶微分方程x''+0.2x'=0.4x=0.2u(t),u(t)是单位阶跃函数,初始状态为0...
问题描述: matlab用三种方法求解二阶微分方程x''+0.2x'=0.4x=0.2u(t),u(t)是单位阶跃函数,初始状态为0 1个回答 分类: 数学 2014-11-28 问题解答: 我来补答 ...
- matlab ode45 二阶微分,matlab关于ode45解二阶微分方程的困惑
matlab关于ode45解二阶微分方程的困惑 matlab关于ode45解二阶微分方程的困惑 一个二阶微分方程: y''+y'+y=sin(t) 初始条件为y(0)=5,y'(0)=6. 过程: 先 ...
- matlab 数值计算课 二阶微分方程-龙格库塔方法 ODE45
详见mathworks 龙格库塔方法 写成矩阵(状态方程)的形式更简洁一点(其实这两种方法结果是一样的,如果C是[1,0,0]的话,就很明显了) 例如:求系统在0-5s内的单位阶跃相应,已知传递函数: ...
- matlab偏分赋值错误,MATLAB ode45求解高阶微分方程组,出现“无法执行赋值,因为左侧和右侧的元素数目不同”问题...
本帖最后由 @@@@@BEI 于 2021-1-11 10:38 编辑 下面是程序的主要部分,方程本来有间隙函数.时变刚度.变外力等等,为了运行程序,参数暂时全部取常数,再试运行程序.就是微分方程总是 ...
- matlab ode45求解齿轮动力学,ode45求解多自由度动力学方程实例.doc
ode45求解多自由度动力学方程实例 Ode45函数调用形式如下:[T,Y]=ode45(odefun,tspan,y0)相关参数介绍如下:参数名称参数说明odefun用于存放待求解的方程的m文件名, ...
- 用四阶龙格库塔法(RK4)求解二阶微分方程
import math import matplotlib.pyplot as plt# 龙格-库塔法的定义 def runge_kutta(y, h, f):k1 = h * f(t, x1, x2 ...
- matlab ode45求解齿轮动力学,[转载]Matlab中解常微分方程的ode45 【转载】
ode是专门用于解微分方程的功能函数,他有ode23,ode45,ode23s等等,采用的是Runge-Kutta算法.ode45表示采用四阶,五阶runge-kutta单步算法,截断误差为(Δx)^ ...
- 齐次弦振动方程的matlab解法,ode45求解振动微分方程
function dy=order22(t,y);%用积分形式定义函数: dy=zeros(16,1); mc=854.97;mp=745.26;ms=332.69;m1=2135.1;m2=94.2 ...
- matlab ode45求解微分方程
1.内容简介 略 418-可以交流.咨询.答疑 2.内容说明 略 3.仿真分析 function dy = odefun(t,y) lameda = 0.2; alpha = 0.35; beta = ...
最新文章
- 前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度
- Linux驱动技术(三) _DMA编程
- 内存管理vma_(十三)Linux内存管理之vma/malloc/mmap
- GOOD MEETINGS CREATE SHARED UNDERSTANDING, NOT BRDS!
- cocos2d-lua 搓牌效果_4款热门面霜评测,欧莱雅效果一般,艾珂薇性价比高,菲洛嘉最贵...
- golang基于UDP完成
- vc6.0 matlab混合编程,matlab2010 + vc6.0混合编程实例(调用dll)
- 如何做一名优秀的电子工程师[zz]
- ssm整合之web.xml配置
- 群晖218 当文件服务器,群晖218 家庭云服务器
- DataTable数据导出到Excel
- 软文营销有什么效果,主要作用是什么?
- Android studio gradle编译失败问题汇总
- SQL Server全程
- 怎么样防止服务器被入侵
- python答题搜索_python实现百万答题自动百度搜索答案
- Citrix联机插件配置管理器:找不到满足所有锁定要求的值
- Python笔记:利用pygame模块实现三原色颜色滚动条效果
- 英国哪些大学本科可以用ib English hl 成绩代替雅思成绩?
- 0930-值得纪念的一天,永远不要心存侥幸
热门文章
- 使用Oracle VM VirtualBox创建的虚拟机与本地电脑(物理机)搭建局域网
- 使用严格模式的坏处_再见面试官:单例模式有几种写法?
- 多线程解决同步问题浅析
- OK6410-A编译u-boot时遇到的问题及解决
- 困扰的问题终于解决了-docker时区不正确的问题修改记
- Spring Boot前后端分离项目Session问题解决
- 如何获取Java用户输入?
- Python的__init__和self是做什么的?
- 如何在Python中获取文件创建和修改日期/时间?
- win11下载时卡住0%不动怎么办 Windows11下载卡在0%的解决方法