?? c52.m
字號:
%第一步:寫一個函數文件brownfg.m計算目標函數和函數梯度。
function [f,g] = brownfg(x,dummy)
% 計算目標函數值
n=length(x); y=zeros(n,1);
i=1:(n-1);
y(i)=(x(i).^2).^(x(i+1).^2+1) + (x(i+1).^2).^(x(i).^2+1);
f=sum(y);
% 計算函數梯度
if nargout > 1
i=1:(n-1); g = zeros(n,1);
g(i) = 2*(x(i+1).^2+1).*x(i).*((x(i).^2).^(x(i+1).^2))+ 2*x(i).*((x(i+1).^2).^(x(i).^2+1)).*log(x(i+1).^2);
g(i+1) = g(i+1) + 2*x(i+1).*((x(i).^2).^(x(i+1).^2+1)).* ...
log(x(i).^2) +2*(x(i).^2+1).*x(i+1).* ((x(i+1).^2).^ (x(i).^2));
end
%第二步:調用求非線性最小函數fminunc。
fun = @brownfg;
% Get Hstr, structure of the Hessian
load brownhstr
% View the sparsity structure of Hs
spy(Hstr) tr
n = 1000;
xstart = -ones(n,1);
xstart(2:2:n,1) = 1;
options = optimset('GradObj','on','HessPattern',Hstr);
[x,fval,exitflag,output] = fminunc(fun,xstart,options);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -