工程优化目标函数的几种极值求解方法c++编程

合集下载

目标函数的几种极值求解方法

目标函数的几种极值求解方法

目标函数的几种极值求解方法在数学和优化领域中,目标函数是一个描述优化问题的函数,其目标是将该函数的值最小化或最大化。

目标函数的极值求解方法主要有以下几种方法:1.数值方法:数值方法是通过计算目标函数在一组特定点上的近似值来确定极值。

其中最简单的方法是取目标函数的一些特定点,并计算这些点上的函数值。

然后根据计算结果确定极值。

这些特定点通常是目标函数的极值点的近似值。

例如,可以使用微分方法来估计目标函数的极值点。

2.数学分析方法:数学分析方法是通过对目标函数进行数学分析来确定极值。

其中最常用的方法是求解目标函数的导数或二阶导数,并设置导数等于零来求解函数的极值点。

这个方法适用于一些简单的函数,例如多项式函数。

它可以精确地确定函数的极值点。

3.迭代方法:迭代方法是通过不断迭代目标函数来逼近极值。

迭代方法通常需要一个初始点,然后在每一步中更新该点,直到满足一些停止条件。

最常用的迭代方法是梯度下降法和牛顿法。

梯度下降法通过不断沿着函数的梯度方向进行迭代来逐渐接近极小值。

牛顿法将函数近似为一个二次函数,并使用二次函数的极值点来逼近原函数的极值点。

4.线性规划方法:线性规划方法是对一类特殊的目标函数进行极值求解的方法。

线性规划问题是指包含一组线性不等式或等式约束条件的目标函数的最小化或最大化问题。

线性规划方法可以通过求解线性规划问题的对偶问题来确定原问题的极值。

这个方法对于一些特殊的线性规划问题非常高效。

5.元启发式方法:元启发式方法是一种基于经验和启发式规则来确定目标函数极值的方法。

这些方法通常使用一些随机算法和优化算法,例如遗传算法、粒子群算法等。

元启发式方法通过不断目标函数的解空间来逼近极值。

总之,目标函数的极值求解方法有多种选择,可以根据具体的问题和需求选择合适的方法。

不同的方法有不同的适用范围和计算复杂度,需要根据具体情况进行选择和调整。

目标函数的几种极值求解方法

目标函数的几种极值求解方法

目标函数的几种极值求解方法目标函数是数学模型中的一个重要部分,它描述了问题的目标或者优化方向。

在实际应用中,求解目标函数的极值是一个重要的问题。

这篇文章将介绍目标函数的几种极值求解方法。

一、解析法解析法是指通过对目标函数进行数学推导和分析,找到极值的解析表达式。

这种方法适用于目标函数是一些简单的函数形式的情况。

常见的解析法包括:1.导数法:通过计算目标函数的导数,找到导数为零的点,这些点即为目标函数的极值点。

2.二阶导数法:在导数法的基础上,继续计算二阶导数,通过二阶导数的正负性判断极值点的类型(极大值点还是极小值点)。

3.泰勒展开法:通过将目标函数在其中一点进行泰勒展开,得到一个近似的二次函数模型,在该模型上求解极值问题。

解析法的优点是求解速度快,得到的解析表达式可以直接进行数值计算。

但是,解析法只适用于特定的函数形式,对于复杂的目标函数,可能很难得到解析解。

二、迭代法迭代法是指通过不断迭代目标函数的其中一个起始点,逐步逼近极值点的方法。

迭代法的基本思想是通过不断更新目标函数的当前点,使其逐渐趋向极值点。

常见的迭代法包括:1.简单迭代法:选择一个适当的起始点,通过不断迭代目标函数,直至收敛到一些极值点。

2.牛顿法:通过利用目标函数的一阶和二阶导数信息,不断更新当前点,使其逐渐逼近极值点。

3.拟牛顿法:在牛顿法的基础上,通过近似估计目标函数的二阶导数,减少计算二阶导数的开销。

迭代法的优点是适用于一般的函数形式,可以通过不断迭代逼近任意精度的极值点。

但是,迭代法的收敛性和稳定性很大程度上依赖于初始点的选择和算法的设计,收敛速度也可能较慢。

三、启发式算法启发式算法是一类基于自然界中的一些现象、规律或者人类的智慧的算法。

它们通过模拟自然界中一些现象的过程,来求解优化问题。

启发式算法一般不保证找到全局最优解,但通常能找到较好的解。

常见的启发式算法包括:1.遗传算法:模拟自然界中生物的进化过程,通过随机选择、交叉和变异操作,不断优化种群的适应度,最终找到较优解。

优化问题知识点总结

优化问题知识点总结

优化问题知识点总结引言优化问题是现实生活中普遍存在的一类问题,其目标是找到一种最优的决策方案,以便将某种目标函数最大化或最小化。

优化问题涉及到数学、计算机科学、经济学等多个领域,涵盖了众多的方法和技术。

本文将对优化问题的基本概念、解决方法以及相关领域的应用进行总结,旨在帮助读者建立对优化问题的基本认识。

一、优化问题的基本概念1.1 优化问题的定义优化问题是指在一定的约束条件下,寻找一个目标函数的最小值或最大值的问题。

其基本形式可以表示为:Minimize (或Maximize) f(x)Subject to g(x) ≤ 0h(x) = 0其中,f(x)为目标函数,g(x)和h(x)分别为不等式约束和等式约束。

1.2 优化问题的分类根据目标函数和约束条件的性质,优化问题可以分为以下几类:(1)线性规划:目标函数和约束条件都是线性的优化问题。

(2)非线性规划:目标函数或者约束条件中含有非线性的优化问题。

(3)整数规划:优化问题的决策变量是整数的优化问题。

(4)整数线性规划:目标函数和约束条件都是线性的整数优化问题。

(5)多目标优化:存在多个目标函数的优化问题。

(6)约束多目标优化:存在多个目标函数和约束条件的优化问题。

1.3 优化问题的求解优化问题的求解方法包括数学方法和计算机方法两种。

数学方法主要包括拉格朗日乘子法、KKT条件等,而计算机方法则主要涉及到各种优化算法,如梯度下降、遗传算法、蚁群算法等。

二、优化问题的解决方法2.1 数学方法(1)拉格朗日乘子法:通过引入拉格朗日乘子,将约束条件融入目标函数,然后求解得到目标函数的鞍点。

(2)KKT条件:Karush-Kuhn-Tucker条件是解非线性规划问题的充分必要条件,它扩展了拉格朗日乘子法。

(3)搜索方法:包括黄金分割法、牛顿法等,通过搜索目标函数的极值点来求解优化问题。

2.2 计算机方法(1)梯度下降法:通过沿着函数梯度的反方向更新参数,最终找到函数的最小值点。

数值优化算法

数值优化算法

数值优化算法在现代科学和工程中,数值优化算法被广泛应用于解决各种复杂问题。

数值优化算法是一种寻找函数极值的方法,这些函数可能具有多个自变量和约束条件。

数值优化算法对于在实际问题中找到最佳解决方案至关重要。

本文将介绍几种常见的数值优化算法及其应用。

一、梯度下降法梯度下降法是一种常用的数值优化方法。

它通过寻找损失函数的梯度来更新参数,以在每次迭代中逐步接近极值点。

梯度下降法的优势在于简单易实现,并且在大规模数据集上的表现良好。

这使得它成为许多机器学习算法中参数优化的首选方法。

二、牛顿法牛顿法是一种用于寻找函数极值点的迭代优化算法。

它利用函数的一阶导数和二阶导数信息来逼近极值点。

与梯度下降法相比,牛顿法的收敛速度更快,但它的计算复杂度更高。

牛顿法在求解高维问题或拟合复杂曲线时表现出色。

三、遗传算法遗传算法是一种模拟生物遗传和进化过程的优化算法。

它通过使用选择、交叉和变异等操作,模拟自然界的进化规律,来寻找函数的最优解。

遗传算法适用于复杂问题,能够在搜索空间中找到全局最优解。

在函数不可导或离散问题中,遗传算法能够提供有效的解决方案。

四、模拟退火算法模拟退火算法是一种启发式搜索算法,模拟了金属退火过程中原子随温度变化的行为。

模拟退火算法以一定的概率接受更差的解,并以较低的概率逐渐收敛到全局最优解。

模拟退火算法对局部极小点有一定的免疫能力,并且在大规模离散优化问题中表现出优越性。

五、粒子群算法粒子群算法是一种基于群体行为的优化算法。

它模拟了鸟群觅食的行为,通过迭代寻找问题的最优解。

粒子群算法通过评估适应度函数来引导粒子的移动,从而逐渐靠近最优解。

这种算法适用于多目标优化问题和高维函数优化。

结论数值优化算法在科学和工程领域扮演着至关重要的角色。

梯度下降法、牛顿法、遗传算法、模拟退火算法和粒子群算法是几种常见的数值优化方法。

它们各自具有不同的优势和适用范围,可以根据问题的特点选择合适的优化算法。

通过应用这些优化算法,可以帮助科学家和工程师在实际问题中找到最佳解决方案,推动技术的进步和创新。

matlab极值点

matlab极值点

MATLAB极值点一、引言MATLAB是一种强大的数学建模和仿真软件,广泛应用于科学研究、工程设计和数据分析等领域。

在MATLAB中,寻找极值点是一项常见的任务,它对于优化问题的求解和函数的分析具有重要意义。

本文将详细介绍MATLAB中寻找极值点的方法和应用。

二、MATLAB中的极值点寻找方法2.1 梯度下降法梯度下降法是一种常用的优化算法,它通过迭代的方式逐步逼近函数的极小值点。

在MATLAB中,可以使用fminunc函数来实现梯度下降法。

该函数需要提供一个目标函数和初始点,然后通过迭代计算来寻找极小值点。

2.2 全局优化方法全局优化方法是一种寻找函数全局极小值点的算法。

MATLAB中提供了fmincon函数来实现全局优化。

该函数需要提供一个目标函数和约束条件,然后通过迭代计算来寻找全局极小值点。

2.3 网格搜索法网格搜索法是一种简单但有效的寻找函数极值点的方法。

在MATLAB中,可以使用gridsearch函数来实现网格搜索法。

该函数需要提供一个目标函数、搜索范围和步长,然后通过遍历搜索来寻找极值点。

三、MATLAB中极值点的应用3.1 函数优化在许多实际问题中,需要寻找一个函数的最优解。

例如,在工程设计中,需要找到一个函数的最小值点来满足设计要求。

MATLAB中的优化工具箱提供了丰富的函数和方法来解决这类问题。

3.2 数据分析在数据分析中,寻找极值点可以帮助我们理解数据的特征和趋势。

例如,我们可以通过寻找时间序列数据的极大值点来找到数据的峰值。

MATLAB中的统计工具箱提供了各种函数和方法来进行数据分析和极值点的寻找。

3.3 图像处理在图像处理中,寻找图像的极值点可以帮助我们定位图像的边缘和特征点。

例如,在边缘检测中,我们可以通过寻找图像的极小值点来找到图像的边缘。

MATLAB中的图像处理工具箱提供了各种函数和方法来进行图像处理和极值点的寻找。

四、总结本文介绍了MATLAB中寻找极值点的方法和应用。

函数极值点求解方法

函数极值点求解方法

函数极值点求解方法引言函数的极值点是指函数在某个区间内取得最大值或最小值的点。

求解函数的极值点是数学中的一个重要问题,具有广泛应用价值。

本文将介绍几种常见的函数极值点求解方法。

二次函数的极值点求解方法当函数是一个二次函数时,可以使用求导法来求解极值点。

具体步骤如下:1. 将函数表示为二次函数的标准形式:$f(x)=ax^2+bx+c$。

2. 求导函数:$f'(x)=2ax+b$。

3. 令导数等于0,解方程得到极值点的横坐标:$2ax+b=0$,解得$x=-\frac{b}{2a}$。

4. 将横坐标代入原函数中,求得纵坐标。

高阶函数的极值点求解方法对于高阶函数,求解极值点可以依靠计算机算法进行近似求解。

其中,一种常用的方法是牛顿法。

具体步骤如下:1. 初始化变量,设初始点$x_0$。

2. 使用公式:$x_{n+1}=x_n-\frac{f(x_n)}{f'(x_n)}$,进行迭代,直到满足终止条件。

3. 最终迭代得到的$x_n$就是函数的极值点。

数值优化算法求解极值点除了上述方法外,还可以使用数值优化算法来求解函数的极值点。

常见的数值优化算法有梯度下降法、粒子群优化等。

这些算法一般适用于函数复杂、无法用解析方法求解的情况。

结论本文介绍了几种常见的函数极值点求解方法。

对于简单的二次函数,我们可以使用求导法求解极值点;对于复杂的高阶函数,可以采用牛顿法进行近似求解;而对于更加复杂的函数,可以使用数值优化算法来求解。

在实际应用中,选择合适的求解方法可以提高求解效率,为问题的解决提供有效的支持。

多目标优化的求解方法

多目标优化的求解方法

多目标优化的求解方法多目标优化是指在优化问题中同时优化多个目标函数的技术。

多目标优化在很多实际问题中应用广泛,如工程设计、金融投资组合优化、机器学习、图像处理等领域。

与传统的单目标优化问题不同,多目标优化问题具有多个相互独立的目标函数。

针对多目标优化问题,目前存在许多求解方法。

下面将介绍一些常见的多目标优化求解方法。

1. Pareto优化方法Pareto优化方法是多目标优化的经典方法之一、它通过定义一个被称为Pareto前沿的概念来解决多目标优化问题。

Pareto前沿表示在没有任何目标函数值变坏的情况下,存在一些解的目标函数值比其他解的目标函数值要好。

Pareto优化方法通过在Pareto前沿中最优解来解决多目标优化问题。

它的主要优点是可以提供一系列不同权衡的最优解。

2.加权和方法加权和方法是将多目标优化问题转化为单目标优化问题的一种常见方法。

它通过为每个目标函数分配一个权重,将多个目标函数线性组合为一个综合目标函数。

然后,可以使用传统的单目标优化算法来求解转化后的单目标优化问题。

加权和方法的优点是简单易行,但它忽略了目标之间的相互关系。

3. Pareto遗传算法Pareto遗传算法是一种进化算法,通过模拟自然选择和遗传机制来求解多目标优化问题。

它通过使用多个种群来维护Pareto前沿中的解,并通过交叉、变异和选择等基因操作来并逼近Pareto前沿。

Pareto遗传算法的优点是可以在比较短的时间内找到Pareto前沿上的一系列近似最优解。

4.支配法支配法是一种常见的多目标优化求解方法。

它通过比较目标函数值来确定解的优劣。

一个解被称为支配另一个解,如果它在所有目标上都至少不逊于另一个解,并且在至少一个目标上更优。

通过使用支配关系,可以将多目标优化问题转化为对一组解进行排序的问题。

然后,可以选择Pareto前沿上的最优解作为问题的解。

5.进化策略进化策略是由进化算法发展而来的一种多目标优化求解方法。

工程优化方法第1章

工程优化方法第1章
表示 3 )模型求解:数学方法及其他方法 4 )解的检验:制定检验准则、讨论与现实的
一致性 5 )灵敏性分析:参数扰动对解的影响情况 6 )解的实施:回到实践中 7 )后评估:考察问题是否得到完满解决
工程优化方法第1章
§3 基本概念 1、最优解与极值点
p m x iR n n fx s.t. gix0
设 f: D→ R 1( D R)n (D-定义域) (1) x 为D的一个内点; (2) f(x)在 x 可微; (3) x 为f(x)的极值点;
则: f x 0
工程优化方法第1章
Th3(充分条件) : 设 f: D→ R(1 D )Rn(D-定义域)
(1) x 为D的一个内点; (2) f(x)在 x 处二次可微;
2 f
x12
2 f x2x1
2 f
x
n
x1
2 f x1x2
2 f x22
2 f x1x3 2 f x2x3
2 f
2 f
xnx2 xnx3
2 f
x1xn
2 f
x2xn
2 f
xn2
线性函数:f (x) = cTx + b , 2f (x) = 0
二次函数:f (x) = (1/2) xTQx + cTx + b,
则 x ≤ 0, ≥ 0 . (2)若 xTy ≤ , y L Rn ,
则 x L, ≥ 0 .(特别, L=Rn时,x =0)
定理的其他形式:
“若 xTy ≤ , yRn 且 y ≤ 0,则 x ≥ 0, ≥ 0 .” “若 xTy ≥ , yRn 且 y ≥ 0,则 x ≥ 0, ≤ 0 .” “若 xTy ≥ , yRn 且 y ≤ 0,则 x ≤ 0, ≤ 0 .” “若 xTy ≥ , y L Rn , 则 x L, ≤ 0 .”
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目标函数极值求解的几种方法题目:分别用最速下降法,牛顿法,共轭梯度法,拟牛顿法求函数24232221)5(5)1()5(5)1(-+-+-+-=x x x x f 的最小值,初始点自拟。

一维搜索法:迭代下降算法大都具有一个共同点,这就是得到点()k x 后需要按某种规则确定一个方向()k d ,再从()k x 出发,沿方向()k d 在直线(或射线)上求目标函数的极小点,从而得到()k x 的后继点()1+k x ,重复以上做法,直至求得问题的解,这里所谓求目标函数在直线上的极小点,称为一维搜索。

一维搜索的方法很多,归纳起来大体可以分为两类,一类是试探法:采用这类方法,需要按某种方式找试探点,通过一系列的试探点来确定极小点。

另一类是函数逼近法或插值法:这类方法是用某种较简单的曲线逼近本来的函数曲线,通过求逼近函数的极小点来估计目标函数的极小点。

这里采用的是第一类试探法中的黄金分割法。

实现过程如下:⑴ 置初始区间[11,b a ]及精度要求L>0,计算试探点1λ和1μ,计算函数值()1λf 和()1μf ,计算公式是:()1111382.0a b a -+=λ,()1111618.0a b a -+=μ。

令k=1。

⑵ 若La b k k <-则停止计算。

否则,当()K f λ>()k f μ时,转步骤⑶;当()K f λ≤()k f μ时,转步骤⑷ 。

⑶ 置kk a λ=+1,kk b b =+1,kk μλ=+1,()1111618.0++++-+=k k k k a b a μ,计算函数值()1+k f μ,转⑸。

⑷ 置kk a a =+1,kk b μ=+1,kk μμ=+1,()1111382.0++++-+=k k k k a b a λ,计算函数值()1+k f λ,转⑸。

最速下降法实现原理描述:在求目标函数极小值问题时,总希望从一点出发,选择一个目标函数值下降最快的方向,以利于尽快达到极小点,正是基于这样一种愿望提出的最速下降法,并且经过一系列理论推导研究可知,负梯度方向为最速下降方向。

最速下降法的迭代公式是()()()k k k k d x x λ+=+1,其中()k d 是从()k x 出发的搜索方向,这里取在点()k x 处最速下降方向,即()()k k x f d -∇=。

k λ是从()k x 出发沿方向()k d 进行的一维搜索步长,满足()()()()()()k k k k k d x f d x f λλλ+=+≥0min 。

实现步骤如下:⑴ 给定初点()n R x ∈1 ,允许误差0>ε,置k=1。

⑵ 计算搜索方向()()k k x f d -∇=, 若()ε≤k d ,则停止计算;否则,从()k x 出发,沿方向()k d 进行的一维搜索,求k λ,使()()()()()()k k k k k d x f d x f λλλ+=+≥0mi n 。

⑶ ()()()k k k k d x x λ+=+1,置k=k+1返回步骤 ⑵。

牛顿法牛顿法迭代公式:()()()k k k k d x x λ+=+1,()k d 是在点()k x 处的牛顿方向,()()()()()k k k xf xf d∇-∇=-12,kλ是从()k x 出发沿牛顿方向()k d 进行搜索的最优步长。

⑴ 给定初点()n R x ∈1 ,允许误差0>ε,置k=1。

⑵ 计算()()k k x f g ∇=, 若()ε≤k g ,则停止计算;否则,转⑶。

⑶ 计算()()()k k k g x f d 12--∇=,从()k x 出发,沿方向()k d 进行的一维搜索,求k λ,使()()()()()()k k k k k d x f d x f λλλ+=+≥0min ,()()()k k k k d x x λ+=+1,置k=k+1返回步骤 ⑵。

共轭梯度法若()()()k d d d ,,,21 是n R 中k 个方向,它们两两关于A 共轭,即满足()()kj i j i Addj Ti ,,1,;,0 =≠=,称这组方向为A 的k 个共轭方向。

共轭梯度法的基本思想是把共轭性与最速下降法相结合,利用已知点处的梯度构造一组共轭方向,并沿这组方向进行搜索,求出目标函数的极小点,根据共轭方向的基本性质这种方法具有二次终止性。

实现步骤如下:⑴ 给定初点()n R x ∈1 ,允许误差0>ε; ⑵ 若ε≤∇)(1x f ,则停止计算;否则,转⑶; ⑶ 置()()()11x f d -∇=,k=1。

⑷ 作一维搜索,求k λ,满足()()()()()()k k k k k d x f d x f λλλ+=+≥0min ;⑸ 令()()()k k k k d x x λ+=+1,求()()()11++∇=k k x f g 。

⑹ 若()ε≤+1k g ,则停止计算;否则,转⑺; ⑺ 若k=n,则令()()11+=n x x ,转⑶;否则,转8);⑻ 令()()k k k k d g d β+-=++)1(1,其中()()()()221k k k xg xg +=β,置k=k+1,转⑷。

程序#include<stdio.h> #include<math.h> #include<iostream.h>#define N 100double F(double x[],double p[],double xi[],double ba[],int n,double t) { double f=0; int i;for(i=0;i<n;i++)f=f+xi[i]*(x[i]+t*p[i]-ba[i])*(x[i]+t*p[i]-ba[i]); return f;}double HJFC(double x[],double p[],double xi[],double ba[],int n) {double a=0,b=10,x1,x2,f1,f2,e=0.0001,y; x2=a+0.618*(b-a); f2=F(x,p,xi,ba,n,x2); x1=a+0.382*(b-a); f1=F(x,p,xi,ba,n,x1);while(fabs(b-a)>e){if(f1<f2){b=x2;x2=x1;f2=f1;x1=a+0.382*(b-a);f1=F(x,p,xi,ba,n,x1);}else if(f1==f2){a=x1;b=x2;x2=a+0.618*(b-a);f2=F(x,p,xi,ba,n,x2);x1=a+0.382*(b-a);f1=F(x,p,xi,ba,n,x1);}else{a=x1;x1=x2;f1=f2;x2=a+0.618*(b-a);f2=F(x,p,xi,ba,n,x2);}}y=0.5*(b+a);return y;}void zuisu(double x[],double xi[],double ba[],int n) {int i,k=1;double sum,eps,arph,g[N],p[N];eps=0.000001;sum=0;for(i=0;i<n;i++){g[i]=2*xi[i]*(x[i]-ba[i]);p[i]=-g[i];sum=sum+p[i]*p[i];}i=0;while(sqrt(sum)>eps&&i<N){sum=0;arph=HJFC(x,p,xi,ba,n);for(i=0;i<n;i++){x[i]=x[i]+arph*p[i];g[i]=2*xi[i]*(x[i]-ba[i]);p[i]=-g[i];sum=sum+p[i]*p[i];}printf("第%d次迭代:\n\n",k);printf("步长lambda=%f\n",arph);for(i=0;i<n;i++)printf("x[%d]=%f\t",i,x[i]);printf("\n\n");k++;}printf("最后结果为:\n");for(i=0;i<n;i++)printf("x[%d]=%f\n",i,x[i]);}void gonge(double x[],double xi[],double ba[],int n) {int k=1,i;double sum1,sum2,eps,bita,arph,g[N],p[N];eps=0.000001;sum1=0;for(i=0;i<n;i++){g[i]=2*xi[i]*(x[i]-ba[i]);sum1+=g[i]*g[i];}while((sqrt(sum1)>eps)&&(k<N)){if(k==1){for(i=0;i<n;i++)p[i]=-g[i];bita=0;}else{bita=sum1/sum2;for(i=0;i<n;i++)p[i]=-g[i]+bita*p[i];}arph=HJFC(x,p,xi,ba,n);sum1=0;sum2=0;for(i=0;i<n;i++){x[i]=x[i]+arph*p[i];g[n+i]=g[i];g[i]=2*xi[i]*(x[i]-ba[i]);sum1+=g[i]*g[i];sum2+=g[n+i]*g[n+i];}printf("第%d次迭代:\n\n",k);printf("步长lambda=%f\t",arph);printf("bita=%f\t\n",bita);for(i=0;i<n;i++)printf("x[%d]=%f\t",i,x[i]);printf("\n\n");k++;}printf("最后结果为:\n");for(i=0;i<n;i++)printf("x[%d]=%f\n",i,x[i]);}void niudun(double x[],double xi[],double ba[],int n) {int k=1,i,j;double sum,eps,arph,g[N],p[N],h[N][N];eps=0.000001;sum=0;for(i=0;i<n;i++){g[i]=2*xi[i]*(x[i]-ba[i]);sum+=g[i]*g[i];}printf("过程\n\n");while((sqrt(sum)>eps)&&(k<N)){for(i=0;i<n;i++)for(j=0;j<n;j++)if(i==j)h[i][j]=-1/(2*xi[i]);elseh[i][j]=0;for(i=0;i<n;i++)p[i]=0;for(i=0;i<n;i++)for(j=0;j<n;j++)p[i]=p[i]+h[i][j]*g[j];arph=HJFC(x,p,xi,ba,n);sum=0;for(i=0;i<n;i++){x[i]=x[i]+arph*p[i];g[i]=2*xi[i]*(x[i]-ba[i]);sum+=g[i]*g[i];}printf("第%d次迭代:\n\n",k);printf("步长lambda=%f\n",arph);for(i=0;i<n;i++)printf("x[%d]=%f\t",i,x[i]);printf("\n\n");k++;}printf("最后结果为:\n");for(i=0;i<n;i++)printf("x[%d]=%f\n",i,x[i]);}void main(){int i,n;double x[N],xi[N],ba[N];printf("请输入函数的元数:");scanf("%d",&n);printf("请输入函数的系数:");for(i=0;i<n;i++)scanf("%lf",&xi[i]);printf("请输入ba[i]的值:");for(i=0;i<n;i++)scanf("%lf",&ba[i]);printf("请输入初始值:\n");for(i=0;i<n;i++)scanf("%lf",&x[i]);/* printf("最速下降法迭代过程:\n");zuisu(x,xi,ba,n);*//* printf("牛顿法迭代过程:\n");niudun(x,xi,ba,n);*/printf("共轭梯度法迭代过程:\n");gonge(x,xi,ba,n);}。

相关文档
最新文档