一、题目
二 代码
注意事项:
1. 选哪些作为符号变量:
syms qk(t) % 非syms qk t
2. 如何表示矢量相乘:
Q=[F].*[R]
Q=fomula(Q)
Q=Q(1)+Q(2)
原代码,包括三个文件:1.主程序 2. sym2latex函数 3. 将变量编程字符串函数
1.主程序:
clc;clear;close all;
% 广义坐标
syms x(t) cita1(t) cita2(t)
% 题干信息
syms k1 k2 kt M m L g f(t)
j=1/12*m*L^2
f_=[-f,0]
rm=[x,0]
r1=[x+L/2*sin(cita1) , L/2*cos(cita1)]
r2=[x+L*sin(cita1)-L/2*sin(cita2) , L*cos(cita1)+L/2*cos(cita2)]
rf=[x+L*sin(cita1)-L*sin(cita2) , 0]
dx=diff(x,t,1)
dcita1=diff(cita1,t,1)
dcita2=diff(cita2,t,1)
drm=diff(rm,t,1)
dr1=diff(r1,t,1)
dr2=diff(r2,t,1)
drf=diff(rf,t,1)
tM=1/2*M*drm.*drm
tM=formula(tM)
tM=tM(1)+tM(2)
tM_l=sym2latex(tM)
tm1=1/2*m*dr1.*dr1
tm1=formula(tm1)
tm1=tm1(1)+tm1(2)+ 1/2*j*dcita1^2
tm1_l=sym2latex(tm1)
tm2=1/2*m*dr2.*dr2
tm2=formula(tm2)
tm2=tm2(1)+tm2(2) + 1/2*j*dcita2^2
tm2_l=sym2latex(tm2)
V = 1/2*k1*x^2 + 1/2*k2*x^2 +1/2*kt*cita1^2+m*g*L/2*(1-cos(cita1)) + m*g*(2*L-L*cos(cita1)-L/2*cos(cita2))
V=simplify(V)
V_l=sym2latex(V)
LG=tM + tm1 +tm2 -V
LG=simplify(LG)
LG_l=sym2latex(LG)
dwnc=f_.*drf
dwnc=formula(dwnc)
dwnc=dwnc(1)+dwnc(2)
dwnc_l=sym2latex(dwnc)
% tm2_x=diff(tm2,x)
% tm2_x_l=sym2latex(tm2_x)
% tm2_dx=diff(tm2,dx)
% tm2_dx_l=sym2latex(tm2_dx)
% tm2_cita1=diff(tm2,cita1)
% tm2_cita1_l=sym2latex(tm2_cita1)
% tm2_dcita1=diff(tm2,dcita1)
% tm2_dcita1_l=sym2latex(tm2_dcita1)
% tm2_cita2=diff(tm2,cita2)
% tm2_cita2_l=sym2latex(tm2_cita2)
% tm2_dcita2=diff(tm2,dcita2)
% tm2_dcita2_l=sym2latex(tm2_dcita2)
%% 拉格朗日法
LG_dx=diff(LG,dx,1)
dLG_dx=diff(LG_dx,t,1)
LG_dcita1=diff(LG,dcita1,1)
dLG_dcita1=diff(LG_dcita1,t,1)
LG_dcita2=diff(LG,dcita2,1)
dLG_dcita2=diff(LG_dcita2,t,1)
LG_x=diff(LG,x,1)
LG_cita1=diff(LG,cita1,1)
LG_cita2=diff(LG,cita2,1)
Q1NC= -f
Q2NC= -f*L*cos(cita1)
Q3NC= f*L*cos(cita2)
% 方程一
eq1=Q1NC==simplify(dLG_dx-LG_x)
eq2=Q2NC==simplify(dLG_dcita1-LG_cita1)
eq3=Q3NC==simplify(dLG_dcita2-LG_cita2)
eq1_l=sym2latex(eq1)
eq2_l=sym2latex(eq2)
eq3_l=sym2latex(eq3)
2. sym2latex函数
% function signal_zuoye1_1
% %% 功率信号的卷积
% clc
% syms t T tau
% syms w positive
% x1(t)=cos(w*t) + cos(2*w*t);
% x2(t)=sin(3*w*t);
% y(t)=2/T*int(x1(tau)*x2(t-tau),tau,-T/2,T/2);
% y_l=latex(y)
% %第一种方法,将y_l复制到mathyype
% %第二种 matlab text到图片上
% figure;
% t1 = text(0, .6, ['$', 'y =', y_l,'$'], 'interpreter', 'latex'); % 注意此处的表达
% %第三种 函数化,参考https://zhuanlan.zhihu.com/p/159137051
% syms2latex(y)
%
% end
%
%
function LaTeX = sym2latex(poly)
%SYM2LATEX 将多项式转化为LaTeX样式输出
LaTeX = latex(poly);
name=inputname(1);
% % 设置图幅并不显示所有无关的菜单栏等
figure;
fig = gcf;
fig.Name = name;
fig.NumberTitle= 'off';
% fig.MenuBar = 'None';
fig.Position = [300, 300, 1100, 300];
fig.Color = 'w';
%
% 不显示轴
ax = gca;
ax.XTick = [];
ax.YTick = [];
ax.XAxis.Visible = 'off';
ax.YAxis.Visible = 'off';
% 添加text函数
t1 = text(0, .6, ['$', name,' =', LaTeX,' $'], 'interpreter', 'latex'); % 注意此处的表达
t1.FontSize = 22;
t1.Color = 'k';
t1.FontWeight = 'Bold';
end
3. 字符串函数
function name=getVarName(x)
%返回输入变量的变量名
name=inputname(1);
end