ode函数转换为符号形式?

13个视图(30天)
沃尔特·罗伯森
沃尔特·罗伯森 2023年1月17日
编辑: 约翰D 'Errico 2023年2月17日
假设我有一个函数处理(可能是匿名)适合使用ode函数数值或ode15s或相似函数数值解的颂歌。这将(通常)涉及多个国家。它可能包括几个衍生品为单一功能或它可能包括几个耦合方程(所以我们不能假设每个州的状态向量的导数状态上方)
我怎么能这样一个函数处理转换成符号方程——成适合通过dsolve ()。[dsolve()可能会发现它不能解决这样的一个系统,但我们可能想要 试一试 ,或者我们可能希望运行方程通过不同的软件包。)
我曾经尝试过这样做几次过去,和我的逻辑似乎不错,但是我的实验已知函数很少工作。
例子:
%这是流从一个例子odeFunction()的文档
信谊y (t);
eqn = diff (y (t), t, 2) = = (1 y (t) ^ 2) * diff (y (t), t) - y (t);
(方程式一样,var) = reduceDifferentialOrder (eqn, y (t))
方程式=
var =
[M F] = massMatrixForm(方程式一样,var)
M =
F =
f = M \ f
f =
odefun = odeFunction (f, var)
odefun =function_handle与价值:
@ (t, in2) [in2 (2:); in2 (2:) in2 (: 1) in2 (2:)。* in2 (: 1) ^ 2]。
现在,假设我已经收到 odefun 不知为何,并没有原始符号方程,我怎么把它转换成类似 eqn 吗?
Non-toy例子:
%认为c (1) c(6)是数字常量和y y(1)和(2)的
%:
dy = 0 (2, 1);
dy (1) = c (1) * (2.5 - (1 + c (2)) * y y (1) - (2) - c (3)。* y (2)。* (c (4) - y (1) * (1 + c (2)))。/ (1 + c (3)。* y (2)))。* (c (4) - y (1) * (1 + c (2)))。/ (1 + c (3)。* y (2)) - c (5)。* y (1);
dy (2) = c (6)。* (2.5 - (1 + c (2)) * y y (1) - (2) - c (3)。* y (2)。* (c (4) - y (1) * (1 + c (2)))。/ (1 + c (3)。* y (2)))。* (c (7) - y (2) - c (3)。* y (2)。* (c (4) - y (1) * (1 + c (2)))。/ (1 + c (3)。* y (2))) - c (8)。* y (2);
7评论
约翰D 'Errico
约翰D 'Errico 2023年2月17日
编辑:约翰D 'Errico 2023年2月17日
我认为保罗是正确的。似乎非常困难总是一个一阶常微分方程系统转化为一个高阶问题。有时,简单的,是的。但我敢打赌,我可以找到一个简单的反例,和一个反例就足够了。例如:
xdot = = t) x (0) = = 1
ydot = = t + 1, y (0) = 1
当然,因为单独的问题解决简单的二次多项式,没有简单的二阶的颂歌,它将允许您将两个方程表示为一个颂歌,所以用一个未知函数的解决方案。
信谊x (t) y (t)
dsolve (diff (x) = = t) x (0) = = 1)
ans =
dsolve (diff (y) = = t + 1, y (0) = = 1)
ans =
其实不需要这样做,因为dsolve之类的工具可以处理系统的常微分方程,它将是微不足道的将这两个子问题转化为一个问题,可以解决一个数值解算器或dsolve,无论哪种方式。但是,如果目标是找到一个高阶的颂歌,自动,这样做,我不认为你可以这样做。

登录置评。

答案(0)

下载188bet金宝搏


释放

R2022b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!