MATLAB 拉格朗日方程 求三自由度机械

一、题目

 二 代码

注意事项:

1. 选哪些作为符号变量:

        syms qk(t)  % 非syms qk  t

2. 如何表示矢量相乘\overrightarrow{F}\cdot \overrightarrow{R_{F}}:   

        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 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_45111955

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值