利用 MATLAB 编程实现共轭梯度法求解无约束最优化问题
本文章包含以下内容
1、FR 共轭梯度法的算法流程图;
2、MATLAB 编写 FR 共轭梯度法求解无约束优化问题的函数,要求采用 黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度设 为 epson 可调);
3、MATLAB 编写 n 步重新开始的 FR 共轭梯度法求解无约束优化问题的 函数,要求采用黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度设为 epson 可调);
4、MATLAB 编写 FR 共轭梯度法求解无约束优化问题的函数,要求采用 Wolfe-Powell 非精确一维搜索,用数值微分法计算梯度(函数式 M 文件, 精度设为 epson 可调);
5、MATLAB 编写 n 步重新开始的 FR 共轭梯度法求解无约束优化问题的 函数,要求采用 Wolfe-Powell 非精确一维搜索,用数值微分法计算梯度(函 数式 M 文件,精度设为 epson 可调);
6、MATLAB 编写程序(命令式 M 文件),分别利用精确搜索和不精确搜索 的共轭梯度法,求解如下问题:
精度为 0.001,初始点为(-1,1)。
数值微分法,Wolfe-Powell 非精确一维搜索代码链接
一维搜索,进退法,黄金分割法代码链接
本实验中函数用单独function计算
function y=f(x)
if(length(x)==1)global xk;global pk;x=xk+x*pk;
end
y=100*(x(2)-x(1)^2)^2+(1-x(1))^2;
1.FR 共轭梯度法的算法流程图
2、FR 共轭梯度法求解无约束优化问题的函数,采用黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度设 为 epson 可调);
function xk=FR_hjfg(e,x)
global xk;
global pk;
%step 1
g0=shuzhiweifenfa(x);
pk=-g0;
%没用到k,只存储当前迭代的值。
xk=x;
while 1%step 2%一维搜索求ak%这两个函数见之前代码(matlab无约束最优化的一般算法)[a,b,c]=jintuifa(0,0.1);a=huangjinfenge(a,c,10^-4);%step 3xk=xk+a*pk;g1=shuzhiweifenfa(xk);%step 4%范数用的是平方和开根号if sqrt(sum(g1.^2))<=ereturn;end%step 5b=(g1*g1')/(g0*g0');pk=-g1+b*pk;%step 6%没用到k,只存储当前迭代的值。g0=g1;
end
3、n 步重新开始的 FR 共轭梯度法求解无约束优化问题的函数,采用黄金分割法精确一维搜索,用数值微分法计算梯度(函数式 M 文件,精度设为 epson 可调);
function xk=FR_n_hjfg(e,x,n)
global xk;
global pk;
%step 1
g0=shuzhiweifenfa(x);
pk=-g0;
k=1;
xk=x;
while 1%step 2%一维搜索求ak%这两个函数见之前代码(matlab无约束最优化的一般算法)[a,b,c]=jintuifa(0,0.1);a=huangjinfenge(a,c,10^-4);%step 3xk=xk+a*pk;g1=shuzhiweifenfa(xk);%step 4%范数用的是平方和开根号if sqrt(sum(g1.^2))<=ereturn;end%step 5if(mod(k,n)==0)pk=-g1;elseb=(g1*g1')/(g0*g0');pk=-g1+b*pk;end%step 6k=k+1;g0=g1;
end
4、FR 共轭梯度法求解无约束优化问题的函数,采用 Wolfe-Powell 非精确一维搜索,用数值微分法计算梯度(函数式 M 文件, 精度设为 epson 可调);
function xk=FR_Wolfe(e,x)
global xk;
global pk;
%step 1
g0=shuzhiweifenfa(x);
pk=-g0;
%没用到k,只存储当前迭代的值。
xk=x;
while 1%step 2%一维搜索求aka=Wolfe_Powell(xk,pk);%step 3xk=xk+a*pk;g1=shuzhiweifenfa(xk);%step 4%范数用的是平方和开根号if sqrt(sum(g1.^2))<=ereturn;end%step 5b=(g1*g1')/(g0*g0');pk=-g1+b*pk;%step 6%没用到k,只存储当前迭代的值。g0=g1;
end
5、n 步重新开始的 FR 共轭梯度法求解无约束优化问题的函数,采用 Wolfe-Powell 非精确一维搜索,用数值微分法计算梯度(函 数式 M 文件,精度设为 epson 可调);
function xk=FR_n_Wolfe(e,x,n)
global xk;
global pk;
%step 1
g0=shuzhiweifenfa(x);
pk=-g0;
k=1;
xk=x;
while 1%step 2%一维搜索求aka=Wolfe_Powell(xk,pk);%step 3xk=xk+a*pk;g1=shuzhiweifenfa(xk);%step 4%范数用的是平方和开根号if sqrt(sum(g1.^2))<=ereturn;end%step 5if(mod(k,n)==0)pk=-g1;elseb=(g1*g1')/(g0*g0');pk=-g1+b*pk;end%step 6k=k+1;g0=g1;
end
6、分别利用精确搜索和不精确搜索 的共轭梯度法,求解如下问题:
精度为 0.001,初始点为(-1,1)。
clear
clc
n=10;
x=[-1,1];
fprintf('=========================');
fprintf('\nx=%f\t\t%f\n',x(1),x(2));
fprintf('n=%9f\n',n);
fprintf('=========================\n');
fprintf('精确搜索的共轭梯度法:\n');
x_=FR_hjfg(10^-3,x);
fprintf('x*=%f\t%f\n',x_(1),x_(2));
fprintf('f(x)=%f\n',f(x_));
fprintf('不精确搜索的共轭梯度法:\n');
x_=FR_Wolfe(10^-3,x);
fprintf('x*=%f\t%f\n',x_(1),x_(2));
fprintf('f(x)=%f\n',f(x_));
fprintf('n步重新开始的精确搜索的共轭梯度法:\n');
x_=FR_n_hjfg(10^-3,x,n);
fprintf('x*=%f\t%f\n',x_(1),x_(2));
fprintf('f(x)=%f\n',f(x_));
fprintf('n步重新开始的不精确搜索的共轭梯度法:\n');
x_=FR_n_Wolfe(10^-3,x,n);
fprintf('x*=%f\t%f\n',x_(1),x_(2));
fprintf('f(x)=%f\n',f(x_));
结果:
利用 MATLAB 编程实现共轭梯度法求解无约束最优化问题相关推荐
- 利用 MATLAB 编程实现最速下降法求解无约束最优化问题
本文章包含以下内容 1.画出最速下降法的算法流程图: 2.MATLAB 编写用数值微分法的梯度计算函数(函数式 M 文件): 3.MATLAB 编写最速下降法求解无约束优化问题的函数,要求采用黄金分割 ...
- 机器学习之求解无约束最优化问题方法(手推公式版)
文章目录 前言 1. 基础知识 1.1 方向导数 1.2 梯度 1.3 方向导数与梯度的关系 1.4 泰勒展开公式 1.5 Jacobian矩阵与Hessian矩阵 1.6 正定矩阵 2. 梯度下降法 ...
- matlab粒子群算法求解无约束最小值,pso matlab粒子群算法和遗传 是解决约束优化问题,无 和多目标 的优 259万源代码下载- www.pudn.com...
文件名称: pso下载 收藏√ [ 5 4 3 2 1 ] 开发工具: matlab 文件大小: 51 KB 上传时间: 2016-06-01 下载次数: 0 提 供 者: 孙志勇 详细说 ...
- 牛顿法求解无约束最优化问题
记泰勒公式 舍去高阶项 在导数为0时候取得极值,令,以上式子可以变形为 继续整理可以得到 通过观察上式,我们可以发现,当给出一个初始点a的时候,我们可以通过泰勒公式用a点的一阶导数与二阶导数还有a的值 ...
- 用MATLAB实现FR共轭梯度法求解实例
问题:编写FR共轭梯度法用于求解min x21−x1x2+x22+2x1−4x2x_1^2-x_1x_2+x_2^2+2x_1-4x_2 初始点取为 x0=(2,2)Tx_0=(2,2)^T frcg ...
- 无约束最优化问题的一般结构与规划方法
无约束问题与最优解 最优性条件 一维线性搜索 精确线性搜索 直接搜索法 非精确一维搜索法 下降算法的收敛性与收敛速度 无约束规划 最速下降法 Newton法 Newton-最速下降混合算法 阻尼New ...
- 计算智能课程设计(遗传算法求解无约束单目标优化问题)
写在前面 前天写完了基于传递闭包的模糊聚类,今天准备写"遗传算法求解无约束单目标优化问题".昨天和npy玩了一下午,去齐白石艺术学院看了画展,一起在最高处看了夕阳,并在落日前接吻. ...
- 利用MATLAB编程实现系统传递函数的构建以及它们之间进行串联、并联、反馈时的构建方法
本文主要介绍如何利用MATLAB编程实现系统传递函数的构建以及它们之间进行串联.并联.反馈时的构建方法 一.传递函数的构建方法 首先 ,我们把想要构建的传递函数分子和分母的系数按照阶次从 ...
- Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示
Matlab:利用Matlab编程实现模拟分子布朗运动的动画展示 目录 输出结果 实现代码 输出结果 实现代码 %Brownian motion clf; n=20; s=0.02; x = rand ...
最新文章
- threeJS 中数学相关内容
- pythonmysql查询转list_使用Python将Mysql的查询数据导出到文件的方法
- ELK - 实用日志分析系统
- 加入docker管理员_如何使系统管理员和开发人员同意Docker
- 为IBM 3650 M2 服务器配置RAID卡(一)
- 多视角子空间学习系列之 MCCA (Multi-view CCA) 多视角CCA Horst算法
- 河南科技学院计算机专业是几本,河南科技学院是几本
- HenCoder自定义View学习整理
- 一卡通管理系统总体设计
- 你想要的短视频音效都在这里!最火爆最热门音效!
- 微信小程序支付接口对接总结
- 实证研究使用正交化和自助法寻找显因
- win7计算机 我的文档,我的文档在哪,详细教您win7“我的文档”在哪里
- 0 win10重装partition_win10换win7,U盘装机错误,Error:partition 0 ended too near怎么回事?怎么修?...
- 如何解决直播中黑屏、花屏、闪屏问题?10 分钟搞明白
- mac终端Login Incorrect问题
- Canvas API详解
- 螺栓、螺柱、螺钉的分类
- JAVA学习路线图 【黑马版】
- 股权和更高的薪资应该选那个呢?
热门文章
- 控制策略为最大功率跟踪(mppt),跟踪方法为扰动观察法,MPPT控制系统主要由光伏阵列、DCDC变换器
- 《惢客创业日记》2018.12.11(周二) 创业者从0到1的10个阶段(二)
- 安拆网:钢管扣件检测标准是什么?
- svn客户端访问不了服务器解决办法
- 【附源码】Python计算机毕业设计实验室安全准入考试系统
- 将边缘计算、5G应用开发进行到底!
- 动态规划-leetcode#10-最长回文
- 2022年数维杯国际大学生数学建模挑战赛D题三重拉尼娜事件下极端气候灾害损失评估与应对策略研究解题过程
- openssh防火墙
- 男孩去铁路好还是学计算机好,男生铁路专业就业前景 铁路学校好就业吗