在 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))
.
如何在 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))
.