tommy_ljy 发表于 2007-11-7 15:34

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 编辑 ]

fishlover 发表于 2007-11-7 18:48

fmincon优化函数是寻求初始值附近的极小值,所以跟初始值有很大的关系

fishlover 发表于 2007-11-7 18:52

回复 #1 tommy_ljy 的帖子

你一定要给初始值吗?不好意思,没时间看你的程序,只是想问一下你是不是一定要给初始值,是不是一定要多变量,是不是一定要在找的点之间有一定的间距啊?

tommy_ljy 发表于 2007-11-8 11:08

这个……初始值不一定要给定的,只要找到最小值就可以了。因为fmincon这个函数要求给定初始值,所以……

找的点之间有没有间距也随便,但是变量肯定是要多得……

拜谢~

tommy_ljy 发表于 2007-11-8 14:25

那请问要是不要初值,有什么别的思路能写出这个程序的吗?

谢谢~~

jsp613 发表于 2007-11-8 21:07

回复 #2 fishlover 的帖子

同意观点。可能只能得到局部解,程序没有问题,应该是函数本身的问题

xjzuo 发表于 2007-11-9 15:15

把"xianzhi"也一并贴出来一下,以便调试.

tommy_ljy 发表于 2007-11-9 15:50

限制函数:
function =xianzhi(w)
c(1)=-w(1);
c(2)=w(1)-w(2);
c(3)=w(2)-400;

ceq=[ ];

那么请问,要是fmincon不合适的话,应该要用什么方法实现呢?
是不是还是用三重for 循环嵌套呢?这样应该是可以出来,但是是不是时间用得太多啊~

继续跪求ing,大家帮忙~

xjzuo 发表于 2007-11-9 22:39

fmincon不合适的话,可以再试试1stOpt,用2.0版本的比较好.
---有时间我再看看该问题.

xjzuo 发表于 2007-11-10 16:09

看了一下代码,有两点建议:
====================
1. 最好把原函数及其约束条件(公式形式)用word上传一下,以便正确判断问题.
2. 从现在的程序看,完全没有非线性约束,所以函数xianzhi也是没有必要的.

yxzjs 发表于 2008-1-18 01:48

先用遗传算法采用全局搜索确定一个较好的初值,然后用fmincon优化
页: [1]
查看完整版本: fmincon优化问题求助