Matlab符号

Matlab符号,matlab,symbolic-math,Matlab,Symbolic Math,我试图使用Matlab符号工具箱比较两个简单的表达式。由于某种原因,代码返回0。有什么想法吗 syms a b c A = (a/b)^c B = a^c/b^c isequal(A,B) 一般来说,你写的不是真的,在正确的“假设”下,它变成了真的:例如,假设c是一个整数,你可以欺骗MATLAB来扩展 clc; clear all; syms a syms b syms c integer A = (a/b)^c; B = simplify((a^c)/(b^c)); disp(isequ

我试图使用Matlab符号工具箱比较两个简单的表达式。由于某种原因,代码返回0。有什么想法吗

syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,B)

一般来说,你写的不是真的,在正确的“假设”下,它变成了真的:例如,假设
c
是一个整数,你可以欺骗MATLAB来扩展

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);
一,

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


当涉及(可能的)分数指数时,MATLAB似乎很难判断两个表达式是否相同

因此,Mikhail建议的一种解决方案是限制
c
的值仅为整数,尽管如Math.SE问题jodag所述,在这种情况下分数指数没有问题

因此,由于此对整数的限制不是语句为真所必需的,因此另一种解决方案是对
B
的表达式使用
simplify
函数,但允许它这样做,以获得最简化的表达式

syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,simplify(B,'step',4))

四个步骤实际上是对我有效的最小数字,但我假设不同版本的MATLAB可能会有所不同。可以肯定的是,我会包括更多,但对于真正大的表达式,这可能会增加计算量,所以一些判断是必要的。请注意,您也可以使用“秒”选项来限制简化所需的时间。

我对“一般来说,您所写的不是真的”有点怀疑,所以我在@jodag上询问了此事,谢谢您这么做!我也在想同样的事情,我想我已经找到了一个替代的解决方案,它不涉及限制我们使用整数指数。