getting symbolic vector when using coeffs function to extract some coeffs
조회 수: 2 (최근 30일)
이전 댓글 표시
Hello everyone,
Hore you are doing well.
I am using the symbolic toolbox in MATLAB R2021a. I am interested in the coefficient which multiplies a certain variable.
In order to extract that coefficient, i am using the function coeffs which returns a vector containing the coefficients from lower degree to the highest. The returned vector is 1x2. When i want the second term in the vector, it replaces the variiable with 2.
syms M Rot_mat Inertia_principal_spar Ixx_spar Iyy_spar q_su(t) q_sw(t) q_he(t) q_ro(t) q_pi(t) q_d_su(t) q_d_sw(t) q_d_he(t) q_d_ro(t) q_d_pi(t) q_dd_su(t) q_dd_sw(t) q_dd_he(t) q_dd_ro(t) q_dd_pi(t) spar_mass
Rot_mat=[cos(q_pi) sin(q_pi)*sin(q_ro) sin(q_pi)*cos(q_ro);cos(q_pi) cos(q_ro) -sin(q_ro); -sin(q_pi) cos(q_pi)*sin(q_ro) cos(q_pi)*cos(q_ro)];
Inertia_principal_spar=[Ixx_spar 0 0;Iyy_spar 0 0;0 0 0];
Inertia_global_spar=Rot_mat*Inertia_principal_spar*Rot_mat^(-1);
Rot_velocity=[q_d_ro(t);q_d_pi(t);0];
Ec_spar_trans= 0.5*spar_mass*(q_d_su^2 + q_d_sw^2 + q_d_he^2);
Ec_spar_rot= 0.5*Rot_velocity.'*Inertia_global_spar*Rot_velocity;
Ec_spar=Ec_spar_trans+Ec_spar_rot;
Ec_spar_surge=diff(Ec_spar,q_d_su);
Ec_spar_sway=diff(Ec_spar,q_d_sw);
Ec_spar_heave=diff(Ec_spar,q_d_he);
Ec_spar_roll=diff(Ec_spar,q_d_ro);
Ec_spar_pitch=diff(Ec_spar,q_d_pi);
Ec_spar_d_surge=diff(Ec_spar_surge,t);
Ec_spar_d_sway=diff(Ec_spar_sway,t);
Ec_spar_d_heave=diff(Ec_spar_heave,t);
Ec_spar_d_roll=diff(Ec_spar_roll,t);
Ec_spar_d_pitch=diff(Ec_spar_pitch,t);
%%% substitution of the variables
Ec_spar_d_surge=subs(Ec_spar_d_surge,[diff(q_su,t),diff(q_sw,t),diff(q_he,t),diff(q_ro,t),diff(q_pi,t),diff(q_d_su,t),diff(q_d_sw,t),diff(q_d_he,t),diff(q_d_ro,t),diff(q_d_pi,t)],[q_d_su,q_d_sw,q_d_he,q_d_ro,q_d_pi,q_dd_su,q_dd_sw,q_dd_he,q_dd_ro,q_dd_pi]);
Ec_spar_d_sway=subs(Ec_spar_d_sway,[diff(q_su,t),diff(q_sw,t),diff(q_he,t),diff(q_ro,t),diff(q_pi,t),diff(q_d_su,t),diff(q_d_sw,t),diff(q_d_he,t),diff(q_d_ro,t),diff(q_d_pi,t)],[q_d_su,q_d_sw,q_d_he,q_d_ro,q_d_pi,q_dd_su,q_dd_sw,q_dd_he,q_dd_ro,q_dd_pi]);
Ec_spar_d_heave=subs(Ec_spar_d_heave,[diff(q_su,t),diff(q_sw,t),diff(q_he,t),diff(q_ro,t),diff(q_pi,t),diff(q_d_su,t),diff(q_d_sw,t),diff(q_d_he,t),diff(q_d_ro,t),diff(q_d_pi,t)],[q_d_su,q_d_sw,q_d_he,q_d_ro,q_d_pi,q_dd_su,q_dd_sw,q_dd_he,q_dd_ro,q_dd_pi]);
Ec_spar_d_roll=subs(Ec_spar_d_roll,[diff(q_su,t),diff(q_sw,t),diff(q_he,t),diff(q_ro,t),diff(q_pi,t),diff(q_d_su,t),diff(q_d_sw,t),diff(q_d_he,t),diff(q_d_ro,t),diff(q_d_pi,t)],[q_d_su,q_d_sw,q_d_he,q_d_ro,q_d_pi,q_dd_su,q_dd_sw,q_dd_he,q_dd_ro,q_dd_pi]);
Ec_spar_d_pitch=subs(Ec_spar_d_pitch,[diff(q_su,t),diff(q_sw,t),diff(q_he,t),diff(q_ro,t),diff(q_pi,t),diff(q_d_su,t),diff(q_d_sw,t),diff(q_d_he,t),diff(q_d_ro,t),diff(q_d_pi,t)],[q_d_su,q_d_sw,q_d_he,q_d_ro,q_d_pi,q_dd_su,q_dd_sw,q_dd_he,q_dd_ro,q_dd_pi]);
%%% mass matrix
M(1,1)=coeffs(Ec_spar_d_surge,q_dd_su);
M(1,2)=coeffs(Ec_spar_d_surge,q_dd_sw);
M(1,3)=coeffs(Ec_spar_d_surge,q_dd_he);
M(1,4)=coeffs(Ec_spar_d_surge,q_dd_ro);
M(1,5)=coeffs(Ec_spar_d_surge,q_dd_pi);
M(2,1)=coeffs(Ec_spar_d_sway,q_dd_su);
M(2,2)=coeffs(Ec_spar_d_sway,q_dd_sw);
M(2,3)=coeffs(Ec_spar_d_sway,q_dd_he);
M(2,4)=coeffs(Ec_spar_d_sway,q_dd_ro);
M(2,5)=coeffs(Ec_spar_d_sway,q_dd_pi);
M(3,1)=coeffs(Ec_spar_d_heave,q_dd_su);
M(3,2)=coeffs(Ec_spar_d_heave,q_dd_sw);
M(3,3)=coeffs(Ec_spar_d_heave,q_dd_he);
M(3,4)=coeffs(Ec_spar_d_heave,q_dd_ro);
M(3,5)=coeffs(Ec_spar_d_heave,q_dd_pi);
M(4,1)=coeffs(Ec_spar_d_roll,q_dd_su);
M(4,2)=coeffs(Ec_spar_d_roll,q_dd_sw);
M(4,3)=coeffs(Ec_spar_d_roll,q_dd_he);
% c_roll=zeros(1,2);
c_roll
% M(4,4)=c_roll(2);
M(4,5)=coeffs(Ec_spar_d_roll,q_dd_pi);
M(5,1)=coeffs(Ec_spar_d_pitch,q_dd_su);
M(5,2)=coeffs(Ec_spar_d_pitch,q_dd_sw);
M(5,3)=coeffs(Ec_spar_d_pitch,q_dd_he);
M(5,4)=coeffs(Ec_spar_d_pitch,q_dd_ro);
M(5,5)=coeffs(Ec_spar_d_pitch,q_dd_pi);
Could anyone help please ?
Best Regards,
댓글 수: 2
John D'Errico
2023년 5월 6일
Posting a picture of text is silly, in that it makes it impossible to just copy the text, and show you how to fix it. And since you can paste in text directly...
Is there a good reason why you want to make it more difficult to get help for your problem?
답변 (0개)
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!