Matlab ode 求解器:改变状态和指定时间

2023-11-29

我正在求解 t=0 时的一组 ODE (dy/dt),所有初始条件 t=0 y_0=(0,0,0)。我可以在不同时间向 y 值添加一些数字(例如,在 t=10 时,应将 y1 添加到该数字;在 t=20 时,应将 y2 添加到该数字等)并求解方程?


按照您建议的方式(以及 @macduff 所示的方式)在 ODE 中插入大的不连续性可能会导致精度降低和计算时间更长(尤其是在使用ode45 - ode15s可能是更好的选择,或者至少确保您的绝对和相对公差合适)。你已经有效地制作了一个非常刚性系统。如果您想在特定时间开始向 ODE 添加一些数字,请记住,求解器仅在其自己选择的特定时间点计算这些方程。 (不要被以下事实误导:您可以通过指定获得固定步长输出tspan作为两个以上的元素 - Matlab 的所有求解器都是可变步长求解器,并根据误差标准选择其真实步数。)

更好的选择是分段集成系统并将每次运行的结果输出附加在一起:

% t = 0 to t = 10, pass parameter a = 0 to add to ODEs
a = 0;
tspan = [0 10];
[T,Y] = ode45(@(t,y)myfun(t,y,a),tspan,y_0);

% t = 10 to t = 20, pass parameter a = 10 to add to ODEs
a = 10;
[t,y] = ode45(@(t,y)myfun(t,y,a),tspan+T(end),Y(end,:));
T = [T;t(2:end)];
Y = [Y;y(2:end,:)];

% t = 20 to t = 30, pass parameter a = 20 to add to ODEs
a = 20;
[t,y] = ode45(@(t,y)myfun(t,y,a),tspan+T(end),Y(end,:));
T = [T;t(2:end)];
Y = [Y;y(2:end,:)];

Matlab 编辑器可能会抱怨数组T and Y没有被预先分配和/或增长,但在这种情况下很好,因为它们只增长了几次大块。或者,如果您想要固定的输出步长,您可以这样做:

dt = 0.01;
T = 0:dt:30;
Y = zeros(length(T),length(y_0));

% t = 0 to t = 10, pass parameter a = 0 to add to ODEs
a = 0;
[~,Y(1:10/dt+1,:)] = ode45(@(t,y)myfun(t,y,a),T(1:10/dt+1),y_0);

% t = 10 to t = 20, pass parameter a = 10 to add to ODEs
a = 10;
[~,Y(10/dt+1:20/dt+1,:)] = ode45(@(t,y)myfun(t,y,a),T(10/dt+1:20/dt+1),Y(10/dt+1,:));

% t = 20 to t = 30, pass parameter a = 20 to add to ODEs
a = 20;
[~,Y(20/dt+1:end,:)] = ode45(@(t,y)myfun(t,y,a),T(20/dt+1:end),Y(20/dt+1,:));

人们可以轻松地将上述两个代码块转换为更紧凑的代码for如果需要的话可以循环。

在这两种情况下你的 ODE 函数myfun包含参数a这边走:

function ydot = myfun(t,y,a)
    y(1) = ... % add a however you like
    ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Matlab ode 求解器:改变状态和指定时间 的相关文章

  • 如何获取MATLAB句柄对象的ID?

    当我尝试使用时出现问题MATLAB 句柄对象 http www mathworks com help techdoc ref handle html作为关键值MATLAB 容器 Map http www mathworks com help
  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • 从筛查乳腺 X 光检查数字数据库 (DDSM) 获取数据

    我正在尝试以可读格式获取 DDSM 数据集 有谁有 DDSM heathusf 程序的工作版本 可以在 Linux 或 Windows 上正常运行吗 我知道 DDSM 的 jpeg 程序有一个适用于 linux 的工作版本 位于http w
  • 直方图均衡结果

    I am trying to code histogram equalization by my self but the results are different from the built in function in matlab
  • Python 或 C 语言中的 Matlab / Octave bwdist()

    有谁知道 Matlab Octave bwdist 函数的 Python 替代品 此函数返回给定矩阵的每个单元格到最近的非零单元格的欧几里得距离 我看到了一个 Octave C 实现 一个纯 Matlab 实现 我想知道是否有人必须用 AN
  • 如何使用Matlab将数据保存到Excel表格中?

    我想将数据以表格形式保存在 Excel 工作表中 它应该看起来像 Name Age R no Gpa Adnan 24 18 3 55 Ahmad 22 12 3 44 Usman 23 22 3 00 每次当我执行我的文件时类数据 m 下
  • Matlab 图像数据的 hist 函数

    我是 Matlab 新手 我想制作自己的函数 与 imhist 显示图像数据的直方图 完成相同的工作 但我对此完全是新手 我不知道如何做开发这样的功能 我开始做一些东西 但它非常不完整 function output args myhist
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • 命令 A(~A) 在 matlab 中的真正作用是什么

    我一直在寻找找到矩阵非零最小值的最有效方法 并在论坛上找到了这个 设数据为矩阵A A A nan minNonZero min A 这是非常短且高效的 至少在代码行数方面 但我不明白当我们这样做时会发生什么 我找不到任何关于此的文档 因为它
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • matlab中更快的插值方法

    我正在使用 interp1 来插值一些数据 temp 4 30 4 rand 365 10 depth 1 10 dz 0 5 define new depth interval bthD min depth dz max depth ne
  • 将 Matlab 数组移植到 C/C++

    我正在将 matlab 程序移植到 C C 我有几个问题 但最重要的问题之一是 Matlab 将任何维度的数组都视为相同 假设我们有一个这样的函数 function result f A B C result A 2 B C A B and
  • MATLAB 除法...29/128 应该返回 0 吗?

    我真的不认为这是一个精度问题 答案应该是0 226左右 这是确切的代码 val I i j bucketSize pos val bucketSize I只是我从中获取值的矩阵 以下是 MATLAB 的输出 val 29 bucketSiz
  • MATLAB:将当前文件夹设置为脚本位置

    我在不同的文件夹中有一些脚本和数据 我使用addpath和相对路径经常 我的问题是 只有当我的当前文件夹是我执行的脚本所在的位置时 这才有效 例如 如果我执行添加路径 X 的脚本 A 然后执行位于路径 X 中的脚本 B 则 Matlab 不
  • 如何在 MATLAB 中将矩阵元素除以列总和?

    有没有一种简单的方法可以将每个矩阵元素除以列和 例如 input 1 4 4 10 output 1 5 4 14 4 5 10 14 以下是执行此操作的不同方法的列表 使用bsxfun https www mathworks com he
  • matlab 中的动画绘图

    我正在尝试创建一个三角形的动画图 最终结果应该是十个三角形 后面跟着两个更大的三角形 后面跟着一条直线 使用matlab文档 https de mathworks com help matlab ref drawnow html 我最终得到
  • 帮助我理解FFT函数(Matlab)

    1 除了负频率之外 FFT 函数提供的最小频率是多少 是零吗 2 如果它为零 我们如何在对数刻度上绘制零 3 结果总是对称的 或者只是看起来是对称的 4 如果我使用abs fft y 来比较2个信号 我是否会失去一些准确性 1 除了负频率之
  • 2D 网格的纹理贴图

    我有一组点 x y meshgrid 1 N 1 M 在常规二维上定义 N x M网格 我还有另一组要点 u v 这是原始网格的一些变形 即 u v f x y 但是我没有实际的f导致变形 如何将纹理映射到由定义的 变形 网格u v 即 给
  • MATLAB parfor 和 C++ 类 mex 包装器(需要复制构造函数?)

    我正在尝试使用概述的方法将 C 类包装在 matlab mex 包装器中here http www mathworks com matlabcentral newsreader view thread 278243 基本上 我有一个初始化
  • 使用不同的背景颜色保存 MATLAB 图窗

    我想打印一个带有深色背景和白色标签的 MATLAB 图 如果我使用print or saveas命令我不知何故失去了颜色 绘图符号再次变暗 背景变为白色 points rand 100 3 plot3 points 1 points 2 p

随机推荐

  • 如何从消息队列中删除消息(仅当其格式正确时)?

    我想从一个队列中获取消息并将其发送到数据库 我只想在特定格式下才这样做 如果我使用Receive直接调用方法 访问时出现异常Body的消息 我失去了消息 因为Receive的方法MessageQueue从队列中删除消息 为了避免丢失消息 现
  • 通用列表 - 移动列表中的项目

    所以我有一个通用列表和一个oldIndex and a newIndex value 我想将物品移至oldIndex to newIndex 尽可能简单 有什么建议么 Note 该项目应位于以下项目之间 newIndex 1 and new
  • 无法导入 facebook-sdk 4.0.1

    我有 android studio 1 1 0 我刚刚创建了一个新项目 我正在尝试导入新的 facebook sdk 4 0 1 但无法执行此操作 我遵循脸书入门 But can not get it work My app structu
  • 如何检查 URL 是否有效

    如何检查字符串是否是有效的 URL 例如 http hello it gt yes http bra ziz gt no 如果这是一个有效的 URL 我如何检查它是否相对于图像文件 Notice 正如 CGuess 所指出的 这个问题存在一
  • 单击按钮之前执行 Tkinter 按钮命令[重复]

    这个问题在这里已经有答案了 我创建了一个框架 其中我有两个浏览按钮 我想浏览两个以 txt 扩展名结尾的文件并将其打印在屏幕上 在我的场景中 在按下框架上的按钮之前浏览调用的函数 我期待当我按下按钮时它应该被调用 附完整代码 请有人纠正我做
  • Ruby `require` 调用在自定义代码上失败

    我发现我使用没有问题require加载类似 Sinatra Web 框架的东西 但我似乎无法使用require加载我自己的自定义代码 例如我有两个文件 test1 rb test2 rb test1 rb 的内容是 usr bin env
  • CPUID标准函数01H是什么?

    我需要检查ECX对于位 30 这是必要的 CPU 功能RDRAND 来自RDRAND Wiki 如果支持 则在调用 CPUID 标准功能 01H 后设置 ECX 寄存器的位 30 我不太清楚这意味着什么 标准功能01H 意思是不是EAX 8
  • 使用Python替换或交换文件中的子字符串

    假设我有以下形式的 ASCII 文件中的一行 text1 stringA text2 stringB text3 where stringA and stringB 是感兴趣的子串 我们分别称它们为 A 和 B 琴弦 text1 text2
  • 尝试创建 iOS 应用程序存档时出错:“无法创建配置文件,因为您的团队没有注册设备。”

    我正在尝试使用 Xcode 创建 iOS 应用程序的存档 以将其提交到 App Store 但是 当我选择 iOS 设备 作为目标并单击 产品 存档 时 会弹出以下错误消息 无法创建配置文件 因为您的团队没有在会员中心注册的设备 请连接设备
  • 通过xpath获取div的HTML内容[重复]

    这个问题在这里已经有答案了 我需要以下问题的支持 我有一个网站 我想通过 xpath 获取产品描述 下面是内容的示例 html div span some test span img src p some content etc p div
  • 如何在 Django 中处理具有多个变量的同一参数的 request.GET

    在 Django 视图中 您可以访问request GET variablename 所以在你看来你可以这样做 myvar request GET myvar 实际上request GET myvar 对象类型是
  • 使用 ajax 添加事件监听器效果不佳

    我想在 div 内显示 txt 文件的内容 因此我使用按钮调用我的函数 但即使我不按按钮 函数也会触发 这是我的 HTML 代码
  • 如何在 C# 中存储从 C++ 函数返回的 uint8_t* 变量?

    我正在从 C 程序调用 C dll 该 DLL 由几个函数组成 除了这个函数之外 我可以调用其中的大多数函数 C 函数如下 declspec dllexport uint8 t myHash const char filename uint
  • 制作电子邮件表单发送电子邮件

    我有以下来自 HTML 模板的电子邮件表单代码 我想让它发送电子邮件 因为我认为它不会发送电子邮件 并且我需要添加一些 JavaScript 来处理表单 关于如何对此表格执行此操作有任何提示吗 谢谢你
  • 将我的小数浮点四舍五入到最接近的一半或整数?

    好吧 我在我的应用程序中的计算遇到了问题 我很确定这是由于小数太长造成的 无论如何 这是需要完成的事情 因为它将大大减少我需要的代码量 下面是我目前如何拥有这部分代码 float ab1 abdomen1Input text floatVa
  • 运行时不要锁定应用程序文件

    我正在创建一个能够自我更新的软件应用程序 启动后 应用程序检查是否有可用更新 下载这些文件 程序集 然后继续加载它们 然而 问题是当应用程序由多个用户同时运行时 在终端服务器上运行时会发生这种情况 应用程序无法替换那些旧文件 因为 Wind
  • 用于将 Clojure .clj 编译为 .class / .jar 的简单工具

    我发现了两种将 Clojure clj 文件编译为 class 文件的方法 虽然它们都有效 但我对它们都有一些抱怨 The 第一使用 REPL 因此无法自动化 或者可以吗 The 第二个 uses lein 坦率地说 我不明白为什么我应该使
  • 如何在不破坏 apt 的情况下更新 Python 3 的替代品?

    有一天 我决定让 python 命令默认启动 python3 而不是 python2 所以我这样做了 sudo update alternatives install usr bin python python usr bin python
  • MySQL - 创建用户定义函数 (UDF) 时出现问题

    我正在尝试创建这个函数 CREATE FUNCTION remove non alphanum prm strInput varchar 3000 RETURNS VARCHAR 3000 DETERMINISTIC BEGIN DECLA
  • Matlab ode 求解器:改变状态和指定时间

    我正在求解 t 0 时的一组 ODE dy dt 所有初始条件 t 0 y 0 0 0 0 我可以在不同时间向 y 值添加一些数字 例如 在 t 10 时 应将 y1 添加到该数字 在 t 20 时 应将 y2 添加到该数字等 并求解方程