簡化如何簡化表達如下圖所示:如何通過分解
輸入: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
來嘗試所有這些,你可以選擇最適合你的一個。