2014-10-02 63 views
1

简化如何简化表达如下图所示:如何通过分解

输入: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

回答

2

您对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来尝试所有这些,你可以选择最适合你的一个。