登录论坛

查看完整版本 : [MATLAB基础] 请各位大虾帮忙看看程序,运行不了,谢谢


紫色梦魇
2010-02-03, 16:01
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.17.*K;lb(2)=acot(K/(1.2*L));ub(1)=0.17*K;ub(2)=pi/2;
alpha=linspace(0,thetamax,61);
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);

function f=fun(x)
global K L thetamax alpha
for i=1:61
f=0;
betae=atan(tan(alpha(i)/(1-(K/L)*tan(alpha(i)))));
A(i)=2*x(1).^2*sin(x(1)+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));
theta3=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;
if alpha(i)<=pi/18
f(i)=1.5*abs(beta(k)-betae(k));
elseif alpha(i)<=pi/180;
f(i)=abs(beta(k)-betae(k));
else f(i)=0.5*abs(beta(k)-betae(k));
end
end