微积分最速下降法C语言
时间: 2023-07-02 13:03:30 浏览: 100
微积分最速下降法是一种数值优化方法,用于寻找函数的最小值点。以下是使用C语言实现微积分最速下降法的示例代码:
```c
#include <stdio.h>
#include <math.h>
#define N 2 // 变量个数
#define EPS 1e-6 // 精度
#define MAX_ITER 1000 // 最大迭代次数
double f(double x[]) // 目标函数
{
return pow(x[0] - 1, 2) + pow(x[1] - 2, 2);
}
void grad(double x[], double g[]) // 梯度
{
g[0] = 2 * (x[0] - 1);
g[1] = 2 * (x[1] - 2);
}
int main()
{
double x[N] = {0}, g[N] = {0}, alpha = 0;
int iter = 0;
while (iter < MAX_ITER)
{
grad(x, g);
if (sqrt(g[0]*g[0] + g[1]*g[1]) < EPS) break; // 判断是否达到精度
alpha = 0;
for (int i = 0; i < N; i++)
{
alpha += g[i] * g[i];
}
alpha = f(x) / alpha;
for (int i = 0; i < N; i++)
{
x[i] -= alpha * g[i];
}
iter++;
}
printf("Minimum point: (%f, %f)\n", x[0], x[1]);
printf("Minimum value: %f\n", f(x));
return 0;
}
```
在上述代码中,`f`函数为目标函数,`grad`函数为梯度,`x`为初始点,`g`为梯度向量,`alpha`为步长,`iter`为迭代次数。在每次迭代中,首先计算梯度,然后根据最速下降法的公式计算步长,最后更新$x$的值。当梯度的范数小于设定的精度时,算法结束并输出结果。
阅读全文