我有一个非常简单的符号任务需要在 MATLAB 中完成,但我不知道如何实现。
假设我有符号变量:
a1=t2-t1
a2=t3-t1
a3=t4-t1
我也知道
a4=t3-t2
a5=t4-t2
a6=t4-t3
如何用(a1,a2,a3)表示a4,a5和a6?
例如:对于 a4 我们应该有:
a4=a2-a1
让我们开始吧
syms t1 t2 t3 t4 a1 a2 a3 a4 a5 a6
我将把所有六个等式设置为方程,例如,
a1 == t2 - t1
、a6 == t4 - t3
您必须从六个方程中消除四个
t
变量。 Matlab 有
函数eliminate
,
正是这样做的:
wot = eliminate(a1 == t2 - t2, a2 == t3 - t1, a4 == t3 - t1, a5 == t4 - t2, a6 == t4 - t3], [t1, t2, t3, t4])
此函数仅适用于有理方程,即等价于多项式方程,并且使用的方法是 Groebner 基的方法。一般来说,从一组方程中消除变量的问题是 非常困难,并且没有通用的算法,因为没有通用的算法来符号求解这么多类方程。
如果此操作成功(在本例中成功),您将得到三个方程(每个表达式都有一个隐含的
== 0
),您可以用它来求解三个感兴趣的变量,a4
、a5
, a6
:
solve(wot, [a4, a5, a6])
我必须在最后添加一种幼稚的方法,那就是手动进行的方法;它可能 在一些不是有理方程的简单情况下工作,如果它们足够简单的话。它适用于 您的示例方程,因为它们是线性且对称的。
前三个方程有 7 个符号,我们想去掉其中的四个
t
。由于只有三个方程,我们只能去掉三个:
sol1 = solve([a1 == t2 - t1, a2 == t3 - t1, a4 == t4 - t1], [t1, t2, t3])
(由于对称性,我通常会消除
t2
、t3
和 t4
,留下 t1
,但在这个
无论选择四个中的三个t
,它都可以工作)
然后将仍然取决于
t4
的解代入其余三个方程:
subs([a4 == t4 - t1, a5 == t4 - t2, a6 == t4 - t3], sol1)
可能随后对结果表达式进行常规(操作)[https://www.mathworks.com/help/symbolic/choose-function-to-rearrange-expression.html]以消除
t4
变量,如果确实可以消除(一般情况并非如此)。
对于示例方程,这不是必需的。