matlab怎么准确定位一个点,MATLAB微分方程数值解如何精确定位特定一点处的解

共回答了15个问题采纳率:80%

在不知道结果时间的时候是需要先设定一个比较大的时间范围计算的

但是并不需要将整个范围的结果都算出来再插值

这个时候可以设定触发事件函数在一定条件下停止计算

用odeset可以为ode45求解器设定触发事件的函数

详细的用法要仔细查看matlab的帮助文件,这里我以你的题目,举个例子

微分方程还是用你的函数fun

在用ode45解方程之前,再写一个函数:事件触发函数eventfun,

它的格式固定要返回三个值,这三个值的意思是

当第一个值vaule的值到达0时,时间会触发

而根据第二个值isterminal设置,触发时间会否终止求解

第三个值是设置触发过0的方向

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

value=x(1)-100; %触发时间,当其值为0的时候,时间会触发

isterminal=1; %设为1时会,触发时间会停止求解器,设0时触发不影响工作

direction=1; %触发方向设1时是上升触发,设-1是下降触发,设0是双向触发

end

写好fun和eventfun之后,你就可以调用ode45解方程了

但用ode45之前记得先用odeset,将触发函数加入哦

op=odeset('Events',@eventfun);

[T,X,Tend,Xend,evennum]=ode45(@fun,[0,15],[0 0],op);

这样你看看,到达100米时,求解器就停住了

细心的你注意,ode45多返回了Tend,Xend,evennum三个参数

第一个Tend是触发事件发生的时间

第二个Xend是触发时间发生时刻的X

第三个evenum是标识触发事件的编号

由于这里只设置了一个触发事件,所以编号肯定是1

其实你也可以将该时间isterminal设为0

那么求解器不会因为触发事件而停止15秒内的解都会算出

你仍旧可以根据Tend 和 Xend得到到达100米时的时间和状态

额外提示,有时候你不知道到底取多大的时间范围才能够等到你要的触发时间

那么你可以用循环判断的方法,先设一个时间范围,然后求解

到最后都没有等到触发事件(Tend和Xend都是空矩阵)

那么适当延长求解时间区间,将上次的最后时刻和状态作为初始状态

再一次求解时间范围更大的解,如此直到找到触发事件才停止

1年前

10

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值