# simplify and reorganize symbolic expression

44 visualizzazioni (ultimi 30 giorni)
LUCA D'AMBROSIO il 16 Lug 2024 alle 16:50
Commentato: Torsten il 17 Lug 2024 alle 17:05
Hello everyone,
I am trying to simplify a symbolic expression (which is the result of the script below) but i am having trouble as it is pretty big and there are many parameters. My objective is to reorganize the expression "B" as powers of variables "c1" and "c2" with all the other parameters included in the coefficents of the polynomial expression (they are gonna be substitued by values in other calculations). I have tried with "simplify" and triyng to nest "collect" into one another.
Does anybody have any tips on how to make the process more efficient? Are there any functions, which I am not aware of right now, that can simplify polynomial expression with regards to the coefficients that multiply the different powers? how about with multivariable expressioon as is my case?
also, is there a way to make math expressions with powers, parentesis, fractions, etc. more readable in the command window? now i have the standard formatting setting of matlab which makes long expressions pretty hard to read
Thank you very much
clear; clc;
syms m J a1 a2
syms k1 k2 k_a12 k_a21
syms c1 c2 c_a12 c_a21
syms lambda
% matrices definitions
M = [m 0;
0 J];
K = [k1 + k2 + (k_a12+k_a21) k1*a1 - k2*a2 + (k_a21*a1 - k_a12*a2);
k1*a1 - k2*a2 + (k_a12*a1-k_a21*a2) k1*a1^2 + k2*a2^2 - (k_a12+k_a21)*a1*a2];
C = [c1 + c2 + (c_a12+c_a21) c1*a1 - c2*a2 + (c_a21*a1 - c_a12*a2);
c1*a1 - c2*a2 + (c_a12*a1-c_a21*a2) c1*a1^2 + c2*a2^2 - (c_a12+c_a21)*a1*a2];
det_M = det(M);
det_K = simplify(collect(collect(collect(collect(det(K), 2*a1), a2), a1^2), a2^2));
det_C = simplify(collect(collect(collect(collect(det(C), 2*a1), a2), a1^2), a2^2));
Mat = (lambda^2)*M + lambda*C + K;
determinant = collect(det(Mat), lambda);
coeff = coeffs(determinant, lambda);
b0 = simplify(collect(collect(collect(collect(coeff(1), k_a12), k_a21), k2), k1))
b1 = simplify(collect(collect(collect(collect(coeff(2), 2*a1), a2), a1^2), a2^2))
b2 = simplify(collect(collect(collect(collect(collect(collect(coeff(3), m), J), c1), c2), c_a12), c_a21))
b3 = simplify(collect(collect(collect(collect(collect(collect(coeff(4), a1^2), a2^2), a1), a2), m), J))
B = b1*b2*b3 - b1^2 - b0*b3^2;
B = expand(B);
B = simplify(collect(B, c1))
this is B that i get:
(a1 + a2)^2*(m*(c1*a1^2 + (- c_a12 - c_a21)*a1*a2 + c2*a2^2) + J*(c1 + c2 + c_a12 + c_a21))*(c1*k2 + c2*k1 - c_a12*k_a21 - c_a21*k_a12)*(m*(a1^2*k1 + a2^2*k2 - a1*a2*k_a12 - a1*a2*k_a21) + J*(k1 + k2 + k_a12 + k_a21) + c1*c2*(a1 + a2)^2 - c_a12*c_a21*(a1 + a2)^2) - (a1 + a2)^2*(m*(c1*a1^2 + (- c_a12 - c_a21)*a1*a2 + c2*a2^2) + J*(c1 + c2 + c_a12 + c_a21))^2*(k1*k2 - k_a12*k_a21) - (a1 + a2)^4*(c1*k2 + c2*k1 - c_a12*k_a21 - c_a21*k_a12)^2
##### 0 CommentiMostra -2 commenti meno recentiNascondi -2 commenti meno recenti

Accedi per commentare.

### Risposta accettata

Torsten il 16 Lug 2024 alle 18:11
Modificato: Torsten il 16 Lug 2024 alle 20:31
The only symbolic function that comes to mind is "coeffs". If this function does not do what you want, I fear you are lost here.
This example should help for your case:
syms x y
P = x^4 + 3*x*y^3 + 2*x^2*y^6 + y^4 - 3*x^2*y^2 + y + 1;
cx = coeffs(P,x,'All');
cy = coeffs(P,y,'All');
nx = numel(cx);
ny = numel(cy);
Coefficients = sym(zeros(nx,ny));
for i = 0:nx-1
for j = 0:ny-1
pxiyj = diff(diff(P,x,i),y,j);
c0xiyj = subs(pxiyj,[x y],sym([0 0]));
c0xiyj = c0xiyj/factorial(i)/factorial(j);
Coefficients(i+1,j+1) = c0xiyj;
end
end
Coefficients
Coefficients =
##### 2 CommentiMostra NessunoNascondi Nessuno
LUCA D'AMBROSIO il 17 Lug 2024 alle 10:43
thank you, i will try with coeff, and work and try to symplify every coefficient alone
Torsten il 17 Lug 2024 alle 17:05
As you might have noticed, in the above code Coefficients(i,j) is the coefficient of P related to the power x^(i-1)*y^(j-1) . It should be easy to apply the code to your polynomial B depending on c1 and c2.

Accedi per commentare.

### Categorie

Scopri di più su Conversion Between Symbolic and Numeric in Help Center e File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by