matlab优化,目标函数,优化函数,fmincon,求大神指导一二
functionf=fun(x)f=0;globalKML;fort=1*pi/180:1*pi/180:28*pi/180%x(1)是梯形臂长度;x(2)是横拉杆长度;...
function f=fun(x)
f=0;
global K M L;
for t=1*pi/180:1*pi/180:28*pi/180%x(1)是梯形臂长度 ;x(2)是横拉杆长度;x(3)是安装距离;x(4)是梯形底角
K=1274;M=624;L=2340;
if t<=10*pi/180
w0=1.5;
end
if t<=20*pi/180
w0=1;
else
w0=0.5;
end
x(2)=sqrt((K-M)/2-x(1).*cos(x(4))^2+(x(1).*sin(x(4)-x(3)))^2);
s=(K-M)/2-x(1)*cos(x(4)+t)-sqrt(x(2)^2-(x(1)*sin(x(4)+t)-x(3))^2);
sti=x(4)-acos((x(1)^2+((K-M)/2+s)^2+x(3)^2-x(2)^2)/(2*x(1)*sqrt(((K-M)/2+s)^2+x(3)^2)))-atan(2*x(3)/(K-M+2*s));
stit=acot(cot(t)-K/L);
f=w0*(sti-stit);
end
function[c,ceq]=mycon(x)
c=[x(1)-((K-M)/2-x(1)*cos(x(4)))*sin(10*pi/180)-x(3);(x(3)*sin(x(4)-28*pi/180)+((K-M)/2-x(1)*cos(x(4)))*sin(10*pi/180));42.12/cos(x(4))-x(1);x(1)-62.3/(cos(x(4))-cos(x(4)+28*pi/180));];
ceq=[acos(42.12/x(1))-x(4)];
>> x0=[128,276.54,113,98*pi/180];
lb=[111.8752,100,79,68*pi/180];
ub=[130.0634,300,150,100*pi/180];
[x,fval]=fmincon(@fun,x0,[],[],[],[],lb,ub,@mycon);
错误使用 feval
未定义与 'double' 类型的输入参数相对应的函数 'fun'。
出错 fmincon (line 564)
initVals.f = feval(funfcn{3},X,varargin{:});
原因:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue. 展开
f=0;
global K M L;
for t=1*pi/180:1*pi/180:28*pi/180%x(1)是梯形臂长度 ;x(2)是横拉杆长度;x(3)是安装距离;x(4)是梯形底角
K=1274;M=624;L=2340;
if t<=10*pi/180
w0=1.5;
end
if t<=20*pi/180
w0=1;
else
w0=0.5;
end
x(2)=sqrt((K-M)/2-x(1).*cos(x(4))^2+(x(1).*sin(x(4)-x(3)))^2);
s=(K-M)/2-x(1)*cos(x(4)+t)-sqrt(x(2)^2-(x(1)*sin(x(4)+t)-x(3))^2);
sti=x(4)-acos((x(1)^2+((K-M)/2+s)^2+x(3)^2-x(2)^2)/(2*x(1)*sqrt(((K-M)/2+s)^2+x(3)^2)))-atan(2*x(3)/(K-M+2*s));
stit=acot(cot(t)-K/L);
f=w0*(sti-stit);
end
function[c,ceq]=mycon(x)
c=[x(1)-((K-M)/2-x(1)*cos(x(4)))*sin(10*pi/180)-x(3);(x(3)*sin(x(4)-28*pi/180)+((K-M)/2-x(1)*cos(x(4)))*sin(10*pi/180));42.12/cos(x(4))-x(1);x(1)-62.3/(cos(x(4))-cos(x(4)+28*pi/180));];
ceq=[acos(42.12/x(1))-x(4)];
>> x0=[128,276.54,113,98*pi/180];
lb=[111.8752,100,79,68*pi/180];
ub=[130.0634,300,150,100*pi/180];
[x,fval]=fmincon(@fun,x0,[],[],[],[],lb,ub,@mycon);
错误使用 feval
未定义与 'double' 类型的输入参数相对应的函数 'fun'。
出错 fmincon (line 564)
initVals.f = feval(funfcn{3},X,varargin{:});
原因:
Failure in initial user-supplied objective function evaluation. FMINCON cannot continue. 展开
1个回答
展开全部
因为 f 是一个凸函数,函数的极小值发生在 f 对 x(1) 和 x(2) 的偏导为 0 的地方,或者在约束条件的边界上。本题的主函数的点为 x(1)=2, x(2)=3, 在约束条件以外,所以,最小值发生在离这个点最近的约束条件边界上,即 x(1)=3, x(2)=4,其对应的最小值为 28。 用Matlab的fmincon的话, X=fmincon(inline(' (x(1)-2)^2 + (x(2)-3)^2 +26 '), [1; 1], [], [], [], [], [3; 4 ], [6;7]) 得 X = 3 4
追问
???
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询