牛顿型信赖域方法求解无约束问题:  min f(x)。

function x = Opt_TrustRegionNewton(x0, err, MaxIter)
%{
函数功能:牛顿型信赖域方法求解无约束问题:  min f(x);
输入:x0:初始点;err:梯度误差阈值;MaxIter:最大迭代次数;
输出:x:最小值点;
调用格式:
clear; clc;
x = Opt_TrustRegionNewton([0 0]', 1e-5, 1000)
%}
if nargin < 3MaxIter = 10000;
end
if nargin < 2err = 1e-5;
end
if nargin < 1error('输入参数不足!');
end
eta1 = 0.1;
eta2 = 0.75;
tau1 = 0.5;
tau2 = 2.0;
delta = 1;
dtabar = 2.0;
x = x0;
Bk = Hess(x);
k = 0;
while k < MaxIter fk = fun(x);gk = gfun(x);if norm(gk) < err break;end% 调用子程序 Trust_q[d, val] = Trust_q(fk, gk, Bk, delta);dq = fk - val;df = fun(x) - fun(x + d);rk = df/dq;if rk <= eta1 delta = tau1*delta;elseif rk >= eta2 && norm(d) == delta delta = min(tau2*delta, dtabar);endif rk > eta1 x = x + d;Bk = Hess(x);endk = k+1;
endfunction [d, val] = Trust_q(fk, gk, Bk, deltak)
%{函数功能: 求解信赖域子问题:min qk(d)=fk+gk'*d+0.5*d'*Bk*d, s.t.||d|| <= delta
输入: fk:xk处的目标函数值;gk:xk处的梯度;Bk:近似Hesse阵;delta:当前信赖域半径
输出: d:最优值;val:最优值
%}
n = length(gk);
beta = 0.6;
sigma = 0.2;
mu0 = 0.05;
lam0 = 0.05;
gamma = 0.05;
d0 = ones(n, 1);
zbar = [mu0, zeros(1, n + 1)]';
i = 0;
mu = mu0;
lam = lam0;
d = d0;
while i <= 150H = dah(mu, lam, d, gk, Bk, deltak);if norm(H) <= 1e-8break;endJ = JacobiH(mu, lam, d, Bk, deltak);b = psi(mu, lam, d, gk, Bk, deltak, gamma)*zbar - H;dz = J\b;dmu = dz(1); dlam = dz(2); dd = dz(3 : n + 2);m = 0; mi = 0;while m < 20t1 = beta^m;Hnew = dah(mu + t1*dmu, lam + t1*dlam, d + t1*dd, gk, Bk, deltak);if norm(Hnew) <= (1 - sigma*(1 - gamma*mu0)*beta^m)*norm(H) mi = m; break;endm = m+1;endalpha = beta^mi;mu = mu + alpha*dmu;lam = lam + alpha*dlam;d = d + alpha*dd;i = i + 1;
end
val = fk + gk'*d + 0.5*d'*Bk*d;function p = phi(mu, a, b)
p = a + b - sqrt((a - b)^2 + 4*mu^2);function H = dah(mu, lam, d, gk, Bk, deltak)
n = length(d);
H = zeros(n + 2, 1);
H(1) = mu;
H(2) = phi(mu, lam, deltak^2 - norm(d)^2);
H(3 : n + 2) = (Bk + lam*eye(n))*d + gk;function J = JacobiH(mu, lam, d, Bk, deltak)
n = length(d);
t2 = sqrt((lam + norm(d)^2 - deltak^2)^2 + 4*mu^2);
pmu = -4*mu/t2;
thetak = (lam + norm(d)^2 - deltak^2)/t2;
J=[1,                0,               zeros(1, n);pmu,            1 - thetak,  -2*(1 + thetak)*d';zeros(n, 1),  d,               Bk + lam*eye(n)];function si = psi(mu, lam, d, gk, Bk, deltak, gamma)
H = dah(mu, lam, d, gk, Bk, deltak);
si = gamma*norm(H)*min(1, norm(H));function f = fun(x)
f = 100*(x(1)^2 - x(2))^2 + (x(1) - 1)^2;function gf = gfun(x)
gf = [400*x(1)*(x(1)^2 - x(2)) + 2*(x(1) - 1);-200*(x(1)^2 - x(2))];function He = Hess(x)
He = [400*(3*x(1)^2 - x(2)) + 2,  -400*x(1);-400*x(1),                            200];

Matlab学习手记——牛顿型信頼域法求解无约束问题相关推荐

  1. 【Matlab学习手记】拟牛顿型信頼域方法求解函数极值

    信頼域子问题求解过程,包含Hessian矩阵计算啊,这里采用拟牛顿法(BFGS)来计算近似的Hessian矩阵. 例子比较简单: f = 100*(x(1)^2 - x(2))^2 + (x(1) - ...

  2. 利用 MATLAB 编程实现共轭梯度法求解无约束最优化问题

    本文章包含以下内容 1.FR 共轭梯度法的算法流程图: 2.MATLAB 编写 FR 共轭梯度法求解无约束优化问题的函数,要求采用 黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度 ...

  3. Matlab学习手记——非线性方程组求解:牛顿下山法

    功能:牛顿下山法求解非线性方程组. 牛顿下山法 function [x, n] = NonLinearEquations_NewtonDown(x0, err) %{ 函数功能:牛顿下山法求解非线性方 ...

  4. 利用 MATLAB 编程实现最速下降法求解无约束最优化问题

    本文章包含以下内容 1.画出最速下降法的算法流程图: 2.MATLAB 编写用数值微分法的梯度计算函数(函数式 M 文件): 3.MATLAB 编写最速下降法求解无约束优化问题的函数,要求采用黄金分割 ...

  5. 【Matlab学习手记】Matlab积分问题

    一个程序彻底搞懂Matlab的数值积分.符号积分问题. 数值积分问题,给定被积分函数和积分上下限,使用 integral 函数得到积分值: 符号积分问题,通常结果是解析解,即需要知道被积分函数的原函数 ...

  6. Matlab学习手记——非线性拟合方法:压缩因子粒子群算法

    目的:采用压缩因子粒子群算法实现双指数拟合. function x_opt = PSO_ExpFit2(t, Et) %{ 函数功能:压缩因子粒子群算法实现指数拟合:y = a1*exp(-x/b1) ...

  7. 【Matlab学习手记】标签显示在刻度之间

    问题:Matlab标签和刻度线默认是对齐的,如何将标签设置到刻度线之间? 三个实例. plot类型 clear; clc; x = 0:0.1:2*pi; y = sin(x); plot(x, y) ...

  8. Matlab学习手记——制作GIF动图

    目的:利用Matlab制作GIF动图. 结果图 测试代码 clear;clc; filename = '页岩碎屑.gif'; % 保存文件名 Iters = [1:9 10*(1:9) 100*(1: ...

  9. 【Matlab学习手记】sym8小波滤波

    提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强. 源代码 clear;clc; load leleccum; indx = 1:3450; noisez = lele ...

  10. sym8 matlab,【Matlab学习手记】sym8小波滤波

    提供sym8小波,四层全局软阈值滤波源代码,采用Matlab语言编写,可移植性强. 源代码 clear;clc; load leleccum; indx = 1:3450; noisez = lele ...

最新文章

  1. MyBatis之传入参数
  2. ​linux中使用文本工具截取ip 的几种方法
  3. boost::adaptors::formatted相关的测试程序
  4. android app无感知自动升级,Android中实现用户无感知处理后台崩溃
  5. Linux中查询显卡硬件的几种命令(记录)
  6. leetcode117. 填充每个节点的下一个右侧节点指针 II(层序遍历08)
  7. App Engine中的Google Services身份验证,第2部分
  8. 共享语义 unix语义_语义UI按钮
  9. html-简单验证、滑块、搜索框
  10. Nodejs基础01
  11. Spring Boot WebFlux 上手教程
  12. 计算机二级资料(公共基础知识、考纲、历年真题、VB、Java、Access、C/C++)---百度网盘下载
  13. idea导入项目爆红问题及解决方案
  14. 速卖通API + 奇门 + 聚石塔 完整流程
  15. 攻防世界-Crypto-Railfence
  16. Ratione aspernatur nam dolorem vitae quia.Fumer comme créer passer ailleurs jouer lumière.
  17. CUDA学习第三天:Kernel+grid+block关系
  18. python爬取中国空气质量在线监测平台分析数据【已更新】
  19. 《计算机科学概论》读书笔记
  20. “鱼骨图”勾勒合理ERP项目进度计划

热门文章

  1. 一、学海无涯,再出发!【2020.02.14-25】
  2. 如何用手机访问电脑本地localhost网页, 以调试项目
  3. 西湖论剑 2020 loader
  4. 子网掩码及其与IP地址、网关的关系
  5. matlab中marker太密,Matlab画图时Marker过多的解决方法.pdf
  6. android最强的平板,最强安卓游戏平板曝光,NVIDIA的Shield Tablet X1来了
  7. mysql 5.1 limit_mysql5 limit使用表达式的问题
  8. 老九学堂 学习 C++ 第五天
  9. MySQL快速学习入门
  10. PyG搭建GCN前的准备:了解PyG中的数据格式