西南交大杨凯老师MATLAB设计(95分) 联系客服

发布时间 : 星期四 文章西南交大杨凯老师MATLAB设计(95分)更新完毕开始阅读bfb0b30290c69ec3d5bb7511

若直接插值,返回错误:The values of X should be distinct. 处理方法:

需要插值的点仅在A、B两点,只需在此范围内插值即可 插值方法采用默认线性插值方法

<第二步>:利用最大值函数求出O点坐标,线性插值分别求出A、B两点坐标,求得O、A两点的垂直高度差和O、B两点的水平距离 程序源代码:

clear; %清除工作空间中的变量

load F:\\MATLAB课程设计\\angle %将数据文件装载入angle一维数组 a1=1:3990;a2=1:3990; %生成数组a1 a2,分别存放两组角度数据 for i=1:3990 %循环赋值 a1(i)=angle(i);

a2(i)=angle(i+3990); end

L1=60;L2=72; r=8.5;

x1=0;y1=0;

x3=x1-L1*sin(a1*pi/180)-L2*sin((a1+a2)*pi/180); y3=y1-L1*cos(a1*pi/180)-L2*cos((a1+a2)*pi/180); plot(x3,y3,'r'); %绘制出滚轮轴心径迹(未减去滚轮半径) hold on;

X3=2:3990;Y3=2:3990; %生成数组用于储存实际轮廓线曲线 dy=1:3990;dx=1:3990;p=1:3990;q=1:3990; dy=diff(y3); dx=diff(x3); p=atan(dy/dx); q=p*pi/180;

X3=x3(2:3990)-r*sin(q); Y3=y3(2:3990)-r*cos(q);

5

plot(X3,Y3,'b'); %绘制实际轮廓线曲线 [yo,i]=max(Y3); %求Y3中的最大值yo和其位置i %splinetool(x3,y3); %调出插值窗口对话框,选择插值方法 xo=X3(i); %求处O点坐标 plot(xo,yo,'*r'); xa=xo+54;

xinterp=X3(1980:3989); %给定插值区间的数据 yinterp=Y3(1980:3989); %给定插值区间的数据 ya=interp1(xinterp,yinterp,xa);%xa处插入值的ya值,求出A点坐标 plot(xa,ya,'*g');

h=yo-ya; %A O 两点的垂直距离 yb=ya+12; %B点纵坐标 xinterp=X3(1500:1800); %给定插值区间的数据 yinterp=Y3(1500:1800); %给定插值区间的数据 xb=interp1(yinterp,xinterp,yb);%yb处插入值的xb值,求出B点坐标 plot(xb,yb,'*g');

s=abs(xo-xb); %B O两点的水平距离 grid on;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%添加图形说明title('MATLAB课程设计'); xlabel('X轴'); ylabel('Y轴');

text(xo,yo,'\\leftarrow O点'); text(xa,ya,'\\leftarrow A点'); text(xb,yb,'\\leftarrow B点');

legend('滚轮轴心径迹','实际轮廓曲线'); gtext('导数处理前','FontSize',9); gtext('导数处理后','FontSize',9); hold off;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% display(h) display(s) 运行结果:

6

踏面外形的实际轮廓线(如上)

实际轮廓线上,距最高点O(x方向54mm距离处A)两点垂直高度差h=26.5679(mm) 实际轮廓线上,比A点高12mm曲线上的B点与O点的x方向距离s=20.9593(mm)

<第三步>:验证A、B两点在实际轮廓线上可插值区域上所处的位置 程序源代码:

7

clear;%清除工作空间

load F:\\MATLAB课程设计\\angle%将此数据文件装载入angle一维数组中 a1=1:3990;a2=1:3990;%生成两个数组,分别存放两组角度数据 for i=1:3990%循环赋值 a1(i)=angle(i);

a2(i)=angle(i+3990); end

L1=60;L2=72; r=8.5;

x1=0;y1=0;%单位为mm

x3=x1-L1*sin(a1*pi/180)-L2*sin((a1+a2)*pi/180); y3=y1-L1*cos(a1*pi/180)-L2*cos((a1+a2)*pi/180); plot(x3,y3,'r')%绘制出滚轮轴心径迹(未减去滚轮半径) hold on;

X3=2:3990;Y3=2:3990;%-12.4184生成数组用于储存实际轮廓线曲线 dy=1:3990;dx=1:3990;p=1:3990;q=1:3990; dy=diff(y3); dx=diff(x3); p=atan(dy/dx); q=p*pi/180;

X3=x3(2:3990)-r*sin(q); Y3=y3(2:3990)-r*cos(q);

plot(X3,Y3,'b');%绘制实际轮廓线

%splinetool(x3,y3);%调出插值窗口对话框 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%

i=X3(2:622);%第一段插值 j=Y3(2:622);

X=linspace(-80,60,10000); Y=interp1(i,j,X,'linear'); plot(X,Y,'.k');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%

i=X3(631:853);%第二段插值 j=Y3(631:853);

X=linspace(-50,60,10000); Y=interp1(i,j,X,'linear'); plot(X,Y,'.y');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%

i=X3(855:1400);%第三段插值 j=Y3(855:1400);

X=linspace(-50,60,10000); Y=interp1(i,j,X,'linear');

8