在 Matlab 中检查符号方程是否相等

Checking Symbolic Equation Equality in Matlab

如何在 Matlab 中检查符号 eq1 是否等于符号 eq2:

syms a x y
eq1 = a*(x+y)
eq2 = a*x + a*y

您可以使用 simplify on the difference, then logical 来测试它是否等于 0:

eqAreEqual = logical(simplify(eq1-eq2) == 0);

您也可以使用simplify on each and isequal进行比较:

eqAreEqual = isequal(simplify(eq1), simplify(eq2));

例如:

>> syms a x y
>> eq1 = a*(x+y);
>> eq2 = a*x + a*y;
>> eqAreEqual = logical(simplify(eq1-eq2) == 0)

eqAreEqual =

  logical

   1  % True!

>> eqAreEqual = isequal(simplify(eq1), simplify(eq2))

eqAreEqual =

  logical

   1  % Also true!

对于符号数学和 Matlab R2012a+,通常最好使用 isAlways 来检查等式或不等式是否成立。例如,

isAlways(eq1==eq2)

returns 逻辑 true (1)。 isAlways 函数考虑了假设,可以优雅地处理不确定的条件。来自@gnovice 的解决方案可以在旧版本的 Matlab 中使用,但是当无法证明表达式时会抛出错误,例如 logical(simplify(2*x >= x)).