|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
老师给了个题目,让仿真一个平顶高斯光束。所以小弟写个优化程序思路是在输出的振幅里找一些点,让他们的和最小,但是在输入初值之后却总也得不到最后的优化结果,总是只做了两三次的优化就完了,很是郁闷,所以想请各位帮忙看看:
偶把程序附在下面了,望各位帮帮忙~~
主程序:
w0=[20; 30; 60]; %不同的输入总是得到不同的结果,是不是只能得到局部优化呢??
options=optimset('LargeScale','off','Display','iter');
[w,fval]=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;
[x y]=meshgrid(xx,yy);
G=exp(-((x-NN).^2+(y-NN).^2)/W1^2); % Gaussian shape magnitude
% pi-plane 2-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 编辑 ] |
|