用其他特定变量来表达符号变量

问题描述 投票:0回答:1

我有一个非常简单的符号任务需要在 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
matlab symbolic-math
1个回答
0
投票

让我们开始吧

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
变量,如果确实可以消除(一般情况并非如此)。 对于示例方程,这不是必需的。

© www.soinside.com 2019 - 2024. All rights reserved.