Matlab符号计算

4
我试图使用Matlab符号工具箱比较两个简单表达式。由于某些原因,代码返回0。有任何想法吗?
syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,B)
2个回答

2
似乎MATLAB在涉及(可能)分数指数时很难判断两个表达式是否相同。因此,一种解决方法是像Mikhail建议的那样将 c 的值限制为仅为整数,尽管正如jodag发布的Math.SE问题中讨论的那样,在这种情况下使用分数指数没有任何问题。因此,由于这种限制对于语句成立并不必要,另一种解决方案是对B的表达式使用简化函数,但允许它运行更多的简化步骤以获得最简化的表达式。
syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,simplify(B,'step',4))

实际上,四个步骤是我使用过的最小数量,但这可能因MATLAB版本而异。为确保准确性,我建议增加步骤,但对于非常大的表达式,这可能会变得计算密集,需要一些判断。请注意,您还可以使用“Seconds”选项来限制简化所允许的时间。


0
通常来说,你所说的并不是真的,在正确的“假设”下,它才成立:例如,假设 c 是整数,你可以欺骗MATLAB来扩展A。
clc; clear all;
syms a 
syms b 
syms c integer
A = (a/b)^c;
B = simplify((a^c)/(b^c));
disp(isequal(A,B));
disp(A);
disp(B);

1

a^c/b^c
a^c/b^c


2
我对“总的来说,你写的不正确”有些怀疑,所以我在Math.SE上询问了一下。 - jodag
@jodag 谢谢你做了那个!我也在考虑同样的事情,我认为我已经找到了一种替代方案,不需要限制我们只使用整数指数。 - DecimalTurn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接