转向梯形程序文件.doc

时间:2022-12-25 00:15:41
【文件属性】:

文件名称:转向梯形程序文件.doc

文件大小:57KB

文件格式:DOC

更新时间:2022-12-25 00:15:41

文档资料

转向梯形优化计算MATLAB程序 首先将目标函数写成M文件。其程序语句如下: function f=fun(x) global K L thetamax alpha for i=1:61 f=0; %函数值初始化 betae(i)=atan(tan(alpha(i))/(1-(K/L)*tan(alpha(i)))); %计算转角期望值 A(i)=2*x(1).^2*sin(x(2)+alpha(i)); %计算实际转角 B(i)=2*K*x(1)-2*x(1).^2*cos(x(2)+alpha(i)); C(i)=2*x(1).^2-4*x(1).^2*(cos(x(2)).^2+4*K*x(1)*(cos(x(2)))- 2*K*x(1)*(cos(x(2)+alpha(i)))); theta(i)=2*acot((A(i)+sqrt((A(i)).^2+(B(i)).^2- (C(i)).^2))/(B(i)+C(i))); beta(i)=x(2)+theta(i)-pi; %beta(i)=alpha(i); if alpha(i)<=pi/18 %计算目标函数值 f(i)=1.5*abs(beta(i)-betae(i));%% 前五次循环是,betae beta 索引值超维 elseif (alpha(i)<=pi/9)&(alpha(i)>pi/18) f(i)=abs(beta(i)-betae(i)); else f(i)=0.5*abs(beta(i)-betae(i)); end end 然后定义约束条件并调用lsqnonlin函数求优化解。程序语句如下: global K L thetamax alpha K=input('输入两主销中心线间距(单位为mm)K='); %提示输入结构参数 L=input('输入轴距(单位为mm)L='); thetamax=input( '输入外转向轮最大转角(单位为度)'); x(1)=input('梯形臂长(单位为mm)'); x(2)=input('梯形底角(单位为度)'); thetamax=thetamax*pi/180; %转换为弧度单位 x(2)=x(2)*pi/180; lb(1)=0.11.*K; lb(2)=acot(K/(1.2*L)); ub(1)=0.15*K; ub(2)=pi/2; alpha=linspace(0,thetamax,61); %将转角划分为60等分间隔 lb=[lb(1),lb(2)]; %定义上、下边界约束条件和允差 ub=[ub(1),ub(2)]; x0=[x(1),x(2)]; options=optimset('TolFun', 1e-10 ,'TolCon', 1e-6); [x,resnorm,fval,exitflag,output]=lsqnonlin('fun6666',x,lb,ub,options)%调用ls qnonlin函数求解。 求优化解后,可用下列程序语句绘制转角期望值和实际转角在0~之间 的变化曲线,以便分析比较。程序语句如下: global K L thetamax alpha K=input('输入两主销中心线间距(单位mm)K='); %提示输入结构参数 L =input('输入轴距(单位mm)L='); thetamax=input('输入外转向轮最大转角(单位为度)'); x(1)=input('输入优化解的臂长(单位为mm)'); x(2)=input('输入优化解的梯形底角(单位为度)'); thetamax=thetamax*pi/180; %转换为弧度单位 x(2)=x(2)*pi/180; alpha=linspace(0,thetamax,61); %将转角划分为6O等分间隔 for i=1:61 betae(i)=atan(tan(alpha(i))/(1-K/L)*tan(alpha(i))); %计算转角期望值 A(i)=2*(x(1)).^2*sin(x(2)+ alpha(i)); %计算实际转角 B(i)=2*K*x(1)-2*x(1).^2*cos(x(2)+alpha(i)); C(i)=2*(x(1)).^2-4*x(1).^2*(cos(x(2))).^2+4*K*x(1)*cos(x(2))- 2*K*x(1)*cos(x(2)+alpha(i)); theta(i)=2*acot((A(i)+sqrt((A(i)).^2+(B(i)).^2-(C(i)).^2))/(B(i)+C(i))); beta(i)=x(2)+theta(i)-pi; end plot(alpha(i),betae(i),'r+:'); hold on %绘制转角


网友评论