声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3015|回复: 6

[综合讨论] 求助!关于matlab优化函数fmincon和数值积分函数quadl

[复制链接]
发表于 2009-2-4 22:30 | 显示全部楼层 |阅读模式

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

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

x
求解含有三个参数(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 [c,ceq]=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=[c3,c4,c5,c6,c7,c8];
%等式和非等式的约束.

当运行:
z0=[0.01;0.05;5];
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函数的使用问题。


:'( :'(

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2009-2-5 00:29 | 显示全部楼层
现在有点累了! 无法帮忙细看!
错误讯息Index exceeds matrix dimensions说明矩阵大小有问题!

可以的话, 建议相关程式以附件上传给齐些! 明天再试试看!
 楼主| 发表于 2009-2-5 12:39 | 显示全部楼层

谢谢这位好心人了

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

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

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

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

a7.txt

385 Bytes, 下载次数: 9

a9.txt

375 Bytes, 下载次数: 8

con_x(约束条件).txt

236 Bytes, 下载次数: 9

constant.txt

155 Bytes, 下载次数: 8

fimincon(z)执行函数.txt

172 Bytes, 下载次数: 8

g.txt

131 Bytes, 下载次数: 8

gauss.txt

552 Bytes, 下载次数: 10

gaussar.txt

302 Bytes, 下载次数: 8

k_normal.txt

60 Bytes, 下载次数: 8

normal.txt

490 Bytes, 下载次数: 8

normcdfm.txt

387 Bytes, 下载次数: 8

opt_x(目标函数).txt

1.04 KB, 下载次数: 11

sgn.txt

92 Bytes, 下载次数: 10

发表于 2009-2-5 16:51 | 显示全部楼层
下载了! 最近私事较忙些!
会尽速试试看! 不过不见得有帮助! 尽力!
 楼主| 发表于 2009-2-6 21:55 | 显示全部楼层

回复 地板 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'.
发表于 2009-2-6 22:25 | 显示全部楼层
忘了告诉LZ, 这是个人第一次试着使用fmincon!
尽力! 怕让LZ失望!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-2 19:42 , Processed in 0.100710 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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