#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <string.h>
using namespace std;
//计算f(x)=ax^2+bx+c的极值
double gradientDesc(double a, double b, double c, int cnt)
{
double l = 0.1,fx;
double x = rand() / (double)RAND_MAX * 20 - 10;
int i;
for (int i = 0; i < cnt; i++)
{
//f(x)对x求导 f'x(x)=2ax+b
double gradient = 2 * a * x + b;
if (a > 0) x = x - gradient * l;
else x = x + gradient * l;
//计算f(x)
fx= a * x * x + b * x + c;
printf("i=%d x=%lf fx=%lf gradient=%lf\n", i, x, fx, gradient);
}
return fx;
}
int main()
{
srand(time(0));
int a = rand() % 20 - 10;
int c = rand() % 20 - 10;
int b = rand() % 20 - 10;
a = a == 0 ? 1 : a;
printf("f(x)=%d^2+%d+%d\n", a, b, c);
double value=gradientDesc(a, b, c, 100);
printf("\n\n极值点横坐标为x=%lf\n", value);
return 0;
}