yansun82 发表于 2009-2-4 22:30

求助!关于matlab优化函数fmincon和数值积分函数quadl

求解含有三个参数(z(1),z(2),z(3))的最优化问题,带有一个线性约束,目标函数含有双重积分,因此使用quadl求解,而且内层积分上下限和外层积分的变量有关。
主要使用了系统的fmincon和qudal函数。
目标函数:
function object_m=opt_x(z)
global w0 v0 F Fv Fw T rho r lambda delta sigmaw
constant;%参数的初值,除了z是求解变量之外,其他的参数都是常数给出的.

d5=(log(Fv/v0)-(r-z(1).^2/2)*T)/(z(1).*sqrt(T));
d3=d5-rho*sigmaw*sqrt(T);
d8=d5-z(1).*sqrt(T);

B1=(1+theta)*w01*quadl(@a7,-1000,d3);
B2=exp(-r*T)*(Fw+Fv)*quadl(@a10,-1000,d5);
C5=1/(z(1).^2*T);
object_m=z(2)*(B1-B2)-C5

M文件:

function fonctiona7=a7(x)
global w0 v0 F Fv Fw T rho r lambda delta sigmaw w01 z

v=v0*exp((r-z(1).^2/2)*T+z(1).*sqrt(T)*x.^1+z(1).*sigmaw*T*rho);

d7x=(log(Fw+Fv-v+z(3)/(1-z(2)))-log(w01)-(r-sigmaw.^2/2)*T)./(sigmaw*sqrt(T))-sigmaw*sqrt(T);

fonctiona7=(0.5/sqrt(2*pi))*exp(-0.5*x.^2).*erfc((d7x-rho*x.^1)/sqrt(2*(1-rho^2)));
%计算内层积分,a9和这个类似,不重复了,问题就出在这里,a7的调用好像不成功。
约束条件:
function =con_x(z)
c3=-z(1);
c4=-z(2);
c5=-z(3);
c6=z(1)-1;
c7=z(2)-.5;
c8=z(3)-10;
% 限制变量的取值范围
c=;
%等式和非等式的约束.

当运行:
z0=;
options=optimset('largescale','off');
z=fmincon(@opt_x,z0,[],[],[],[],[],[],@con_x,options);
出现:
??? Index exceeds matrix dimensions.
Error in ==> D:\另一种方法求解\a7.m
On line 7==> v=v0*exp((r-z(1).^2/2)*T+z(1).*sqrt(T)*x.^1+z(1).*sigmaw*T*rho);
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\quadl.m
On line 60==> y = feval(f,x,varargin{:}); y = y(:).';
当把a7函数中的GLOBAL中Z去掉的时候,又会出现:
?? Undefined function or variable 'z'.
Error in ==> D:\另一种方法求解\a7.m
On line 7==> v=v0*exp((r-z(1).^2/2)*T+z(1).*sqrt(T)*x.^1+z(1).*sigmaw*T*rho);
Error in ==> C:\MATLAB6p5\toolbox\matlab\funfun\quadl.m
On line 60==> y = feval(f,x,varargin{:}); y = y(:).';

哪位高手帮忙看看啊,感激不尽,论文中的关键部分程序调试了两天了都不知道问题在哪里,看了很多相关问题的帖子,可是问题都不对,:'( 快崩溃了,不知道是quadl函数使用的问题还是fimincon函数的使用问题。


:'( :'(

ChaChing 发表于 2009-2-5 00:29

现在有点累了! 无法帮忙细看!
错误讯息Index exceeds matrix dimensions说明矩阵大小有问题!

可以的话, 建议相关程式以附件上传给齐些! 明天再试试看!

yansun82 发表于 2009-2-5 12:39

谢谢这位好心人了

我觉得主要问题可能在于目标优化函数调用a7和a9自函数的时候出的问题,将优化变量需要传递给子函数,可是不知道该怎么传,用了global 问题就出现了

另外,为什么有些程序上次运行还可以,这次运行就不通了呢?可能有什么原因?郁闷

真是非常非常感谢你。现在很着急

[ 本帖最后由 yansun82 于 2009-2-5 12:50 编辑 ]

ChaChing 发表于 2009-2-5 16:51

下载了! 最近私事较忙些!
会尽速试试看! 不过不见得有帮助! 尽力!

yansun82 发表于 2009-2-6 21:55

回复 地板 ChaChing 的帖子

谢谢,我还是没有找到问题所在,希望能尽快听到你的好消息,再次感谢:@)

ChaChing 发表于 2009-2-6 22:23

最近公/私事较忙些! 刚刚才开始试!
但我的报错与楼主不同(如下)! 我用的是v6.5!

>> z=fmincon(@opt_x,z0,[],[],[],[],[],[],@con_x,options);
Warning: The value of local variables may have been changed to match the
         globals.Future versions of MATLAB will require that you declare
         a variable to be global before you use that variable.
> In C:\MATLAB6p5\work\fmin\opt_x.m at line 5
In C:\MATLAB6p5\toolbox\optim\fmincon.m at line 288

object_m =

-66.5394

??? Error using ==> fmincon
FMINCON cannot continue because user supplied nonlinear constraint function
failed with the following error:

Undefined function or variable 's'.

ChaChing 发表于 2009-2-6 22:25

忘了告诉LZ, 这是个人第一次试着使用fmincon!
尽力! 怕让LZ失望!
页: [1]
查看完整版本: 求助!关于matlab优化函数fmincon和数值积分函数quadl