问题标签 [ode45]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
122 浏览

matlab - Matlab:使用匿名函数求解二阶 ODE

下面用matlab求解ODE

在此处输入图像描述

我收到此错误:

使用 odearguments 时出错(第 91 行)@(T,X)XDOT(X(1),X(2)) 必须返回列向量。

0 投票
0 回答
129 浏览

matlab - 如何使用 ODE45 求解依赖于频率的耦合微分方程?

等式 1

等式 2

FREQ = 1:1000; P = 1i * (2 * pi * FREQ);

常数值和状态变量方程

对于这个特定问题,强制函数 P 是频率相关的。它将感动群众。如何实现 ODE45 来求解频率为变化条件的方程?(忽略图 3 中 P 的值。)

0 投票
0 回答
97 浏览

matlab - 如何在 ODE 求解器中使用符号表达式

我需要使用 ode45 函数解决以下符号 ODE:

我知道我需要把它转换成function_handler:

但我不知道如何在 ode45 函数内部使用:

MATLAB 给出了这个错误:

编辑: 我真正的问题包括具有许多参数的各种函数(应该通过 ODE45 函数获得),我正在寻找一种自动计算梯度并将它们应用到 ODE45 中的方法。

0 投票
1 回答
338 浏览

matlab - 如何定义微分方程组?

我在 MATLAB 中工作,但我对微分方程系统有疑问。我的系统是dvdt = (-2*T)-4*v并且dTdt = 6*T+v我想使用四阶的 Runge-Kutta 来解决它。我写了以下代码:

如果我只运行函数odefun,我的代码就可以工作!但是如果我运行完整的程序,我的代码就不起作用:

这是我的结果。我不知道要写一个正确长度的向量:

使用 odearguments 时出错(第 95 行)@(T,Y)YY 返回长度为 1 的向量,但初始条件向量的长度为 2。@(T,Y)YY 返回的向量和初始条件向量必须具有相同数量的元素。

ode45 错误(第 115 行)

sys_ode 中的错误(第 4 行)[t,y]= ode45(@(t,y)yy,[0 1.5],[1 1/2 ]);

0 投票
1 回答
114 浏览

matlab - 在 MatLab 上使用 ODE45 时,为初始 X 值和速率常数输入带有多个小数位的数字会导致错误消息

我有一个函数文件:

和我的脚本文件:

当我使用带有许多小数位的数字与整数运行 ODE45 时,我收到此错误:

使用 horzcat 时出错请求的 5x212292600 (7.9GB) 数组超出了最大数组大小首选项。创建大于此限制的数组可能需要很长时间并导致 MATLAB 变得无响应。有关更多信息,请参阅数组大小限制或首选项面板。

我有 5 个 DEG,时间范围为 10,步长为 0.1(因此总共 100 个),所以无论输入值如何,总数组大小肯定应该是 500?为什么使用带有许多小数位的输入值会增加数组大小?

感谢您的任何帮助/建议!

0 投票
1 回答
48 浏览

matlab - 使用 Matlab ode45 对 y^3 求导

我有两个微分方程,我想在 Matlab 中使用 ode45 同时求解,如下所示。我遇到的问题是二阶微分方程实际上是 d(y^3)/dt,即 y^3 对 t 的导数。我该如何表达?

0 投票
1 回答
380 浏览

matlab - 如何从 ODE45 接收更多输出

我有 N = 2 个耦合非线性动力系统,其耦合由 2 x 2 矩阵 W 给出。它们中的每一个都由 n = 8 一阶 ode 描述。下面的代码解决了这个耦合系统,对于参数 p 的许多值:

在函数内,已经计算出差异:

对于 i = 1,...,N,并且对于所有时间和所有 p 值,这应该是维度的 3-D 矩阵

此外,在函数内计算:

对于 i = 1,...,N 和 p 的所有值,但在经过时间平均后,它应该是一个二维矩阵

我需要一些帮助才能将 y_out 和 F_Global 提取为 ode45 的输出

0 投票
0 回答
97 浏览

matlab - 在 Matlab 中用 ODE45 求解一个微分方程组

我需要在选定的时间跨度内求解一个微分方程组,但这些方程取决于一些随时间变化的变量。我正在尝试编写函数 'odefun' 以在 ode45 中使用,当我运行具有时间跨度和初始条件的代码时,它似乎可以工作,但我不确定代码是否真的在做我想要的。

dX(1)是a的导数,也就是我的X(1),dX(2)是e,X(2)的导数。函数 Kepler Picard 定义如下:

我希望变量“n”在一段时间内改变并使用新值“a+da”(或者“X(1)+dX(1)”),但我不知道代码是否这样做。需要注意的是,这样代码运行没有错误,但我不知道结果是否正确(如果代码将'n'视为常量,它们肯定是错误的)。有什么我需要改变的吗?谢谢!

0 投票
1 回答
300 浏览

matlab - 在 Matlab 中求解微分方程

我需要同时求解这两个微分方程。

注:dr^3/dt 是 r^3 对 t 的导数

这两个方程类似于微粒半径 (r) 和浓度 (C) 随时间的变化,用于微悬浮液的溶解过程及其在血流中的同时吸收。随着固体溶解,预期发生的是半径 r 将减小,而浓度 C 将增加并最终达到平稳状态(即达到平衡),因为溶解的固体被 Af*C 移入血流中项(其中 Af 是某种吸收速率常数)。方程式来自我试图复制的这篇论文:jpharmsci.org/article/S0022-3549 (18)30334-4/fulltext#sec3.2.1 ——C 与 t 的变化应该类似于图 3(DCU例子)。

我做了简化:dr^3/dt = 3r^2*(dr/dt) 并将等式两边除以 3r^2。颂歌变成:

是论文中使用的术语,是“标准化”半径和浓度,其中

在哪里:

  • r=粒子半径(随时间变化,由 dydt(1) 表示)
  • r0=初始粒子半径
  • C=溶解固体的浓度(随时间变化,由 dydt(2) 表示)
  • Cs=饱和溶解度

其余代码如下。更新了作者对论文中使用的值的反馈,并将初始值更正为 y0=[1 0]

我首先尝试了 ode45,但代码运行时间很长,最终出现了一些错误。然后我尝试了 ode113 并得到了以下错误。

更新:更新函数代码以解决奇点问题:

结果 在此处输入图像描述

模型的机械背景

dr/dt 的推导

dydt(1)的推导

dC/dt 的推导

dydt(2)的推导

模型假设

您将在上面找到显示这些方程式推导的幻灯片。他们假设在溶出速率 dM/dt=(/h) 4^2 (-) 的 Noyes-Whitney 方程中,膜厚 h 等于颗粒半径 r。如果雷诺数较低且颗粒 <60 微米(在他们的情况下为 10 微米),这通常是在生物制药建模中进行的简化。如果我们做这个假设,我们剩下 dM/dt= 4(-)。我渴望复制这篇论文,因为我想做同样的事情,即模拟皮下注射微悬浮液的药物吸收。我已经联系了作者,他们似乎不太确定他们做了什么,所以我正在查看其他来源,例如这篇论文:https://pubs.acs.org/doi/pdf/10.1021/acs.iecr。 7b04730其中在等式 6 中,显示了 dC/dt 的等式。他们将每单位体积的表面积变化 (a)(等式 5)代入等式 6。它们的传质系数 kL 是一个集中参数 = D/h(扩散率/薄膜厚度)。

0 投票
2 回答
69 浏览

matlab - MatLab ODE45 中的重复方程求解

我正在尝试编写一个 MatLab 代码,它可以扩展 ODE 的数量以简单地解决。这是我目前拥有的代码,为简单起见,我从弹簧质量阻尼器系统开始。

我对这个代码区域的主要问题是:

有没有一种简单的方法可以实现相同数量的系统(ODE),而无需复制和粘贴块中的第一个方程并手动更改 x 索引?