- 积分
- 0
- 注册时间
- 2008-6-3
- 仿真币
-
- 最后登录
- 1970-1-1
|
我以前用matlab 6.5编的程序,现在用matlab 2008a算,出现问题:
Warning: Options LargeScale = 'off' and Algorithm = 'trust-region-reflective' conflict.
Ignoring Algorithm and running active-set method. To run trust-region-reflective, set
LargeScale = 'on'. To run active-set without this warning, use Algorithm = 'active-set'.
> In fmincon at 395
程序如下:
options=optimset('LargeScale','off','display','off');
[x,fval]=fmincon(@myfun,x0,[],[],[],[],[],[],@mycon,options);
for i=1:m1
for j=1:m2
xd(i,j)=x((i-1)*m2+j);
end
end
%%%%%%%%%%防止调整的微小位移过大的限制程序
for i=1:m1
if sum(xd(i,:).^2)>1e-8 %既要求微小位移不能大于0.1mm
disp('调整的微小距离大于0.1mm,不对')
end
end
%%%%%%%%%%%%%%%
xd;X;
Jdxyz=X+xd; %满足各项条件的节点坐标
%X=Jdxyz;x=zeros(m1,m2);
%for i=1:m1-1; if m2==3
% ceq(i)=((X(i+1,1)+x(i*m2+1))-(X(i,1)+x((i-1)*m2+1)))^2+...
% ((X(i+1,2)+x(i*m2+2))-(X(i,2)+x((i-1)*m2+2)))^2+...
% ((X(i+1,3)+x(i*m2+3))-(X(i,3)+x((i-1)*m2+3)))^2;ceqj(i)=sqrt(ceq(i));
%end;end; ceqj;
return
function f=myfun(x)
f=sum(x.^2);
return
function [c,ceq]=mycon(x)
%----------从平台引入数据
X=evalin('base','Xz');
m1=evalin('base','m1z');
m2=evalin('base','m2z');
lx=evalin('base','lxz');
%----------节点限制条件的数学表示
for i=1:m1-1
if m2==3
ceq(i)=((X(i+1,1)+x(i*m2+1))-(X(i,1)+x((i-1)*m2+1)))^2+...
((X(i+1,2)+x(i*m2+2))-(X(i,2)+x((i-1)*m2+2)))^2+...
((X(i+1,3)+x(i*m2+3))-(X(i,3)+x((i-1)*m2+3)))^2-lx^2;
end
end
ceq;
%c=[];
for i=1:m1
c(i)=(X(i,1)+x((i-1)*m2+1)).^2+(X(i,2)+x((i-1)*m2+2)).^2-8.2e-7; %要求节点与轴线间距离小于管径1mm
end
请高手指点一下,谢谢 |
|