最速下滑法c语言程序,最速下降法 C语言.doc
最速下降法 C语言
1.最速下降法
#include "stdio.h"
#include "math.h"
double fun1(double x1,double x2) /*定义函数fun1为目标函数*/
{double y;
y=x1*x1-2*x1*x2+4*x2*x2+x1-3*x2;
return y;
}
void main()
{ double t, x1=1, x2=1,e=0.01, g[2], y, m;
int k=1; /*定义起始点为x1=0,x2=1,并定义精度为e=0.01*/
g[0]=2*x1-2*x2+1; /*目标函数对x1求偏导*/
g[1]=(-2)*x1+8*x2-3; /*目标函数对x2求偏导*/
m=(sqrt(g[0]*g[0]+g[1]*g[1])); /*对g[0]*g[0]+g[1]*g[1]求开方,将值赋给m*/
while(m>e&&k<=200) /*判断,当m>e时进行以下循环*/
{ t=((2*g[1]-2*g[0])*x1+(2*g[0]-8*g[1])*x2-g[0]+3*g[1])/(4*g[0]*g[1]-2*g[0]*g[0]-8*g[1]*g[1]); /*根据梯度法(最速下降法),利用梯度和海赛矩阵*/
x1=x1-g[0]*t; /*求步长t。 根据步长和梯度方向求出新的x1,x2*/
x2=x2-g[1]*t;
printf("迭代次数%d\n",k);
printf("搜索方向-%f,-%f,负梯度的模%f,步长%f\n",g[0],g[1],m,t);
printf("x的值%f,%f\n",x1,x2);
g[0]=2*x1-2*x2+1;
g[1]=(-2)*x1+8*x2-3;
m=(sqrt(g[0]*g[0]+g[1]*g[1])); /*计算新的m*/
printf("新的负梯度的模%f\n",m);
k++;
}
y=fun1(x1,x2); /*当m不满足m>e的时候退出循环,并计算fun1,*/
printf("分别输出x1,x2 %f,%f\n",x1,x2); /*将值赋给y,并输出。*/
printf("极小值y%f",y);
}
2.FR共轭梯度法
#include "stdio.h"
#include "math.h"
double fun1(double x1,double x2) /*定义函数fun1为目标函数*/
{double y;
y=x1*x1-2*x1*x2+4*x2*x2+x1-3*x2;
return y;
}
double fun2(double g[],double d[]) /*定义函数fun2为求步长的函数*/
{
double buchang;
buchang=-(g[0]*d[0]+g[1]*d[1])/(d[0]*(2*d[0]-2*d[1])+d[1]*((-2)*d[0]+8*d[1]));
return buchang;
}
void main()
{ double t, beta, x1=1, x2=1, d[2],g[4], y, m,e=0.01;
/*定义起始点为x1=0,x2=1,并定义精度为e=0.01*/
int k=1;
g[0]=2*x1-2*x2+1; /*目标函数对x1求偏导*/
g[1]=(-2)*x1+8*x2-3; /*目标函数对x2求偏导,求梯度*/
m=(sqrt(g[0]*g[0]+g[1]*g[1])); /*对g[0]*g[0]+g[1]*g[1]求开方,将值赋给m*/
while(m>e&&k<=200) /*判断,当m>e时进行以下循
最速下滑法c语言程序,最速下降法 C语言.doc相关推荐
- c语言线性顺序表,C语言程序——线性顺序表.doc
C语言程序--线性顺序表.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...
- c语言程序设计基础的考试题,c语言程序设计基础的考试题.doc
c语言程序设计基础的考试题.doc 程序设计基础(考试题) 读程序,写出程序的执行结果 1.若a是int型变量,且a=5,则下面表达式的值为:____3_______. (a+100)%2+a/2 2 ...
- 步进电机循环脉冲c语言程序,基于C语言的步进电机调速.doc
课 程 设 计 (论文) 题目 基于C语言的步进电机调速 目 录 0. 前言3 1.基本理论4 2. 方案设计4 2.1 步进电机5 2.2 8255芯片5 3. 硬件电路的工作原理5 3.1 步进电 ...
- 包括循环和分支的C语言程序,《C语言程序设计》分支和循环的C程序设计.ppt
<C语言程序设计>分支和循环的C程序设计.ppt 第三章 分支和循环的C程序设计 问题 一元二次方程根求解算法描述 3.1 程序的基本结构 ⒊循环结构Repetition ⒋复合语句 Co ...
- 最初编写的c语言程序称为,C语言程序设计复习参考答案
<C语言程序设计复习参考答案>由会员分享,可在线阅读,更多相关<C语言程序设计复习参考答案(46页珍藏版)>请在人人文库网上搜索. 1.随堂练习12]1. 下面哪些标识符属于合 ...
- c语言 程序循环,C语言程序设计-循环例子
<C语言程序设计-循环例子>由会员分享,可在线阅读,更多相关<C语言程序设计-循环例子(28页珍藏版)>请在人人文库网上搜索. 1.C 语言程序设计基础篇,第 7 章 简单程序 ...
- 简单说明c语言程序步骤,C语言的入门简介和三个简单的C语言程序详细说明
学习一种编程语言,最重要的是建立一个练习环境,边学边练才能学好.Keil软件是目前最流行开发80C51系列单片机的软件,Keil提供了包括C编译器.宏汇编.连接器.库管理和一个功能强大的仿真调试器等在 ...
- c语言程序前言,C语言 程序代码编写规范前言
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一个好的程序编写规范是编写高质量程序的保证.清晰.规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性 ...
- c语言程序基本设计,C语言程序的设计基本6.ppt
C语言程序的设计基本6 第六章 本章要点 建立循环程序设计的基本概念和逻辑思维 掌握循环程序设计的方法 6.1 if-goto 语句循环 一般形式: goto 标号: 标号:语句 其中:标号用标识符表 ...
- c语言 程序结集,c语言(结体程序设计).doc
c语言(结体程序设计) C语言程序设计实验报告 实验七.结构体程序设计 [实验目的] (1)掌握结构体类型的概念.定义和使用: (2)掌握结构体数组.结构体指针的定义和使用: [实验内容及步骤] 1. ...
最新文章
- php 日志处理类,php中自定义日志处理类(类似于java中的log4j)
- cocos2d-x初探学习笔记(7)--CCProgressTimer
- ng-template 和 TemplateRef.createEmbeddedView
- 再次献给那些心软的人!!!
- 电脑桌面打开计算机后出现两部分,为什么当打开电脑时,桌面会出现两个我的文档的窗口,是不是中病毒了,怎么处理啊...
- double类型数据做加和操作时会丢失精度问题处理
- 三次握手与accept()函数
- Effective C# Item4:使用Conditional特性代替#if条件编译
- python修改html,Python爬虫精简步骤 HTML基础
- char 类型的取值范围
- html、css实现导航栏5种常用效果
- 可通过qq聊天机器人拿下服务器权限
- 产品读书《文案训练手册》
- DeepDive自动化信息抽取---全网首发DeepDive偷工减料超速部署方式
- Python删除字符串中的空格和特殊字符
- linux系统fflush函数
- 【pwn】WMCTF2020 cfgo-CheckIn
- 价值投资私募基金三人谈
- JDBC 学习笔记1
- SWA实战:使用SWA进行微调,提高模型的泛化