MATLAB fmincon函数原理使用

苹果/安卓/wp
积分 48, 距离下一级还需 37 积分
道具: 彩虹炫, 涂鸦板, 雷达卡, 热点灯, 金钱卡, 显身卡下一级可获得
权限: 自定义头衔
购买后可立即获得
权限: 隐身
道具: 金钱卡, 彩虹炫, 雷达卡, 热点灯, 涂鸦板
开心签到天数: 1 天连续签到: 1 天[LV.1]初来乍到
小女需要用MATLAB进行投资组合优化求解,主要是MV模型,要用到fmincon()函数,x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
而我的公式是:
目标函数:min(sigma2)=w‘*sigma*w
约束条件:w1*R1+……+w4*R4&=Rp0
& && && &w1+w2+w3+w4=1
& && && &wi&=0
该怎么用这个函数,跪求高人指点[loveliness][loveliness]
18:04:36 上传
支持楼主:、
购买后,论坛将把您花费的资金全部奖励给楼主,以表示您对TA发好贴的支持
载入中......
假设你已经算出了协方差矩阵sigma和期望收益向量miu
先定义一个函数:
function f=fobj(w)
f=w'*sigma*w;
然后给fmincon的参数赋值
%A和b参数组成了你的第一个约束条件%
Aeq=[1 1 1 1];
%Aeq和beq参数组成了你的第二个约束条件%
lb=[0 0 0 0];
%第三个约束条件%
x0=[1 0 0 0];
%随便给一个初始值%
[w, minsig]=fmincon(@fobj, x0, A, b, Aeq, beq, lb);
%计算最 ...
本帖被以下文库推荐
& |主题: 207, 订阅: 4
help fmincon
然后看帮助文档里面关于每个参数是什么,与你的问题中的各个字符对应即可。
假设你已经算出了协方差矩阵sigma和期望收益向量miu
先定义一个函数:
function f=fobj(w)
f=w'*sigma*w;& &
然后给fmincon的参数赋值
b=-Rp0;&&%A和b参数组成了你的第一个约束条件%
Aeq=[1 1 1 1];
beq=1;& && && && & %Aeq和beq参数组成了你的第二个约束条件%
lb=[0 0 0 0];& & %第三个约束条件%
x0=[1 0 0 0];& &%随便给一个初始值%
[w, minsig]=fmincon(@fobj, x0, A, b, Aeq, beq, lb);& &%计算最优权重向量和最小的方差值%
display(w);
display(minsig);& &%显示结果%
lingo岂不是更好...
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
&nbsp&nbsp|
如有投资本站或合作意向,请联系(010-);
邮箱:service@pinggu.org
投诉或不良信息处理:(010-)
论坛法律顾问:王进律师查看: 8073|回复: 10|关注: 0
fmincon函数优化问题
<h1 style="color:# 麦片财富积分
新手, 积分 17, 距离下一级还需 33 积分
关注者: 1
本帖最后由 猴与云 于
20:10 编辑
我运行下面fmincon函数时一直找不到合适的解,想问问大家这种情况一般错误在哪?怎么解决?options=optimset('Display','iter','TolCon',1e-12,'TolX',1e-12);
[Z,fval]=fmincon(@RPM_obj,Z0,[],[],[],[],[],[],@RPM_con,options);复制代码下面是错误提示:
Warning: The default trust-region-reflective algorithm does not solve problems with the constraints you
have specified. FMINCON will use the active-set algorithm instead. For information on applicable
algorithms, see Choosing the Algorithm in the documentation.
& In fmincon at 486
&&In Low_RPM at 85
& && && && && && && && && && &&&Max& &&&Line search&&Directional&&First-order
Iter F-count& && &&&f(x)& &constraint& &steplength& &derivative& &optimality Procedure
& & 0& & 510& && &9.71932& &3.703e+021& && && && && && && && && && && && && &&&Infeasible start point
No feasible solution found.
fmincon stopped because the size of the current search direction is less than
twice the selected value of the step size tolerance but constraints are not
satisfied to within the selected value of the constraint tolerance.
&stopping criteria details&
Elapsed time is 2.139043 seconds.
Optimization stopped because the norm of the current search direction , 0.0,
is less than 2*options.TolX = 1.2, but the maximum constraint
violation, 3.1, exceeds options.TolCon = 1.2.
Optimization Metric& && && && && && && && && && && && && && && && &Options
norm(search direction) =&&0.00e+000& && && && && && && && & TolX =&&1e-012 (selected)
max(constraint violation)&&=&&3.70e+021& && && && && && & TolCon =&&1e-012 (selected)
论坛优秀回答者
帖子最佳答案
关注者: 685
一般是初值不合理
<h1 style="color:# 麦片财富积分
关注者: 1
一般是初值不合理
有可能是我的非线性约束有问题吗?我现在在排查看有没有非线性约束那出错。嗯嗯,谢谢版主,让我知道了另一个有可能出错的地方,
<h1 style="color:# 麦片财富积分
关注者: 1
一般是初值不合理
版主我想问问您如何判断fmincon函数的初值满足非线性约束,因为我的初值是通过ga函数得到的,随机性比较大,ga搜索到初始值后用fmincon老是得不到合适的解,麻烦版主了,谢谢
论坛优秀回答者
帖子最佳答案
关注者: 685
版主我想问问您如何判断fmincon函数的初值满足非线性约束,因为我的初值是通过ga函数得到的,随机性比较 ...
那你在 ga 优化时,也该指定相同的非线性约束,这样,才可能保证 ga 的解是满足非线性约束的
<h1 style="color:# 麦片财富积分
关注者: 1
本帖最后由 猴与云 于
16:13 编辑
那你在 ga 优化时,也该指定相同的非线性约束,这样,才可能保证 ga 的解是满足非线性约束的 ...
版主,我按照你指点的思路又找了一次初值,但是找到了之后用fmincon函数优化还是迭代50次后就停止找不到合适的解,想问问版主有没有对初值不敏感或者不需要初始值的精确优化算法?我知道智能优化算法不需要初值,但是很容易得到局部最优,所以想问问还有啥其他的,
论坛优秀回答者
帖子最佳答案
关注者: 685
版主,我按照你指点的思路又找了一次初值,但是找到了之后用fmincon函数优化还是迭代50次后就停止找不到合 ...
如果是matlab的话,我一般会考虑 GlobalSearch 或者 MultiStart
<h1 style="color:# 麦片财富积分
关注者: 1
如果是matlab的话,我一般会考虑 GlobalSearch 或者 MultiStart
我用了GlobalSearch,但是效果也不是很好,还是找不到合适的解,感觉和fmincon函数效果差不多, options=optimset(options,'Display','iter','MaxIter',400,'TolFun',1e-4,'TolX',1e-4);
problem = createOptimProblem('fmincon','x0',Z0, 'objective','RPM_obj','lb',[],'ub',[], 'nonlcon','RPM_con1','options',options);
gs = GlobalS
[Z,f] = run(gs,problem);
复制代码这是我最后调用GlobalSearch函数。
<h1 style="color:# 麦片财富积分
如果是matlab的话,我一般会考虑 GlobalSearch 或者 MultiStart
您好!请教您一个matlab的优化问题,我现在做一个关于fmincon的优化的通用版,不管每次输入什么参数,边界条件和初始值都可以自己设置,这样的能实现吗?用GlobalSearch 或者 MultiStart能实现吗
<h1 style="color:# 麦片财富积分
版主我想问问您如何判断fmincon函数的初值满足非线性约束,因为我的初值是通过ga函数得到的,随机性比较 ...
您好,不知您现在的问题解决了吗?我和你遇到了同样的问题,想请您知道一下
站长推荐 /1
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区查看: 3589|回复: 7|关注: 0
运用matlab中的函数fmincon做非线性优化求解,结果终止了
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
出现的错误是这样的:
Solver stopped prematurely.fmincon stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 152100 (the default value).
请问这个时候应该怎么办?
<h1 style="color:# 麦片财富积分
关注者: 4
超出了函数运行次数的上限,估计哪个地方没设置好吧
<h1 style="color:# 麦片财富积分
超出了函数运行次数的上限,估计哪个地方没设置好吧
要自行设置么?有没有具体点的方案呢?
<h1 style="color:# 麦片财富积分
关注者: 4
要自行设置么?有没有具体点的方案呢?
我都不知道你的函数
<h1 style="color:# 麦片财富积分
我都不知道你的函数
目标函数文件:
function f=fun(x)
f=x'*log(x);
主程序文件:
N=39;%N为银行数量
A=zeros(N,N*N);
B=zeros(N,N*N);
C=zeros(N,N*N);
& & A(i,j:j+38)=1;
& & j=j+39;
& & B(i,j:39:end)=1;
for k=1:N-1
& & C(1,1)=1;
& & C(k+1,1+k*(N+1))=1;
Aeq=[A;B;C];
lb=zeros(N*N,1);
%----------------------------------------------------------------------------------
AI=xlsread('F:同业资产比重表ai.xlsx','sheet1');%AJ为同业资产比重表年;
LJ=xlsread('F:\同业负债比重表lj.xlsx','sheet1');%LI为同业负债比重表年;
& & ai=AI(:,1);%ai为第i年的同业资产比重
& & lj=LJ(:,1);%lj为第ii的同业负债比重;
& & f=zeros(N,1);
& & beq=[f];
%--------------------------------------------------初值计算
& & W=ai*lj';
& & W(1,2)=W(1,2)+W(1,1);
& & W(1,1)=0;
& &for nn=2:N
& && & for mm=1:N
& && && &&&if nn==mm
& && && && && &W(nn,nn-1)=W(nn,mm)+W(nn,nn-1);
& && && && && &W(nn,mm)=0;
& && && &&&end
& && & end
& &W1=W' ;&&
& &X0=W1(:);& && &
options=optimset('largescale','off','algorithm','active-set');
options.MaxFunEvals = 1999999;
& & x=fmincon('fun',X0,[],[],Aeq,beq,lb,[],[],options);
& & M=reshape(x,N,N)';
<h1 style="color:# 麦片财富积分
我都不知道你的函数
目标函数文件:
function f=fun(x)
f=x'*log(x);
主程序文件:
AI=xlsread('F:\同业资产比重表ai.xlsx','sheet1');%AJ为同业资产比重表年;
LJ=xlsread('F:\同业负债比重表lj.xlsx','sheet1');%LI为同业负债比重表年;
N=39;%N为银行数量
A=zeros(N,N*N);
B=zeros(N,N*N);
C=zeros(N,N*N);
& & A(i,j:j+38)=1;
& & j=j+39;
& & B(i,j:39:end)=1;
for k=1:N-1
& & C(1,1)=1;
& & C(k+1,1+k*(N+1))=1;
Aeq=[A;B;C];
lb=zeros(N*N,1);
%----------------------------------------------------------------------------------
& & ai=AI(:,1);%ai为第i年的同业资产比重
& & lj=LJ(:,1);%lj为第ii的同业负债比重;
& & f=zeros(N,1);
& & beq=[f];
%--------------------------------------------------初值计算
& & W=ai*lj';
& & W(1,2)=W(1,2)+W(1,1);
& & W(1,1)=0;
& &for nn=2:N
& && & for mm=1:N
& && && &&&if nn==mm
& && && && && &W(nn,nn-1)=W(nn,mm)+W(nn,nn-1);
& && && && && &W(nn,mm)=0;
& && && &&&end
& && & end
& &W1=W' ;&&
& &X0=W1(:);& && &
options=optimset('largescale','off','algorithm','active-set');
options.MaxFunEvals = 1999999;
& & x=fmincon('fun',X0,[],[],Aeq,beq,lb,[],[],options);
& & M=reshape(x,N,N)';
<h1 style="color:# 麦片财富积分
我都不知道你的函数
一直回复的程序代码都要通过审核~还没能发上来
<h1 style="color:# 麦片财富积分
一直回复的程序代码都要通过审核~还没能发上来
主程序主要部分:options=optimset('MaxIter',4000,'MaxFunEvals',2000000,'algorithm','active-set');
& & x=fmincon('fun',X0,[],[],Aeq,beq,lb,[],[],options);
& & M=reshape(x,N,N)';
目标函数文件:
function f=fun(x)
f=x'*log(x);
站长推荐 /1
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区君,已阅读到文档的结尾了呢~~
【2017年整理】Matlab的fmincon函数
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
【2017年整理】Matlab的fmincon函数
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口

我要回帖

更多关于 matlab的fmincon函数 的文章

 

随机推荐