Effacer les filtres
Effacer les filtres

simplify and reorganize symbolic expression

38 vues (au cours des 30 derniers jours)
LUCA D'AMBROSIO
LUCA D'AMBROSIO le 16 Juil 2024 à 16:50
Commenté : Torsten le 17 Juil 2024 à 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

Réponse acceptée

Torsten
Torsten le 16 Juil 2024 à 18:11
Modifié(e) : Torsten le 16 Juil 2024 à 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 commentaires
LUCA D'AMBROSIO
LUCA D'AMBROSIO le 17 Juil 2024 à 10:43
thank you, i will try with coeff, and work and try to symplify every coefficient alone
Torsten
Torsten le 17 Juil 2024 à 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.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by