MATLAB程序:已知三个位置设计平面四杆机构求解程序(位移矩阵法)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

%MATLAB程序:已知三个位置设计平面四杆机构求解程序(位移矩阵法)

clear;clc;

%凡是变量名前带v的为数值变量,不带的是符号变量

vxp1=0; vyp1=0; vsita1=0*pi/180;

vxp2=-2; vyp2=6; vsita2=40*pi/180;

vxp3=-10; vyp3=8; vsita3=90*pi/180; %精确位置P1,P2,P3及各角度

vsita12=vsita2-vsita1;

vsita13=vsita3-vsita1;

vxa=-10; vya=-2;

vxd=-5; vyd=-2; %选定A,D点

%所有数值均在此确定,更改此处即可解出不同数值的四杆机构位移矩阵方程

syms xp1 yp1 xp2 yp2 xp3 yp3 sita12 sita13;

syms xa ya xb1 yb1 xb2 yb2 xb3 yb3;

f1='(xb2-xa)^2+(yb2-ya)^2=(xb1-xa)^2+(yb1-ya)^2';

f2='(xb3-xa)^2+(yb3-ya)^2=(xb1-xa)^2+(yb1-ya)^2'; %前两个机构方程

f3='xb2=cos(sita12)*xb1-sin(sita12)*yb1+xp2-xp1*cos(sita12)+yp1*sin(sita12)';

f4='yb2=sin(sita12)*xb1+cos(sita12)*yb1+yp2-xp1*sin(sita12)-yp1*cos(sita12)'; %由第一个位移矩阵方程得出

f5='xb3=cos(sita13)*xb1-sin(sita13)*yb1+xp3-xp1*cos(sita13)+yp1*sin(sita13)';

f6='yb3=sin(sita13)*xb1+cos(sita13)*yb1+yp3-xp1*sin(sita13)-yp1*cos(sita13)'; %由第二个位移矩阵方程得出

f1=subs(f1,{xa,ya},{vxa,vya});

f2=subs(f2,{xa,ya},{vxa,vya});

f3=subs(f3,{xp1,xp2,yp1,sita12},{vxp1,vxp2,vyp1,vsita12});

f4=subs(f4,{xp1,yp1,yp2,sita12},{vxp1,vyp1,vyp2,vsita12});

f5=subs(f5,{xp1,xp3,yp1,sita13},{vxp1,vxp3,vyp1,vsita13});

f6=subs(f6,{xp1,yp1,yp3,sita13},{vxp1,vyp1,vyp3,vsita13}); %代入具体数值

[xb1,xb2,xb3,yb1,yb2,yb3]=solve(f1,f2,f3,f4,f5,f6); %解方程

vxb1=vpa(xb1);

vyb1=vpa(yb1);

vxb2=vpa(xb2);

vyb2=vpa(yb2);

vxb3=vpa(xb3);

vyb3=vpa(yb3);

(vxb1-vxa)^2+(vyb1-vya)^2;

(vxb2-vxa)^2+(vyb2-vya)^2;

(vxb3-vxa)^2+(vyb3-vya)^2; %去掉这三行分号可验证B点三个位置是否距离A点相等

syms xd yd xc1 yc1 xc2 yc2 xc3 yc3;

f7='(xc2-xd)^2+(yc2-yd)^2=(xc1-xd)^2+(yc1-yd)^2';

f8='(xc3-xd)^2+(yc3-yd)^2=(xc1-xd)^2+(yc1-yd)^2'; %前两个机构方程

f9='xc2=cos(sita12)*xc1-sin(sita12)*yc1+xp2-xp1*cos(sita12)+yp1*sin(sita12)';

f10='yc2=sin(sita12)*xc1+cos(sita12)*yc1+yp2-xp1*sin(sita12)-yp1*cos(sita12)'; %由第一个位移矩阵方程得出

f11='xc3=cos(sita13)*xc1-sin(sita13)*yc1+xp3-xp1*cos(sita13)+yp1*sin(sita13)';

f12='yc3=sin(sita13)*xc1+cos(sita13)*yc1+yp3-xp1*sin(sita13)-yp1*cos(sita13)'; %由第二个位移矩阵方程得出

f7=subs(f7,{xd,yd},{vxd,vyd});

f8=subs(f8,{xd,yd},{vxd,vyd});

f9=subs(f9,{xp1,xp2,yp1,sita12},{vxp1,vxp2,vyp1,vsita12});

f10=subs(f10,{xp1,yp1,yp2,sita12},{vxp1,vyp1,vyp2,vsita12});

f11=subs(f11,{xp1,xp3,yp1,sita13},{vxp1,vxp3,vyp1,vsita13});

f12=subs(f12,{xp1,yp1,yp3,sita13},{vxp1,vyp1,vyp3,vsita13}); %代入具体数值

[xc1,xc2,xc3,yc1,yc2,yc3]=solve(f7,f8,f9,f10,f11,f12); %解方程

vxc1=vpa(xc1);

vyc1=vpa(yc1);

vxc2=vpa(xc2);

vyc2=vpa(yc2);

vxc3=vpa(xc3);

vyc3=vpa(yc3);

(vxc1-vxd)^2+(vyc1-vyd)^2;

(vxc2-vxd)^2+(vyc2-vyd)^2;

(vxc3-vxd)^2+(vyc3-vyd)^2; %去掉这三行分号可验证C点三个位置是否距离D点相等

%最终答案

xb1,yb1,xc1,yc1

Lab=sqrt((vxb1-vxa)^2+(vyb1-vya)^2)

Lbc=sqrt((vxb1-vxc1)^2+(vyb1-vyc1)^2)

Lcd=sqrt((vxc1-vxd)^2+(vyc1-vyd)^2)

Lad=sqrt((vxa-vxd)^2+(vya-vyd)^2) %得到四杆长

'曲柄存在条件:'

%得出四杆长后计算得到

'可靠到位条件:'

[vxc1-vxb1,vyc1-vyb1]*[vxc1-vxd,vyc1-vyd]'

[vxc2-vxb2,vyc2-vyb2]*[vxc2-vxd,vyc2-vyd]'

[vxc3-vxb3,vyc3-vyb3]*[vxc3-vxd,vyc3-vyd]'

'顺序到位条件:'

%未完成

相关文档
最新文档