我怎么能确定一个象征性的微分方程的顺序?

34视图(30天)
我写一个函数,它接受一个符号形式的微分方程作为参数,我想确定方程的某些变量的顺序。
示例1 一阶系统:
信谊t s y (t) u R (t) L
diff_eqn = R * y (t) + L * diff (y (t) t) = = u (t);%的微分方程
订单(关于 y (t))是1。
示例2 一个二阶系统:
信谊t s y (t) u (t) omega_n z K
diff_eqn = 1 / omega_n ^ 2 *差异(t y (t), 2) + 2 * z / omega_n * diff (y (t), t) + y (t) = = K * u (t);
订单是2。
我还想知道订单w.r.t. u (t)如果可能的话一般来说可能不是0。

接受的答案

Ayush古普塔
Ayush古普塔 2020年9月10日
不存在直接的函数来确定微分方程的阶。然而,有一个解决方案,我们可以使用reduceDifferentialOrder newvars从我们得到最后一个元素,可以看到t的发生,这是一个加比的方程。参考下面的代码:
信谊x (t) y (t) f (t)
方程式= [diff (x (t), t, t) = = diff (f (t), t, t, t), diff (y (t), t, t, t) = = diff (f (t), t, t)];
var = [x (t), y (t));
[newEqs, newVars R] = reduceDifferentialOrder(方程式一样,var)
l =长度(newVars);
s =字符串(newVars (l, 1));
order_of_equation = count(年代,“t”)1;
1评论
保罗
保罗 2023年4月2日
有点容易打交道,如果搭配的常微分方程的问题,至少找到ODE的顺序
信谊t s y (t) u R (t) L
diff_eqn = R * y (t) + L * diff (y (t), t) = = u (t)%的微分方程
diff_eqn =
% (w.r.t. y (t))的顺序是1。
元素个数(odeToVectorField (diff_eqn))
ans = 1
%例2一个二阶系统:
信谊t s y (t) u (t) omega_n z K
diff_eqn = 1 / omega_n ^ 2 *差异(t y (t), 2) + 2 * z / omega_n * diff (y (t), t) + y (t) = = K * u (t)
diff_eqn =
元素个数(odeToVectorField (diff_eqn))
ans = 2
找到订单关于u (t)需要更多的工作。

登录置评。

更多的答案(2)

Ganesh
Ganesh 2023年4月1日
编辑:沃尔特·罗伯森 2023年4月1日
函数订单= order_polynomial (poly1, x)
数= 0;
temp = 1;
(临时~ = 0)
poly1 = diff (poly1 x);
如果poly1 = = 0
temp = 0;
其他的
数=计数+ 1;
结束
结束
disp(数);
结束

沃尔特·罗伯森
沃尔特·罗伯森 2023年4月1日
移动:沃尔特·罗伯森 2023年4月1日
p = poly2sym (randi([9, 9], 1,兰迪(15)))
p =
poly_degree =长度(多项式系数(p,“所有”1))
poly_degree = 6
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2023年4月2日
@Paul 当然是正确的,如果你有一个向量的系数向量的长度之间的差异和第一个非零的位置告诉你的学位。
然而……最初的问题处理象征性的多项式。我创建的p中间数字只是形式 一些 多项式,证明我我的代码与多项式的不同程度,不仅“发生”的东西来处理一个特定的长度。

登录置评。

s manbetx 845


释放

R2019b

社区寻宝

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

开始狩猎!