fmincon优化问题求助
老师给了个题目,让仿真一个平顶高斯光束。所以小弟写个优化程序思路是在输出的振幅里找一些点,让他们的和最小,但是在输入初值之后却总也得不到最后的优化结果,总是只做了两三次的优化就完了,很是郁闷,所以想请各位帮忙看看:偶把程序附在下面了,望各位帮帮忙~~
主程序:
w0=; %不同的输入总是得到不同的结果,是不是只能得到局部优化呢??
options=optimset('LargeScale','off','Display','iter');
=fmincon('youhuashiyan',w0,[],[],[],[],[],[],'xianzhi',options);
% Hopefully~~~
目标程序:
function f = youhuashiyan(w)
% parameters
N=400;
N1=N/2;
NN=N1+1;
W1=N/20; % half width of Gaussian beam
% 2-D Gaussian beam
xx=1:N;
yy=1:N;
=meshgrid(xx,yy);
G=exp(-((x-NN).^2+(y-NN).^2)/W1^2); % Gaussian shape magnitude
% pi-plane2-zones
P=ones(N,N);
for x1=1:N
for y1=1:N
if (x1-N1)^2+(y1-N1)^2<=w(1)^2
P(x1,y1)=-1;
else if (x1-N1)^2+(y1-N1)^2>=w(2)^2 & (x1-N1)^2+(y1-N1)^2<=w(3)^2
P(x1,y1)=-1;
end
end
end
end
% flat-top via pi-plane
F=G.*P;
%fourier transform
FT=fft2(F);
FT=fftshift(FT);
FT_I=FT.*conj(FT);
FT_In=FT_I/FT_I(N1,N1);
b=0;
for x1=1:N
for y1=1:N
if (x1-N1)^2+(y1-N1)^2<=5^2
b=b+(FT_In(x1,y1)-FT_In(N1,N1))^2;
end
end
end
f=b;
[ 本帖最后由 eight 于 2008-1-22 16:54 编辑 ] fmincon优化函数是寻求初始值附近的极小值,所以跟初始值有很大的关系
回复 #1 tommy_ljy 的帖子
你一定要给初始值吗?不好意思,没时间看你的程序,只是想问一下你是不是一定要给初始值,是不是一定要多变量,是不是一定要在找的点之间有一定的间距啊? 这个……初始值不一定要给定的,只要找到最小值就可以了。因为fmincon这个函数要求给定初始值,所以……找的点之间有没有间距也随便,但是变量肯定是要多得……
拜谢~ 那请问要是不要初值,有什么别的思路能写出这个程序的吗?
谢谢~~
回复 #2 fishlover 的帖子
同意观点。可能只能得到局部解,程序没有问题,应该是函数本身的问题 把"xianzhi"也一并贴出来一下,以便调试. 限制函数:function =xianzhi(w)
c(1)=-w(1);
c(2)=w(1)-w(2);
c(3)=w(2)-400;
ceq=[ ];
那么请问,要是fmincon不合适的话,应该要用什么方法实现呢?
是不是还是用三重for 循环嵌套呢?这样应该是可以出来,但是是不是时间用得太多啊~
继续跪求ing,大家帮忙~ fmincon不合适的话,可以再试试1stOpt,用2.0版本的比较好.
---有时间我再看看该问题. 看了一下代码,有两点建议:
====================
1. 最好把原函数及其约束条件(公式形式)用word上传一下,以便正确判断问题.
2. 从现在的程序看,完全没有非线性约束,所以函数xianzhi也是没有必要的. 先用遗传算法采用全局搜索确定一个较好的初值,然后用fmincon优化
页:
[1]