Matlab符号
Matlab symbolic
我正在尝试使用 Matlab 符号工具箱比较两个简单的表达式。出于某种原因,代码 returns 0。知道吗?
syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,B)
总的来说你写的不是真的,在右边"assumptions"下它变成了真的:例如,假设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
当(可能)涉及小数指数时,MATLAB 似乎很难判断两个表达式相同。
因此,根据 Mikhail 的建议,一种解决方案是将 c
的值限制为仅整数,尽管如 Math.SE 问题 jodag 中所讨论的那样,小数没有任何问题本例中的指数。
因此,由于对整数的限制对于语句为真不是必需的,另一种解决方案是对 B
的表达式使用 simplify
函数,但允许它 run more simplification steps 为了得到最简化的表达。
syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,simplify(B,'step',4))
四步实际上是对我有用的最小数字,但我假设的不同版本的 MATLAB 可能会有所不同。可以肯定的是,我会包括更多,但对于非常大的表达式,这可能会成为计算密集型的,所以一些判断是必要的。请注意,您还可以使用 'Seconds' 选项来限制允许进行简化的时间量。
我正在尝试使用 Matlab 符号工具箱比较两个简单的表达式。出于某种原因,代码 returns 0。知道吗?
syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,B)
总的来说你写的不是真的,在右边"assumptions"下它变成了真的:例如,假设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
当(可能)涉及小数指数时,MATLAB 似乎很难判断两个表达式相同。
因此,根据 Mikhail 的建议,一种解决方案是将 c
的值限制为仅整数,尽管如 Math.SE 问题 jodag 中所讨论的那样,小数没有任何问题本例中的指数。
因此,由于对整数的限制对于语句为真不是必需的,另一种解决方案是对 B
的表达式使用 simplify
函数,但允许它 run more simplification steps 为了得到最简化的表达。
syms a b c
A = (a/b)^c
B = a^c/b^c
isequal(A,simplify(B,'step',4))
四步实际上是对我有用的最小数字,但我假设的不同版本的 MATLAB 可能会有所不同。可以肯定的是,我会包括更多,但对于非常大的表达式,这可能会成为计算密集型的,所以一些判断是必要的。请注意,您还可以使用 'Seconds' 选项来限制允许进行简化的时间量。