回 帖 发 新 帖 刷新版面

主题:fmincon优化问题,望达人相助

老师给了个题目,让仿真一个平顶高斯光束。所以小弟写个优化程序思路是在输出的振幅里找一些点,让他们的和最小,但是在输入初值之后却总也得不到最后的优化结果,总是只做了两三次的优化就完了,很是郁闷,所以想请各位牛人帮忙看看:

偶把程序负在下面了,望各位帮帮忙~~

主程序:
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;

tommy_ljy@yahoo.com.cn

小弟跪求~叩谢~

回复列表 (共1个回复)

沙发

fmincon的解是local的,你给定的起始点将影响结果,何况你还有非线性的约束。你可以用for循环递增你的w0,把每次产生的w,fval记录下来,大致确定哪里是极值点之后用,更小的步进递增

我来回复

您尚未登录,请登录后再回复。点此登录或注册