📄 example4_8.m
字号:
%第一步:写一个m文件 brownvv.m 计算目标函数值、梯度以及海色矩阵值。
%brownvv.m 是计算目标函数文件,它需传递给优化函数fmincon。
%type brownvv
%因为我们使用brownfgh计算目标函数值,梯度和海色矩阵,你需要在使用optimset命
%令时使用GradObj 和海色矩阵参数。
%第二步:定义一个函数hmfleq1,它利用在ibrownvv计算的矩阵Hinfo和V,计算海
%色矩阵乘积W。
W = H*Y = (Hinfo - V*V')*Y.
%此函数的形式为:
W = hmfleq1(Hinfo,Y,p1,p2...)
%第一个参数即为函数返回的第三个参数,第二个参数为矩阵Y。
%因为函数fmincon使用参数Y去计算海色矩阵的乘积,Y是一个n行矩阵,n即为
%此问题的维数。Y的列数是可变的。最后,任何附加的参数都会传递给函数hmfleq1,
%于是hmfleq1接受了相同的参数例如矩阵V。
function W = hmfleq1(Hinfo,Y,V);
W = Hinfo*Y - V*(V'*Y);
%第三步:使用命令fmincon 解决此问题。
%从文件中取得V, Aeq, beq的值。
%使用命令 optimset 设置GradObj 和Hessian参数为 'on' ,设定HessMult
%参数为函数句柄,指向函数 hmfleq1。令目标函数和矩阵V为优化函数的参数,计算最优结
%果。
% 得到 V, Aeq, beq值
load fleq1
% 问题维数
n = 1000;
mtxmpy = @hmfleq1; % Function handle to function hmfleq1
xstart = -ones(n,1);
xstart(2:2:n,1) = ones(length(2:2:n),1);
options = optimset('GradObj','on','Hessian','on',...
'HessMult',mtxmpy,'Display','iter');
[x,fval,exitflag,output] = fmincon(@brownvv,xstart,[],[],Aeq,beq,[],[],[], ... options,V);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -