在Matlab中将导数值保存在ode45中

2024-01-22

我正在模拟一个带有质量弹簧和双摆的(有点奇怪)系统的运动方程,我有一个质量矩阵和函数 f(x),并调用 ode45 来求解

M*x' = f(x,t);

我有5个状态变量,q= [ QDot, phi, phiDot, r, rDot]'; (删除了 Q,因为没有任何东西依赖于它,QDot 是当前的。) 现在,为了计算一些力,我还想保存 rDotDot 的计算值,ode45 为每个积分步骤计算该值,但是 ode45 不会返回该值。我已经搜索了一下,但我发现的唯一两个解决方案是 a) 将其转化为三阶问题并将 phiDotDot 和 rDotDot 添加到状态向量。我想尽可能避免这种情况,因为它已经是非线性的,这确实使事情变得更糟并增加了计算时间。

b) 增强状态以直接计算函数,如上所述here http://www.mathworks.co.uk/matlabcentral/newsreader/view_thread/246590。然而,在这个例子中,他说要在质量矩阵中添加一行零。这是有道理的,因为否则它将对导数进行积分,而不仅仅是在一个点上对其求值,但另一方面它会使质量矩阵变得奇异。似乎对我不起作用...

这看起来像是一个基本的事情(想要状态向量的导数值),是否有一些我没有想到的非常明显的事情? (或者一些不那么明显的东西也可以......)

哦,全局变量并不是那么好,因为 ode45 在细化其步骤时多次调用 f() 函数,因此全局变量和返回的状态向量 q 的大小根本不匹配。

如果有人需要它,这是代码:

%(Initialization of parameters are above this line)
   options = odeset('Mass',@massMatrix);
   [T,q] = ode45(@f, tspan,q0,options);

function dqdt = f(t,q,p)
    % q = [qDot phi phiDot r rDot]';

    dqdt = zeros(size(q));

    dqdt(1) = -R/L*q(1) - kb/L*q(3) +vs/L;
    dqdt(2) = q(3);
    dqdt(3) = kt*q(1) + mp*sin(q(2))*lp*g;
    dqdt(4) = q(5);
    dqdt(5) = mp*lp*cos(q(2))*q(3)^2 - ks*q(4) - (mb+mp)*g;
end

function M = massMatrix(~,q)
    M = [
        1 0 0 0 0;
        0 1 0 0 0;
        0 0 mp*lp^2 0 -mp*lp*sin(q(2));
        0 0 0 1 0;
        0 0 mp*lp*sin(q(2)) 0 (mb+mp)
        ];
end

最简单的解决方案是对返回的每个值重新运行函数ode45.

困难的解决方案是尝试将 DotDots 记录到其他地方(预先分配的矩阵甚至外部文件)。问题是,如果 ode45 在奇怪的地方秘密进行评估,您最终可能会得到不需要的数据点。

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

在Matlab中将导数值保存在ode45中 的相关文章

  • MATLAB 可执行文件太慢

    我使用以下命令将 MATLAB 程序转换为基于控制台的应用程序deploytool在 MATLAB 中 MATLAB m文件执行大约需要 2 秒 但在我将其转换为可执行文件并调用 exe 执行需要45秒 太长了 我想将 MATLAB 程序与
  • 平衡两轮机器人而不使其向前/向后漂移

    我正在尝试设计一个控制器来平衡 2 轮机器人 约 13 公斤 并使其能够抵抗外力 例如 如果有人踢它 它不应该掉落 也不应该无限期地向前 向后漂移 我对大多数控制技术 LQR 滑模控制 PID 等 都很有经验 但我在网上看到大多数人使用 L
  • 如何为已编译的 MATLAB 创建安装程序并要求用户接受我们的许可条款?

    我正在 MATLAB 中编写程序分发给 Windows 用户 我使用 MATLAB 编译器和 MATLAB r2014a 版本来创建程序 我可以使用 MATLAB 应用程序编译器创建 Windows 安装程序 并且它的工作效果可以接受 但是
  • Matlab 一个图上有多个图例 2014b

    我想在一个地块上有多个传说 该解决方案在 2014b 版本之前完美运行 我试图弄清楚如何使用手柄优雅地制作它 但到目前为止还没有成功 欢迎任何想法 2013b 的示例 x 1 50 y1 sin x 2 y2 cos x 2 f figur
  • 如何正确从表中删除 NaN 值

    在 Matlab 中阅读 Excel 电子表格后 不幸的是 我的结果表中包含了 NaN 例如这个 Excel 表格 将产生此表 其中出现额外的 NaN 列 我尝试使用以下代码片段删除 NaN measurementCells readtab
  • Matlab:条形图中缺少标签

    使用 Matlab 2012 和 2013 我发现设置XTickLabel on a bar图表最多只能使用 15 个柱 如果条形较多 则标签会丢失 如下所示 绘制 15 个条形图 N 15 x 1 N labels num2str x d
  • 以 2 为底的矩阵对数

    Logm 取矩阵对数 并且log2 取矩阵每个元素以 2 为底的对数 我正在尝试计算冯 诺依曼熵 它涉及以 2 为底的矩阵对数 我该怎么做呢 如果将 以 2 为底 的矩阵指数定义为B expm log 2 A 或者如果您类似地通过特征分解直
  • matlab中无限while嵌套在for循环中

    我想做一个while循环 嵌套在for在 Matlab 中循环以查找数据中不同对之间的距离 我的数据具有以下形式 ID lon lat time 1 33 56 40 89 803 2 32 45 41 03 803 3 35 78 39
  • 在matlab中不使用for循环检查数组中的成员资格

    我想简化这段代码 使其无需 for 循环即可工作 for i 1 N for j 1 N if ismember j A PID i i TFP i j PID i i end end end 其中A是一个包含一些标签的矩阵 我之前存储的T
  • 在 MATLAB 中绘图后恢复轴

    从文本文件绘制多种方法的输出后 未显示轴的右侧和上侧 我需要拥有它们并将它们加粗 就像当前的轴一样 绘制的数据来自存储每种方法数据的文件 每个数据文件都是一个 256x2 文件 包含 0 1 之间的值 第一列是精度 第二列是召回率 figu
  • MATLAB - 通过垂直连接子矩阵重新排列矩阵

    我在执行以下任务时遇到问题 假设一个 3x6 矩阵 A 0 2787 0 2948 0 4635 0 8388 0 0627 0 0435 0 6917 0 1185 0 3660 0 1867 0 2383 0 7577 0 6179 0
  • 在 Matlab 中保存 Kinect 深度图像?

    通过使用 Kinect 我可以获得深度图像 其中每个深度图像像素存储相机和物体之间的距离 以毫米为单位 现在我想保存它们以便以后使用 最好的推荐是什么 我正在考虑将深度图像保存为图像 jpg png等 然而 该值通常是从50毫米到10000
  • 轴标注问题

    通过运行我编写的以下 matlab 函数 可以互换图中的 x 轴和 y 轴 谁能告诉我问题出在哪里或者帮我解决它吗 预先感谢您的任何帮助 function axislabeling n x 1 1 n y 1 1 n z zeros n n
  • Mathworks 生成 Matlab HTML 文档的方法是什么?

    我正在开发共享的 Matlab 代码 我们希望在本地网络中将生成的文档作为可搜索的 HTML 文档共享 我知道以下生成文档的方法 编写一个类似于 C 文件的转换器 这是在中完成的将 Doxygen 与 Matlab 结合使用 http ww
  • Matlab strcat 不返回字符串?

    imgstr 无法识别 strcat 的输出字符串 homedir C Users images for img 01 bmp 02 bmp 03 bmp imgstr strcat homedir img I imread imgstr
  • MATLAB 中的逻辑数组与数值数组

    我正在比较两个二进制数组 我有一个数组 其中值可以是一或零 如果值相同则为 1 如果不同则为零 请注意 我正在做检查之外的其他事情 因此我们不需要进入矢量化或代码的性质 在 MATLAB 中使用数值数组和逻辑数组哪个更有效 Logical
  • MATLAB:图像角坐标和引用元胞数组

    我在比较不同元胞数组中的元素时遇到一些问题 这个问题的背景是我正在使用bwboundariesMATLAB 中的函数可追踪图像的轮廓 该图像是结构横截面 我试图找出整个部分是否具有连续性 即 只有一个轮廓由bwboundaries命令 完成
  • Blob 的簇生长

    考虑以下来自 Mathworks 的图像 我已经用标签标记了斑点 L num bwlabel I 如何迭代连接所有斑点 即从一个斑点开始 找到离它最近的一个 考虑最左边的两个斑点 可以从一个斑点的许多点绘制许多条线来连接到另一个斑点blob
  • 如何在matlab中使矩阵图平滑

    就像上图一样 怎样才能让画面更流畅呢 或者缩小y轴的范围 数据来自二维矩阵 然后我用plot data 请随意提出任何想法 平滑线条的一种方法涉及样本点之间数据的非线性插值 当你这样做时plot x y o http www mathwor
  • 如何从 Matlab 运行 R 脚本 [重复]

    这个问题在这里已经有答案了 我有 m 文件 我想用它来运行 R 脚本 我怎样才能做到这一点 Matlab文件 caller m some matlab code need to call a R script some matlab cod

随机推荐

  • 如何在php中创建对象数组

    我正在尝试在 php 中创建一个对象数组 并且很好奇我将如何去做 任何帮助都会很棒 谢谢 这是将包含在数组中的类
  • Laravel 4:加载旧库:如何?

    我有一个旧图书馆 phpquery http code google com p phpquery 我想将其包含在我的项目中 我已将其放入供应商内部 但它不起作用 因为它不符合 PSR 0 标准 我不希望它为每个请求加载 所以我没有放置re
  • Spark工作人员未连接到主设备

    我想创建一个 Spark 独立集群 我可以在同一节点上运行主节点和从节点 但不同节点上的从节点既不显示主节点 URL 也不连接到主节点 我正在运行命令 start slave sh spark spark server 7077 where
  • 像函数一样组合类型构造函数

    我最近遇到了一种情况 我希望能够在实例声明中编写类型构造函数 我本来想这样做 instance SomeClass t SomeClass t gt SomeClass t t where with t t 定义为 t t a t t a
  • 如何在本地主机上测试 Facebook“点赞”按钮?

    可以测试 Like 本地主机上的按钮 并不真地 Facebook 必须抓取您的网站以获取标题 描述和缩略图 如果它位于本地主机上 则无法访问您的站点
  • 角度材料 - 自动完成组件下拉部分不粘在输入字段上

    角度材料的自动完成组件在 MatDialog 组件内未按预期工作 自动完成组件中的 drpodown 部分不会粘贴到输入字段 堆栈闪电战链接 example https stackblitz com edit angular s698hp
  • 我想扫描大量数据(基于范围的查询),在写入数据时我可以做哪些优化以使扫描变得更快?

    I have billion我要扫描的 hbase 行数million一次行 什么是最好的优化技术我可以尽可能快地进行扫描 我们有类似的问题 我们需要通过键扫描数百万行 为此我们使用了映射缩减技术 对此没有标准的解决方案 因此我们编写了一个
  • 列和内嵌中心图像

    我想创建一个 2 个文本列 中间有一个 div 如下所示 我正在使用这段代码 moz column count 2 webkit column count 2 column count 2 当我在 div 类中放置另一个 div 时 它会格
  • WPF 2D 高性能图形

    基本上 我想要 WPF 中的 GDI 类型功能 其中我可以将像素写入位图并通过 WPF 更新和显示该位图 请注意 我需要能够通过响应鼠标移动更新像素来动态设置位图动画 我读到 InteropBitmap 非常适合此目的 因为您可以写入内存中
  • 什么是 LINQ 提供程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • TypeScript 可以在没有定义文件的情况下与 jQuery 交互吗?

    我一直在尝试了解这个新的 TypeScript 东西 并且我对某些事情有点好奇 它仍然可以与现有的 javascript 框架 如 jQuery 一起使用吗 without是否需要包含所有这些接口的定义文件 我一直在尝试手动测试这一点 但到
  • 尝试向 Web 服务发送 SOAP 请求时出现 WS 安全错误

    这是我使用肥皂 UI 发送的 SOAP 请求 但收到一条错误消息 消息不符合配置的策略
  • Puppeteer:Element.hover() 不存在

    我正在使用 puppeteer 从网站上抓取一些图像以及其他一些数据 要更改图像 我需要将鼠标悬停在列表项上 我不断遇到有关 hover 的文档 但没有成功 然而 click 非常适合我的抓取的另一部分 const pptr require
  • Android 关闭键盘

    按下按钮时如何关闭键盘 您想禁用或关闭虚拟键盘吗 如果您只想关闭它 您可以在按钮的单击事件中使用以下代码行 InputMethodManager imm InputMethodManager getSystemService Context
  • UserWarning:pyarrow.open_stream 已弃用,请使用 pyarrow.ipc.open_stream 警告

    我在跑步spark 2 4 2本地通过pyspark用于 NLP 中的 ML 项目 Pipeline 中的部分预处理步骤涉及使用pandas udf功能优化通过pyarrow 每次我使用预处理的 Spark 数据框进行操作时 都会出现以下警
  • 安卓倒计时

    我想在android中写一个倒计时 从3开始计数到0 就像最初3出现然后消失 2出现等等 我进行了很多搜索 但找不到任何好的样本 你能帮我看看我该怎么办吗 使用倒计时器 例如 import android os CountDownTimer
  • 金字塔 1.3 和 Google 应用引擎 1.7

    我设法使 Pyramid 1 2 WSGI 应用程序在 Google App Engine SDK 1 7 上运行 然而 我当前的项目使用了几个新的 Pyramid 1 3 功能 并且我陷入了 WebOb 版本问题 这是错误消息 Versi
  • 无法联系 reCAPTCHA。检查您的连接并重试

    我正在使用react google invisible recaptcha 但当页面加载时它不起作用 它会显示 无法联系 reCAPTCHA 请检查您的连接并重试 之类的警报 即使互联网速度更快 我怎样才能使用invisible reCAP
  • VS2010 中缺少 ws2_32.lib。该怎么办?

    我正在尝试着手 Windows 套接字编程 我知道你必须 include winsock2 h然后链接到ws2 32 lib 问题是我没有ws2 32 lib在我的 Visual Studio 2010 终极版本中 我应该做什么才能让它启动
  • 在Matlab中将导数值保存在ode45中

    我正在模拟一个带有质量弹簧和双摆的 有点奇怪 系统的运动方程 我有一个质量矩阵和函数 f x 并调用 ode45 来求解 M x f x t 我有5个状态变量 q QDot phi phiDot r rDot 删除了 Q 因为没有任何东西依