简化如何简化表达如下图所示:如何通过分解
输入:a*b*c+a*d*e+b*d*f+c*e*f
输出:a*(b*c+d*e)+f*(b*d+c*e)
我试着收集和MATLAB因素,但是这不是我最喜欢的输出
采集输出:(b*d + c*e)*f + a*b*c + a*d*e
因子输出:a*b*c + a*d*e + b*d*f + c*e*f
简化如何简化表达如下图所示:如何通过分解
输入:a*b*c+a*d*e+b*d*f+c*e*f
输出:a*(b*c+d*e)+f*(b*d+c*e)
我试着收集和MATLAB因素,但是这不是我最喜欢的输出
采集输出:(b*d + c*e)*f + a*b*c + a*d*e
因子输出:a*b*c + a*d*e + b*d*f + c*e*f
您对collect
有正确的想法。但是,如果您查看collect
文档,则一次只能计算一个变量。如果要一次实现两个变量的因式分解,则必须调用collect
两次 - 对每个要分解的变量进行一次。您需要在collect
中指定一个附加输入,以告知该函数您想要考虑的变量。通过使用collect
本身,除符号表达式之外没有任何参数,它将影响默认变量symvar
,在您的情况下,它将为f
。因此,如果你想实现你的帖子里说什么,你需要做的是:
syms a b c d e f; %// Define symbolic variables
eqn = a*b*c+a*d*e+b*d*f+c*e*f; %// Define expression
final_eqn = collect(collect(eqn, f), a)
final_eqn =
(b*c + d*e)*a + (b*d + c*e)*f
MATLAB有一个名为simple
它试图效用表达式上的各种简化功能,并输出每种简化的内容。如果你试试这个在您的表达,这是你会得到什么:
>> simple(eqn);
simplify:
a*b*c + a*d*e + b*d*f + c*e*f
radsimp:
a*b*c + a*d*e + b*d*f + c*e*f
simplify(Steps = 100):
a*b*c + a*d*e + b*d*f + c*e*f
combine(sincos):
a*b*c + a*d*e + b*d*f + c*e*f
combine(sinhcosh):
a*b*c + a*d*e + b*d*f + c*e*f
combine(ln):
a*b*c + a*d*e + b*d*f + c*e*f
factor:
a*b*c + a*d*e + b*d*f + c*e*f
expand:
a*b*c + a*d*e + b*d*f + c*e*f
combine:
a*b*c + a*d*e + b*d*f + c*e*f
rewrite(exp):
a*b*c + a*d*e + b*d*f + c*e*f
rewrite(sincos):
a*b*c + a*d*e + b*d*f + c*e*f
rewrite(sinhcosh):
a*b*c + a*d*e + b*d*f + c*e*f
rewrite(tan):
a*b*c + a*d*e + b*d*f + c*e*f
mwcos2sin:
a*b*c + a*d*e + b*d*f + c*e*f
collect(f):
(b*d + c*e)*f + a*b*c + a*d*e
我想这是不是在你的情况下特别有用,但它的东西来看看,如果有一个简化算法你不满意。你可以用simple
来尝试所有这些,你可以选择最适合你的一个。