2014-10-02 68 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來嘗試所有這些,你可以選擇最適合你的一個。