- 积分
- 0
- 注册时间
- 2011-12-6
- 仿真币
-
- 最后登录
- 1970-1-1
|
程序如下:
function f=fun(x)
global K L thetamax alpha
K=1480;
L=2960;
thetamax=45;
x0(1)=input( '输入初始点的第1个分量(臂长、mm)'); %输入180
x0(2)=input('输入初始点的第2个分量(底角、度)'); %输入75
alpha=linspace(0,thetamax,61); %将转角划分为60等分间隔
thetamax=thetamax*pi/180; %转换为弧度单
x0(2)=x0(2)*pi/180;
lb(1)=0.11*K;lb(2)=acot(K/(1.2*L));
ub(1)=0.17*K;
ub(2)=pi/2;
lb=[lb(1);lb(2)]; %定义上、下边界约束条件和允差
ub=[ub(1);ub(2)];
x0=[x0(1);x0(2)];
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)));
theta3(i)=2*acot((A(i)+sqrt(A(i).^2+B(i).^2-C(i).^2))/B(i)+C(i));
beta(i)=x(2)+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
options=optimset('TolFun',1e-10 ,'TolCon',1e-6);
[x,resnorm]=lsqnonlin('fun',x0,lb,ub,options); %调用lsqnonlin函数求解。
出现错误: Input argument "x" is undefined.
Error in ==> fun at 20
A(i)=2*x(1).^2*sin(x(2)+alpha(i)); %计算实际转角
是什么原因,麻烦高手看一下
|
|