马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
下面是写的对汽车转向梯形结构参数进行优化的程序,用到了优化工具箱。写好后总有错误,小弟我改了许多方面还是改不对,希望高手们能帮帮忙!程序如下:
第一部分,名为fun.m的M函数,定义了函数fun
function f=fun(x)
for i=1:60
f=0; %函数值初始化
betae=atan(tan(alpha(i))/(1-K/L)*tan(alpha(i))); % 写计算转角期望值
A=2*x(1).^2*sin(x(2)+alpha(i)); %计 算 实 际 转 角
B=2*K*x(1)-2*x(1).^2*cos(x(2)+alpha(i));
C=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)));
theta3=2*acot((A(i)+sqrt(A(i).^2+B(i).^2-C(i).^2))/(B(i)+C(i)));
beta=x2+theta3(i)-pi;
if alpha(i)<=pi/18 %计算目标函数值
f(i)=1.5*abs(beta(i)-betae(i));
elseif alpha(i)<=pi/180
f(i)=abs(beta(i)-betae(i));
else f(i)=0.5*abs(beta(i)-betae(i));
end
end
第二部分,名为untitled.m的M文件,来执行优化
global K L thetamax alpha
K=input('输入两主销中心线间距(单位mm)K='); %提示输人结构参数
L=input('输人轴距(单位mm)L=');
thetamax=input('输人外转向轮最大转角(单位为度)=');
x0(1)=input('输人初始点的第1个分量(臂长、mm)=');
x0(2)=input('输人初始点的第2个分量(底角、度)=');
thetamax=thetamax*pi/180; %转换为弧度单位
x0(2)=x0(2)*pi/180;
lb(1)=0.1*K;
lb(2)=acot(K/(1.2*L));
ub(1)=0.17*K;
ub(2)=pi/2;
alpha=linspace(0,thetamax,60); %将转角划分为60等分间隔
lb=[lb(1);lb(2)]; %定义上、下边界约束条件和允差
ub=[ub(1);ub(2)];
x0=[x0(1);x0(2)];
options=optimset('TolFun',1e-10,'TolCon',1e-6);
[x,resnorm]=lsqnonlin(@fun,x0,lb,ub,options); %调用lsqnonlin函数求解
现在任务很急,希望大家能帮帮我。先谢谢大家了! |