对于无约束优化问题,一般是采用迭代法进行计算,其标准格式为:

x(k+1)=x(k)+a*s 其中a称作步长,s称作方向。步长a一般可以通过一维不精确线搜索(Armijo准则)计算,而根据方向s选择的不同,无约束优化问题一般有最速下降法、BFGS、共轭梯度法,牛顿及拟牛顿法等等,今天只讲最速下降法。

最速下降法的前进方向是目标函数f(x)的负梯度方向。其C语言代码如下:

// Zhuxu12-4.cpp : 定义控制台应用程序的入口点。
//

include “stdafx.h”

include <math.h>

float fun(float x, float y)
{
return (1 - x)(1 - x) + 100 (y - x*x)*(y - x*x);
}

void gfun(float x, float y, float& g1, float& g2)
{
g1 = (-2)(1 - x) - 400*x(y - x*x);
g2 = 200*(y - x*x);
}

float min(float a, float b)
{
return (a<b) ? a : b;
}

int armijo(float x, float y, float rho, float sigma, float dx, float dy)
{
float x1, y1;
float g1, g2;
gfun(x, y, g1, g2);
int i = 0;
int imax = 100;
while (i<=imax)
{
x1 = x + pow(rho,i)dx;
y1 = y + pow(rho, i)*dy;
if (fun(x1, y1) <= fun(x, y) + sigma*pow(rho, i)
(g1*dx + g2*dy))
break;
i = i + 1;
}
return i;
}

int main(int argc, char* argv[])
{
float x0, y0;
float x, y;
printf(“Please input the initial value:x0,y0\n”);
scanf_s(“%f ,%f”, &x0, &y0);
printf(“x=%f,y=%f\n”, x0, y0);
int max_iter = 50000;
float g1,g2,s1,s2;
x = x0;
y = y0;
float rho=0.5f;
float sigma = 0.2f;
float EPS = 1e-4f;
int i = 0;
int j = 0;
while (i <= max_iter)
{
i = i + 1;
printf(“第%d次:\n”, i);
gfun(x, y, g1, g2);
if (sqrt(pow(g1, 2) + pow(g2, 2)) < EPS)
break;
s1 = -g1;
s2 = -g2;
j= armijo(x, y, rho, sigma, s1, s2);
printf(“搜索次数:%d\t”, j);
printf(“最佳步长:%f\n”, pow(rho,j));
x =  x + pow(rho, j)*s1;
y = y + pow(rho, j)*s2;
}
printf(“最优解是:x=%f,y=%f\n”, x,y);
return 0;
}

https://blog.csdn.net/u010780839/article/details/78781600

最速下降法的C语言实现相关推荐

  1. c语言中求匀加速直线速度,速求C语言编程题 c语言编程速度求

    导航:网站首页 > 速求C语言编程题 c语言编程速度求 速求C语言编程题 c语言编程速度求 相关问题: 匿名网友: #include //计算行元素和 void CountRow(int a[] ...

  2. 数学C语言编程,数学规划 (最速下降法,c语言编程).doc

    数学规划 (最速下降法,c语言编程).doc 数 学 规 划 课 程 设 计 题目:用最速下降法求解无约束非线性规划问题 姓名: 学号: 成绩: 2011年6月 用最速下降法求解无约束非线性规划问题 ...

  3. 最速下降法 c 语言程序,工程優化方法中的“最速下降法”和“DFP擬牛頓法”的 C 語言實現...

    這個小程序是研一上學期的"工程優化"課程的大作業.其實這題本可以用 MATLAB 實現,但是我為了鍛煉自己薄弱的編碼能力,改為用 C 語言實現.這樣,就得自己實現矩陣的運算(加減乘 ...

  4. 随机梯度下降C语言,梯度下降法Gradient descent(最速下降法Steepest Descent)

    easyui 中datagrid 点击行的事件 $('#datagrid 的ID').datagrid({                onClickRow:function(index,data) ...

  5. 最优化评分法c语言,最优化方法及其实现(Optimization-Algorithm)C语言

    Optimization-Algorithm 优化算法--C语言 ##A Record for the Methods of Optimization.(优化算法--C语言) Author: Amoi ...

  6. R语言与机器学习学习笔记(分类算法)

    转载自:http://www.itongji.cn/article/0P534092014.html 人工神经网络(ANN),简称神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型.神经 ...

  7. 最优化方法及其实现(Optimization-Algorithm)C语言

    Optimization-Algorithm 优化算法--C语言 ##A Record for the Methods of Optimization.(优化算法--C语言) Author: Amoi ...

  8. 微分法MATLAB语言程序,MATLAB语言常用算法程序集 102MB 百度网盘

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x MATLAB语言常用算法程序集 102MB 百度网盘 点击进入 上篇 matlab基础 ...

  9. 机器学习中的数学原理——梯度下降法(最速下降法)

    好久没更新了,确实是有点懒了,主要是这两天返乡在隔离(借口).这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎私信或者评论区留言!这一篇就更新 ...

最新文章

  1. 使用CruiseControl.Net全面实现持续集成
  2. 学界 | 和清华大学自然语言处理与社会人文计算实验室一起读机器翻译论文
  3. 9-Building FIP images with support for Trusted Board Boot
  4. bat如何执行完上一条命令_一条更新语句是如何执行的?
  5. Shell脚本学习-阶段二十九-运维使用的
  6. 查看磁盘阵列 使用率(简单)
  7. php字库,TCPDF生成内置字库的PDF
  8. Charles使用最全指南
  9. ncm转MP3的工具
  10. python开发cms_Wagtail介绍 — 基于Django的Python CMS
  11. 实时进销存如何帮助企业从销售、采购到库存实现一体化管理?
  12. word转PDF图片消失问题
  13. Immanuel Kant and Russell
  14. python(for in 用法)
  15. 硬盘快满了,怎么办?查找重复文件
  16. 【大学生软件测试基础】三角形类型 - 白盒测试 - 语句覆盖 -02
  17. [附源码]计算机毕业设计JAVA汽车租赁系统
  18. (调试)图像调试基本术语
  19. Python004~005
  20. 每个人心中都是有那一颗朱砂痣,不是美人却是美食

热门文章

  1. Docker快速搭建邮件服务器Modoboa
  2. php 包 排行,PHP 的 Phar 包原来性能这么强!
  3. 配置hosts快速访问GitHub
  4. C#LeetCode刷题之#387-字符串中的第一个唯一字符(First Unique Character in a String)
  5. vulcan 编程_如何用Next代替流星— Vulcan Next Starter简介
  6. web开发程序员有几种_每个程序员都应该知道的10种流行的Web开发工具
  7. java组合与继承始示例_排列组合:用公式示例解释的差异
  8. 服务器控件的优点和缺点_什么是无服务器架构? 它的优点和缺点是什么?
  9. mysql crud_如何使用Laravel和MySQL构建您的第一个CRUD应用
  10. openstack网络指南_性格内向的战术网络指南