wxpxyz 发表于 2006-9-1 21:47

求助如何实现下述优化问题。

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

dingd 发表于 2006-9-1 22:58

请把问题详细贴出来看看,或自己试试1stOpt。

jieli 发表于 2006-9-2 09:26

fmincon 就可以,如果目标或约束不能表达,可以写成函数形式:
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
myfun——目标,mycon——约束

wxpxyz 发表于 2006-9-2 18:24

谢谢。

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 failed with the following error:
Reference to a cleared variable x1.

请教如何解决?

jimin 发表于 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这个函数也贴出来吧

AaronSpark 发表于 2006-9-3 08:09

应该是你的目标函数不对,把目标函数贴出来吧

wxpxyz 发表于 2006-9-3 10:39

目标函数optFx不与x直接相关,是用数值方法算出的值,而x是数值方法中间的参数。

wxpxyz 发表于 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;
=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);%求目标曲线和实际计算曲线的差值中的最大值

jimin 发表于 2006-9-3 12:07

function MAX=optFx(x)
这个函数的输入x怎么没有看到呀??

wxpxyz 发表于 2006-9-3 15:53

raa和d分别是计算r2与r33的参数

程序中省略了计算r2与r33。

jieli 发表于 2006-9-3 20:40

看不懂,能否把程序作为附件给出,可以帮你看看。目前看好像是目标函数中clear用的不对,去掉clear,clc看看能否计算。

[ 本帖最后由 jieli 于 2006-9-3 20:49 编辑 ]

wxpxyz 发表于 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;
                =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。
请教此优化问题如何解决?

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.
是不是函数不连续所造成的原因?

jimin 发表于 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是输入参数,你调用这个函数前应给出值吧
页: [1] 2
查看完整版本: 求助如何实现下述优化问题。