当前位置:首页 > 西南交大杨凯老师MATLAB设计(95分)
若直接插值,返回错误: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
共分享92篇相关文档