Symbolic expression simplification and shortening

3 次查看(过去 30 天)
I have an extremely long symbolic expression after simplification which I am unable to simplify further. I want to know how to reduce the expression further, or to find repeating sub expressions inside the expression which can be replaced by another variable?
For an example, my expression looks somewhat like this:
U =
108*A^2*e^7*e1^3*e2^7*h2^4 + 153*A^2*e^7*e1^5*e2^7*h2^2 + 108*A^2*e^7*e1^7*e2^3*h3^4 + 153*A^2*e^7*e1^7*e2^5*h3^2 +...
24*B^2*e^3*e1^7*e2^7*h1^4 + 95*B^2*e^5*e1^7*e2^7*h1^2 + 24*B^2*e^7*e1^3*e2^7*h2^4 + 95*B^2*e^7*e1^5*e2^7*h2^2 + ...
24*B^2*e^7*e1^7*e2^3*h3^4 + 95*B^2*e^7*e1^7*e2^5*h3^2 + 9*A^2*e^2*e1^7*h1^5*h3^7 + 9*A^2*e^2*e2^7*h1^5*h2^7 +...
9*A^2*e1^2*e2^7*h1^7*h2^5 + 9*A^2*e^7*e1^2*h2^5*h3^7 + 9*A^2*e^7*e2^2*h2^7*h3^5 + 9*A^2*e1^7*e2^2*h1^7*h3^5 -...
41*B^2*e^2*e1^7*h1^5*h3^7 - 41*B^2*e^2*e2^7*h1^5*h2^7 - 12*B^2*e^4*e1^7*h1^3*h3^7 - 12*B^2*e^4*e2^7*h1^3*h2^7 -....
41*B^2*e1^2*e2^7*h1^7*h2^5 - 12*B^2*e1^4*e2^7*h1^7*h2^3 - 41*B^2*e^7*e1^2*h2^5*h3^7 - 12*B^2*e^7*e1^4*h2^3*h3^7 - ...
41*B^2*e^7*e2^2*h2^7*h3^5 - 12*B^2*e^7*e2^4*h2^7*h3^3 - 41*B^2*e1^7*e2^2*h1^7*h3^5 - 12*B^2*e1^7*e2^4*h1^7*h3^3 -...
504*A^2*e^3*h1^4*h2^7*h3^7 + 9*A^2*e^5*h1^2*h2^7*h3^7 - 504*A^2*e1^3*h1^7*h2^4*h3^7 + 9*A^2*e1^5*h1^7*h2^2*h3^7 -...
504*A^2*e2^3*h1^7*h2^7*h3^4 + 9*A^2*e2^5*h1^7*h2^7*h3^2 + 2860*B^2*e^3*h1^4*h2^7*h3^7 - 377*B^2*e^5*h1^2*h2^7*h3^7 +...
2860*B^2*e1^3*h1^7*h2^4*h3^7 - 377*B^2*e1^5*h1^7*h2^2*h3^7 + 2860*B^2*e2^3*h1^7*h2^7*h3^4 - 377*B^2*e2^5*h1^7*h2^7*h3^2 +...
162*A*B*e^7*e1^7*e2^7 - 6*A*B*e^7*h2^7*h3^7 - 6*A*B*e1^7*h1^7*h3^7 - 6*A*B*e2^7*h1^7*h2^7 + 1944*A^2*e*h1^6*h2^7*h3^7 + ...
1944*A^2*e1*h1^7*h2^6*h3^7 + 1944*A^2*e2*h1^7*h2^7*h3^6 - 5400*B^2*e*h1^6*h2^7*h3^7 - 5400*B^2*e1*h1^7*h2^6*h3^7 -...
245*B^2*e^6*e1^7*e2^4*h1*h3^3 + 147*B^2*e^7*e1*e2^3*h2^6*h3^4 + 48*B^2*e^7*e1*e2^5*h2^6*h3^2 - 60*B^2*e^7*e1^2*e2^6*h2^5*h3 + ...
147*B^2*e^7*e1^3*e2*h2^4*h3^6 - 245*B^2*e^7*e1^4*e2^6*h2^3*h3 + 48*B^2*e^7*e1^5*e2*h2^2*h3^6 - 60*B^2*e^7*e1^6*e2^2*h2*h3^5 -...
where e , e1, e2, h1, h2, h3, A, B are the symbolic variables.

回答(1 个)

Star Strider
Star Strider 2024-6-4
The expression is apparently incomplete.
Working with what is provided —
syms e e1 e2 h1 h2 h3 A B
U = 108*A^2*e^7*e1^3*e2^7*h2^4 + 153*A^2*e^7*e1^5*e2^7*h2^2 + 108*A^2*e^7*e1^7*e2^3*h3^4 + 153*A^2*e^7*e1^7*e2^5*h3^2 +...
24*B^2*e^3*e1^7*e2^7*h1^4 + 95*B^2*e^5*e1^7*e2^7*h1^2 + 24*B^2*e^7*e1^3*e2^7*h2^4 + 95*B^2*e^7*e1^5*e2^7*h2^2 + ...
24*B^2*e^7*e1^7*e2^3*h3^4 + 95*B^2*e^7*e1^7*e2^5*h3^2 + 9*A^2*e^2*e1^7*h1^5*h3^7 + 9*A^2*e^2*e2^7*h1^5*h2^7 +...
9*A^2*e1^2*e2^7*h1^7*h2^5 + 9*A^2*e^7*e1^2*h2^5*h3^7 + 9*A^2*e^7*e2^2*h2^7*h3^5 + 9*A^2*e1^7*e2^2*h1^7*h3^5 -...
41*B^2*e^2*e1^7*h1^5*h3^7 - 41*B^2*e^2*e2^7*h1^5*h2^7 - 12*B^2*e^4*e1^7*h1^3*h3^7 - 12*B^2*e^4*e2^7*h1^3*h2^7 -....
41*B^2*e1^2*e2^7*h1^7*h2^5 - 12*B^2*e1^4*e2^7*h1^7*h2^3 - 41*B^2*e^7*e1^2*h2^5*h3^7 - 12*B^2*e^7*e1^4*h2^3*h3^7 - ...
41*B^2*e^7*e2^2*h2^7*h3^5 - 12*B^2*e^7*e2^4*h2^7*h3^3 - 41*B^2*e1^7*e2^2*h1^7*h3^5 - 12*B^2*e1^7*e2^4*h1^7*h3^3 -...
504*A^2*e^3*h1^4*h2^7*h3^7 + 9*A^2*e^5*h1^2*h2^7*h3^7 - 504*A^2*e1^3*h1^7*h2^4*h3^7 + 9*A^2*e1^5*h1^7*h2^2*h3^7 -...
504*A^2*e2^3*h1^7*h2^7*h3^4 + 9*A^2*e2^5*h1^7*h2^7*h3^2 + 2860*B^2*e^3*h1^4*h2^7*h3^7 - 377*B^2*e^5*h1^2*h2^7*h3^7 +...
2860*B^2*e1^3*h1^7*h2^4*h3^7 - 377*B^2*e1^5*h1^7*h2^2*h3^7 + 2860*B^2*e2^3*h1^7*h2^7*h3^4 - 377*B^2*e2^5*h1^7*h2^7*h3^2 +...
162*A*B*e^7*e1^7*e2^7 - 6*A*B*e^7*h2^7*h3^7 - 6*A*B*e1^7*h1^7*h3^7 - 6*A*B*e2^7*h1^7*h2^7 + 1944*A^2*e*h1^6*h2^7*h3^7 + ...
1944*A^2*e1*h1^7*h2^6*h3^7 + 1944*A^2*e2*h1^7*h2^7*h3^6 - 5400*B^2*e*h1^6*h2^7*h3^7 - 5400*B^2*e1*h1^7*h2^6*h3^7 -...
245*B^2*e^6*e1^7*e2^4*h1*h3^3 + 147*B^2*e^7*e1*e2^3*h2^6*h3^4 + 48*B^2*e^7*e1*e2^5*h2^6*h3^2 - 60*B^2*e^7*e1^2*e2^6*h2^5*h3 + ...
147*B^2*e^7*e1^3*e2*h2^4*h3^6 - 245*B^2*e^7*e1^4*e2^6*h2^3*h3 + 48*B^2*e^7*e1^5*e2*h2^2*h3^6 - 60*B^2*e^7*e1^6*e2^2*h2*h3^5
U = 
U = simplify(U, 1000) % It May Not Simplify Further
U = 
Ukids = children(U) % Return Sub-Expressions
Ukids = 1x57 cell array
Columns 1 through 7 {[108*A^2*e^7*e1...]} {[153*A^2*e^7*e1...]} {[108*A^2*e^7*e1...]} {[153*A^2*e^7*e1...]} {[24*B^2*e^3*e1^...]} {[95*B^2*e^5*e1^...]} {[24*B^2*e^7*e1^...]} Columns 8 through 14 {[95*B^2*e^7*e1^...]} {[24*B^2*e^7*e1^...]} {[95*B^2*e^7*e1^...]} {[9*A^2*e^2*e1^7...]} {[9*A^2*e^2*e2^7...]} {[9*A^2*e1^2*e2^...]} {[9*A^2*e^7*e1^2...]} Columns 15 through 21 {[9*A^2*e^7*e2^2...]} {[9*A^2*e1^7*e2^...]} {[-41*B^2*e^2*e1...]} {[-41*B^2*e^2*e2...]} {[-12*B^2*e^4*e1...]} {[-12*B^2*e^4*e2...]} {[-41*B^2*e1^2*e...]} Columns 22 through 28 {[-12*B^2*e1^4*e...]} {[-41*B^2*e^7*e1...]} {[-12*B^2*e^7*e1...]} {[-41*B^2*e^7*e2...]} {[-12*B^2*e^7*e2...]} {[-41*B^2*e1^7*e...]} {[-12*B^2*e1^7*e...]} Columns 29 through 35 {[-504*A^2*e^3*h...]} {[9*A^2*e^5*h1^2...]} {[-504*A^2*e1^3*...]} {[9*A^2*e1^5*h1^...]} {[-504*A^2*e2^3*...]} {[9*A^2*e2^5*h1^...]} {[2860*B^2*e^3*h...]} Columns 36 through 42 {[-377*B^2*e^5*h...]} {[2860*B^2*e1^3*...]} {[-377*B^2*e1^5*...]} {[2860*B^2*e2^3*...]} {[-377*B^2*e2^5*...]} {[162*A*B*e^7*e1...]} {[-6*A*B*e^7*h2^...]} Columns 43 through 49 {[-6*A*B*e1^7*h1...]} {[-6*A*B*e2^7*h1...]} {[1944*A^2*e*h1^...]} {[1944*A^2*e1*h1...]} {[1944*A^2*e2*h1...]} {[-5400*B^2*e*h1...]} {[-5400*B^2*e1*h...]} Columns 50 through 56 {[-245*B^2*e^6*e...]} {[147*B^2*e^7*e1...]} {[48*B^2*e^7*e1*...]} {[-60*B^2*e^7*e1...]} {[147*B^2*e^7*e1...]} {[-245*B^2*e^7*e...]} {[48*B^2*e^7*e1^...]} Column 57 {[-60*B^2*e^7*e1...]}
% for k1 = 1:numel(Ukids) % Symbolic Version Of The 'unique' Function
% Test = Ukids(k);
% for k2 = k1:numel(Ukids)
% Check(k1) = isAlways(Test == Ukids{k2});
% end
% end
% Check
Using the children function, it returns 57 apparently unique substrings (I did not check all of them with the commented-out loops, since the unique function does not work with symbolic objects).
So that may be the best you can do. As to whether they can be replaced by specific symbolic variables or symbolic fucntions, perhaps yes. I defer to you for that experiment, using the subs function.
.

类别

Help CenterFile Exchange 中查找有关 Symbolic Math Toolbox 的更多信息

产品


版本

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by