相关文章推荐
才高八斗的西红柿  ·  深入理解Python内存管理与垃圾回收,再也 ...·  1 年前    · 
销魂的大白菜  ·  Python读取、修改、保存xml文件 - ...·  1 年前    · 
儒雅的薯片  ·  c++中的字符串常量为什么可以赋值给char ...·  2 年前    · 
阳光的甜瓜  ·  QCombox设置下拉框字体颜色无效的解决办 ...·  2 年前    · 
拉风的猴子  ·  SQL Server 2005 ...·  2 年前    · 
Code  ›  matlab微分方程ODE求解器的事件(Event)属性开发者社区
event matlab 微分方程
https://cloud.tencent.com/developer/article/2058250
旅途中的硬盘
2 年前
作者头像
用户9925864
0 篇文章

matlab微分方程ODE求解器的事件(Event)属性

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 算法工程师的学习日志 > matlab微分方程ODE求解器的事件(Event)属性

matlab微分方程ODE求解器的事件(Event)属性

作者头像
用户9925864
发布 于 2022-07-27 09:41:29
1.3K 0
发布 于 2022-07-27 09:41:29
举报

在特定的微分方程求解过程中,比如碰撞、车辆刹车,这种特殊运动时间简单的时序求解不够完善,故需要用到一个ode求解器的事件(Event)属性

首先假定一个微分方程

dy1=y2

dy2=y1+1

其中y1不能超过4

求解改微分方程

event时间定义:

function [value,isterminal,direction] = events1(t,y)
value = y(1)-4;
isterminal= 1;
direction = 0;

求解方法:

dy = @(t,y) [y(2);y(1) + 1];
options=odeset('events',@events1);
[t,y] = ode45(dy,[0 12],[0 1],options);
figure
plot(t,y)

结果为:

events函数解析:

%function [value,isterminal,direction]=events(t,x)

% 事件检查函数,此时需要做的是过零点检测

% ode45函数自动检查当value=0是否成立

% 如果我们要求检测Y=0的点,设置value=Y

% 这里我们要检测Y=4,那么就设置value=Y-4

% isterminal检测到指定条件时,是否终止ode45函数的运行

% 1表示终止,0表示继续

% 在我们这个问题上,我们只要检测到零点时就停止程序

% direction:value过零点检测的方向

% -1表示由正到负,+1表示由负到正

在用一个例子来说明,选择一个用到简单微分方程的物理情景

一个质量m=100kg的物体从高处竖直落下,加速度会受到空气阻力的影响,这里简单的认为重力加速度g=9.8不变,空气阻力f=k*v^2 ,简单起见,k=1。只考虑竖直方向速度v,且速度,加速度,竖直位移都以向下为正。初速度,初位移都为0;那么有以下微分方程:

dy/dt=v

dv/dt=9.8-1*v^2/m

m=100,v0=y0=0

然后用MATLAB的ode45函数求这个微分方程的数值解

先编写函数

function dx=fun(t,x)
% x(1)表示下落的距离y(向下为正),x(2)表示下落速度v(向下为正)
k=1;     % k=1为表示空气阻力的一个常量,这里简化空气阻力f=k*v^2
m=100;% m为质量=100kg
dx=zeros(2,1);
dx(1)=x(2);             % 下落距离对时间的导数=速度
a=9.8-(k*x(2)^2)/m;% a加速度(向下为正)=重力加速度 - 空气阻力产生的加速度
dx(2)=a;                 % 速度对时间的导数=加速度
end

现在想要得到t=15s时的位移和速度

那么输入

[T,X]=ode45('fun',[0,15],[0 0]); 

返回的X中的最后一列就是我想要的值;

X(end)
ans =
 
推荐文章
才高八斗的西红柿  ·  深入理解Python内存管理与垃圾回收,再也不怕问了(二)-天翼云
1 年前
销魂的大白菜  ·  Python读取、修改、保存xml文件 - Circle_Wang - 博客园
1 年前
儒雅的薯片  ·  c++中的字符串常量为什么可以赋值给char*? - 知乎
2 年前
阳光的甜瓜  ·  QCombox设置下拉框字体颜色无效的解决办法_月上柳烧头的博客-CSDN博客
2 年前
拉风的猴子  ·  SQL Server 2005 排序order by对查询性能的影响(1) - zping - 博客园
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号