Elliott 发表于 2008-7-21 15:53

请大家帮我看看这段优化程序的错误

下面是写的对汽车转向梯形结构参数进行优化的程序,用到了优化工具箱。写好后总有错误,小弟我改了许多方面还是改不对,希望高手们能帮帮忙!程序如下:
第一部分,名为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=; %定义上、下边界约束条件和允差
ub=;
x0=;
options=optimset('TolFun',1e-10,'TolCon',1e-6);
=lsqnonlin(@fun,x0,lb,ub,options);   %调用lsqnonlin函数求解

现在任务很急,希望大家能帮帮我。先谢谢大家了!

sigma665 发表于 2008-7-21 16:48

回复 楼主 的帖子

有什么样的错误

Elliott 发表于 2008-7-21 23:38

回复 2楼 的帖子

说fun.m里的输入变量未定义:??? Input argument "x" is undefined.
目前是这个。可是他是函数的自变量啊

sigma665 发表于 2008-7-21 23:42

x(1)x(2)换掉

messenger 发表于 2008-7-21 23:44

fun.m第9行中的
beta=x2+theta3(i)-pi;

x2是什么?是不是应该是x(2)呀?

Elliott 发表于 2008-7-22 20:30

回复 5楼 的帖子

对的,是x(2),打错了,不好意思

Elliott 发表于 2008-7-22 20:32

回复 4楼 的帖子

请问怎么换?x本身是一个向量,即x=
页: [1]
查看完整版本: 请大家帮我看看这段优化程序的错误