Найти минимум функции x^2-sinx методом золотого сечения - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Найти минимум функции x^2-sinx методом золотого сечения

Решение задачи: «Найти минимум функции x^2-sinx методом золотого сечения»

textual
Листинг программы
//Найти минимум функции x^2-sinx методом золотого сечения
 
#include <stdio.h>
#include <math.h>
#define phi (1+sqrt(5.))/2.
 
double function(double x)
{   return x*x - sin(x);
}
 
int main()
{   double a = -3.,b = 3., e = 0.000001, x1, x2;
 
    while(fabs(b-a) >= e)
    {   x1 = a+(b-a)/phi;
        x2 = b-(b-a)/phi;
        if(function(x1) >= function(x2))
            a = x1;
        else
            b = x2;
    }
 
    printf("Minimum Xmin = %.6lf, F(Xmin) = %.6lf", (a+b)/2., function((a+b)/2.));
 
    flushall();
    getchar();
    return 0;
}

Объяснение кода листинга программы

  1. Написана функция function(double x), которая принимает аргумент x и возвращает значение x*x - sin(x).
  2. В функции main() определены переменные a, b, e, x1, x2.
  3. Переменная a инициализирована значением -3., переменная b инициализирована значением 3..
  4. Переменная e инициализирована значением 0.000001, которое является требуемой точностью.
  5. В цикле while происходит пока не будет достигнута требуемая точность.
  6. Внутри цикла определены переменные x1 и x2, которые используются для вычисления следующего приближения.
  7. Вычисление x1 основано на формуле золотого сечения, где (b-a)/phi является приближением для нахождения следующего приближения.
  8. Вычисление x2 также основано на формуле золотого сечения, где (b-a)/phi является приближением для нахождения предыдущего приближения.
  9. Используется условие if(function(x1) >= function(x2)) для определения, какое из двух последних приближений будет использоваться в качестве следующего приближения.
  10. После цикла while выводится минимальное значение Xmin и соответствующее значение F(Xmin).
  11. Программа завершается вызовом flushall();getchar();return 0;.

Оцени полезность:

5   голосов , оценка 4.8 из 5
Похожие ответы