声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2700|回复: 17

[综合讨论] 求助如何实现下述优化问题。

[复制链接]
发表于 2006-9-1 21:47 | 显示全部楼层 |阅读模式

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

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

x
优化目标函数已经确定,但不能用变量直接表达;
变量有9个,在两个一维数组中;每个变化有取值范围;
请问如何实现这个求最小值问题?
回复
分享到:

使用道具 举报

发表于 2006-9-1 22:58 | 显示全部楼层
请把问题详细贴出来看看,或自己试试1stOpt。
发表于 2006-9-2 09:26 | 显示全部楼层
fmincon 就可以,如果目标或约束不能表达,可以写成函数形式:
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
myfun——目标,mycon——约束

评分

1

查看全部评分

 楼主| 发表于 2006-9-2 18:24 | 显示全部楼层
谢谢。
 楼主| 发表于 2006-9-2 18:48 | 显示全部楼层

新问题出现了。再次请教。

下面是程序:
clc;
clear;
x0 = [1; 1; 1;1;70;70;70;70;70];  
lb=[10; 10; 10;10;40;40;40;40;40];
ub=[90; 90; 90;90;100;100;100;100;100];
x=fmincon('optFx',x0,[],[],[],[],lb,ub);

出现的错误是:
?? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function failed with the following error:
Reference to a cleared variable x1.

请教如何解决?
发表于 2006-9-2 21:51 | 显示全部楼层
原帖由 wxpxyz 于 2006-9-2 18:48 发表
下面是程序:
clc;
clear;
x0 = ;  
lb=;
ub=;
x=fmincon('optFx',x0,,,lb,ub);

出现的错误是:
?? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function f ...

把optFx这个函数也贴出来吧
发表于 2006-9-3 08:09 | 显示全部楼层
应该是你的目标函数不对,把目标函数贴出来吧
 楼主| 发表于 2006-9-3 10:39 | 显示全部楼层
目标函数optFx不与x直接相关,是用数值方法算出的值,而x是数值方法中间的参数。
 楼主| 发表于 2006-9-3 10:58 | 显示全部楼层
详细程序为:
function MAX=optFx(x)
clc;
clear;
raa(l)=x(1);
raa(2)=x(2);
raa(3)=x(3);
raa(4)=x(4);
d(2)=x(5);
d(3)=x(6);
d(4)=x(7);
d(5)=x(8);
d(6)=x(9);
d(7)=40;
d(1)=0;
cslt=0.225;
dt=1;
% raa和d分别是计算r2与r33的参数   
dt=1;
dd=50;
[er,Mt]=suberosiondr(Nx,Ny,NN,dt,dd,r2,r33);%调用程序计算Mt曲线
% 目标曲线ft(t)=(1/600)*(t-100);
    ft=0;
    for t=101:700
       ft(t)=(1/600)*(t-101);
       Ft(t)=abs(ft(t)-Mt(t));
    end
    MAX=max(Ft);%求目标曲线和实际计算曲线的差值中的最大值
发表于 2006-9-3 12:07 | 显示全部楼层
function MAX=optFx(x)
这个函数的输入x怎么没有看到呀??
 楼主| 发表于 2006-9-3 15:53 | 显示全部楼层
raa和d分别是计算r2与r33的参数  

程序中省略了计算r2与r33。
发表于 2006-9-3 20:40 | 显示全部楼层
看不懂,能否把程序作为附件给出,可以帮你看看。目前看好像是目标函数中clear用的不对,去掉clear,clc看看能否计算。

[ 本帖最后由 jieli 于 2006-9-3 20:49 编辑 ]
 楼主| 发表于 2006-9-3 21:02 | 显示全部楼层
函数为:
function MAX=optFx(x)

clc;
clear;
% t0=clock;
%=================================================有NN=四层
NN=4;
% raa每层降解系数;
% d每环的厚度
% x=[];
raa(l)=x(1);
raa(2)=x(2);
raa(3)=x(3);
raa(4)=x(4);
d(2)=x(5);
d(3)=x(6);
d(4)=x(7);
d(5)=x(8);
d(6)=x(9);
d(7)=40;
d(1)=0;
%以下是通过参数raa和d求Mt的值
                     ................
                     Rr2(1)=h(1);
                     for i=2:N
                     Rr1(i)=Rr2(i-1)+h(i);
                     Rr2(i)=Rr1(i)+d(i);
                      end
                         for l=1:1:NN
                     u=0;
                    ra=raa(l);
                     rc=3.03*10^(-9);
                   for i=1:Nx
                           for j=1:Ny
                                 u=unifrnd(0,1);
                                     if r1(i,j)==0
                                           r2(i,j,l)=-log(1-u)/(log(175*175)*ra*3600);
                                          elseif r1(i,j)==1
                                         r2(i,j,l)=-log(1-u)/(rc*log(175*175)*3600);
                                          else
                                      r2(i,j,l)=0.1;
                                      end
                                end
                           end
                     end
                 .............
                 ..............
                  dt=1;
                 dd=50;
                [er,Mt]=suberosiondr(Nx,Ny,NN,dt,dd,r2,r33);
%以上是利用参数raa和d求得r2和r33,再求得Mt
% 目标曲线ft(t)=(1/600)*(t-100);
    ft=0;
    for t=101:700
       ft(t)=(1/600)*(t-101);
       Ft(t)=abs(ft(t)-Mt(t));
    end
    MAX=max(Ft);


上面是程序,其主要功能是利用参数raa和d通过数值方法求得一时间序列Mt,MAX是误差的最大值,优化目标是Mt与ft最接近,即误差最大值MAX最小,寻找此时的参数raa和d。
请教此优化问题如何解决?
 楼主| 发表于 2006-9-3 21:06 | 显示全部楼层
去掉clc和clear之后还是出错:
??? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function failed with the following error:
Reference to a cleared variable x.
是不是函数不连续所造成的原因?
发表于 2006-9-3 21:35 | 显示全部楼层
原帖由 wxpxyz 于 2006-9-3 21:06 发表
去掉clc和clear之后还是出错:
??? Error using ==> fmincon
FMINCON cannot continue because user supplied objective function failed with the following error:
Reference to a cleared variable x.
是 ...

function MAX=optFx(x)
这个x是输入参数,你调用这个函数前应给出值吧
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-20 02:36 , Processed in 0.069593 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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