用C语言编程实现梯度下降算法,并对f(x)=x2(x的平方)进行验证。
时间: 2024-10-07 21:06:14 浏览: 32
Conjugate-gradient-methodPBFGS.rar_BFGS算法C语言_梯度优化
在C语言中,我们可以使用基本数学运算和循环结构来实现梯度下降算法。梯度下降是一种优化算法,常用于寻找函数最小值,对于函数f(x) = x^2,它的目标是最小化x的平方。
以下是一个简单的例子,假设我们有一个一维线性模型,目标是找到能使模型损失函数最小的theta值:
```c
#include <stdio.h>
#include <math.h>
// 函数 f(x) = x^2 的定义
double quadratic_function(double x) {
return x * x;
}
// 梯度下降函数
void gradient_descent(double learning_rate, double initial_theta, double tolerance, double* theta, double* function_value, int max_iterations) {
double current_theta = initial_theta;
double current_function_value = quadratic_function(current_theta);
for (int i = 0; i < max_iterations; ++i) {
double gradient = 2 * current_theta; // 对于f(x) = x^2,导数始终是2x
if (fabs(gradient) < tolerance) { // 如果梯度足够小,认为收敛
break;
} else {
current_theta -= learning_rate * gradient; // 更新theta
current_function_value = quadratic_function(current_theta); // 计算新的函数值
}
}
*theta = current_theta;
*function_value = current_function_value;
}
int main() {
const double learning_rate = 0.01;
double initial_theta = 5.0;
double tolerance = 1e-6;
double max_iterations = 1000;
double* best_theta = &initial_theta;
double best_function_value;
gradient_descent(learning_rate, initial_theta, tolerance, best_theta, &best_function_value, max_iterations);
printf("最优解theta: %.4lf\n", *best_theta);
printf("最小函数值f(x): %.4lf\n", best_function_value);
return 0;
}
```
这个程序会不断迭代更新`theta`,直到满足停止条件(如梯度小于某个阈值),找到使f(x)达到最低点的theta值。你可以运行这个程序并观察结果,它应该会给出接近于0的theta值,因为f(x) = x^2的最小值在x=0处。
阅读全文