当前位置: 首页 > 知识库问答 >
问题:

在Matlab中用事件函数求解ODEs

羊舌和安
2023-03-14

我现在正在做一个项目,我已经建立了一个多体机械系统的运动模型。它是一个复杂的非光滑系统,系统的运动并不总是由同一组方程组描述的,这意味着如果我用数值方法求解它,我必须有时停止积分(然后用新的初始条件和方程组重新开始)。

function dy = firstODE(t,y)
dy = zeros(2,1);
dy(1) = y(2);
dy(2) = 1/(A1)*(B1-c*y(1));
end


function dy = secondODE(t,y)
dy = zeros(4,1);
dy(1) = y(2);
dy(2) = -c/A2*y(1);
dy(3) = y(4);
dy(4) = D2/B2 + c*C2/(A2*B2)*y(1);
end

function [value,isterminal,direction] = myEventsFcn(t,y)
value = [y(1)-K1, y(1)+K1, y(1)+K2, y(1)+K1, y(1)-K1];
isterminal = [1, 1, 1, 1, 1];
direction = [-1, -1, -1, 1, 1];
end

我如何告诉ODE-solver在事件发生后要使用什么新的初始条件和方程式?

共有1个答案

艾翼
2023-03-14

调用两种不同的解决方案。即。

sol1 = ode45(@(t,x)firstODE(t,x),tspan1,init1);
% set some conditions
sol2 = ode45(@(t,x)secondODE(t,x),tspan2,init2);

如果希望tspan2从前一个中断的位置开始,并到达最初定义的tspan1的末尾,请将tspan2设置为[sol1.xe,tspan1(end)]。

 类似资料:
  • 我已经广泛地搜索了,并认为我不会是唯一一个有这个问题的人,但看起来似乎我是。 有人有什么想法吗?提前向大家表示感谢,祝大家假期愉快!

  • 主要内容:在MATLAB中求解基本代数方程,求解代数中的基本代数方程,在MATLAB中求解二次方程,在Octave中求解二次方程,求解MATLAB中的高阶方程,在Octave中求解高阶方程,MATLAB中求解方程组,在Octave中求解方程组,在MATLAB中扩展和集合方程,在Octave扩展和集合方程,代数表达式的因式分解和简化到目前为止,我们已经看到所有的例子都在MATLAB以及它的GNU,或者称为Octave。 但是,为了求解基本代数方程,MATLAB和Octave都不同,所以这里将分别介

  • 我正在使用一个僵硬的求解器(ode15s)对一个颂歌系统进行时间积分。它在起作用,但我想加快速度。 方程组以状态空间形式给出: 这里的诀窍部分是强迫函数F,它是高度非线性的,依赖于x和t参数。它利用x参数求解Poisson型二维方程(用有限体积法)。力F与泊松方程解成正比。 用迭代法求解泊松方程需要一个初始条件,我把它设为零()。我想我可以通过提供一个更好的场的初始估计来提高计算速度(一个更好的初

  • 主要内容:示例,匿名函数,主函数和次函数,示例,嵌套函数,私有函数,示例,全局变量一个函数是一组在一起执行任务的语句。 在MATLAB中,函数在单独的文件中定义。文件的名称和函数的名称应该是一样的。 函数在自己的工作空间内的变量上运行,这个变量也称为本地工作空间,与在MATLAB命令提示符下访问的工作区(称为基本工作区)不同。 函数可以接受多个输入参数,并可能返回多个输出参数。 函数语句的语法是 - 示例 以下名称为的函数应写入名称为的文件中。它需要五个数字作为参数,并返回参数

  • 这是我第一次发帖,所以如果你需要更多的信息或者我没有做正确的事情,请让我知道! 其中f(a)可以是另一个基于常数的函数a。 我已经按照以下顺序设置了我的代码; 常数,然后是f(a)形式的方程,然后是我的微分方程,后面是ode45求解器和plot命令。然而,我得到了几个错误“未定义的函数或变量”,因为早期的方程依赖于变量/方程,直到后来才被定义。 非常感谢您的帮助:) 正如建议的,这里是我的代码类型

  • 所以,我正在用ODE45在MATLAB中求解一些ODE。它们和代码没有什么特别复杂的,但是每个ODE解决方案需要20-30分钟来获得,我需要获得大约10分钟。(这是一个参数扫描。) 当我坐在那里等待解的到来时,我发现自己希望有一种方法可以在解诗的时候看着解画出来,这样既可以让自己确信正在取得进展,也可以在解似乎有问题的时候结束解。 有没有一种方法从ode45返回当前的(不完整的)解,并在解的时候实