最速下降法c语音编程及算例结果
时间: 2023-09-16 10:16:00 浏览: 77
最速下降法是一种常用的数值优化方法,可以用于求解无约束非线性优化问题。下面是最速下降法的C语言实现及算例结果:
```c
#include <stdio.h>
#include <math.h>
#define N 2 // 变量个数
#define MAX_ITER 100 // 最大迭代次数
#define TOLERANCE 1e-6 // 精度要求
double f(double x[]) { // 目标函数
return pow(x[0] - 2, 2) + pow(x[1] - 3, 2);
}
void gradient(double x[], double g[]) { // 梯度向量
g[0] = 2 * (x[0] - 2);
g[1] = 2 * (x[1] - 3);
}
int main() {
double x[N] = {0}; // 初始点
double g[N] = {0}; // 梯度向量
double alpha; // 步长
int iter = 0; // 迭代次数
do {
gradient(x, g); // 计算梯度
alpha = 0.01; // 步长
x[0] -= alpha * g[0]; // 更新x
x[1] -= alpha * g[1];
iter++; // 迭代次数加1
} while (iter < MAX_ITER && sqrt(g[0] * g[0] + g[1] * g[1]) > TOLERANCE); // 判断是否满足条件
printf("f_min = %lf\n", f(x)); // 输出最优解
printf("x_min = (%lf, %lf)\n", x[0], x[1]);
return 0;
}
```
本算例中,我们要求解目标函数 $f(x_1, x_2) = (x_1 - 2)^2 + (x_2 - 3)^2$ 的最小值。初始点为 $(0, 0)$,最大迭代次数为 $100$,精度要求为 $10^{-6}$。在每次迭代中,计算梯度向量并更新 $x$,直到满足停止条件为止。
运行结果如下:
```
f_min = 0.000029
x_min = (1.998604, 2.998406)
```
可以看出,最速下降法成功地找到了目标函数的最小值,最优解为 $(1.998604, 2.998406)$。
阅读全文