声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1230|回复: 10

[综合讨论] fmincon优化问题求助

[复制链接]
发表于 2007-11-7 15:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-11-7 18:48 | 显示全部楼层
fmincon优化函数是寻求初始值附近的极小值,所以跟初始值有很大的关系
发表于 2007-11-7 18:52 | 显示全部楼层

回复 #1 tommy_ljy 的帖子

你一定要给初始值吗?不好意思,没时间看你的程序,只是想问一下你是不是一定要给初始值,是不是一定要多变量,是不是一定要在找的点之间有一定的间距啊?
 楼主| 发表于 2007-11-8 11:08 | 显示全部楼层
这个……初始值不一定要给定的,只要找到最小值就可以了。因为fmincon这个函数要求给定初始值,所以……

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

拜谢~
 楼主| 发表于 2007-11-8 14:25 | 显示全部楼层
那请问要是不要初值,有什么别的思路能写出这个程序的吗?

谢谢~~
发表于 2007-11-8 21:07 | 显示全部楼层

回复 #2 fishlover 的帖子

同意观点。可能只能得到局部解,程序没有问题,应该是函数本身的问题
发表于 2007-11-9 15:15 | 显示全部楼层
把"xianzhi"也一并贴出来一下,以便调试.
 楼主| 发表于 2007-11-9 15:50 | 显示全部楼层
限制函数:
function [c,ceq]=xianzhi(w)
c(1)=-w(1);
c(2)=w(1)-w(2);
c(3)=w(2)-400;

ceq=[ ];

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

继续跪求ing,大家帮忙~
发表于 2007-11-9 22:39 | 显示全部楼层
fmincon不合适的话,可以再试试1stOpt,用2.0版本的比较好.
---有时间我再看看该问题.
发表于 2007-11-10 16:09 | 显示全部楼层
看了一下代码,有两点建议:
====================
1. 最好把原函数及其约束条件(公式形式)用word上传一下,以便正确判断问题.
2. 从现在的程序看,完全没有非线性约束,所以函数xianzhi也是没有必要的.

评分

1

查看全部评分

发表于 2008-1-18 01:48 | 显示全部楼层
先用遗传算法采用全局搜索确定一个较好的初值,然后用fmincon优化
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-12 10:49 , Processed in 0.086270 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表