Найти минимум функции 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; }
Объяснение кода листинга программы
- Написана функция
function(double x)
, которая принимает аргументx
и возвращает значениеx*x - sin(x)
. - В функции
main()
определены переменныеa
,b
,e
,x1
,x2
. - Переменная
a
инициализирована значением-3.
, переменнаяb
инициализирована значением3.
. - Переменная
e
инициализирована значением0.000001
, которое является требуемой точностью. - В цикле
while
происходит пока не будет достигнута требуемая точность. - Внутри цикла определены переменные
x1
иx2
, которые используются для вычисления следующего приближения. - Вычисление
x1
основано на формуле золотого сечения, где(b-a)/phi
является приближением для нахождения следующего приближения. - Вычисление
x2
также основано на формуле золотого сечения, где(b-a)/phi
является приближением для нахождения предыдущего приближения. - Используется условие
if(function(x1) >= function(x2))
для определения, какое из двух последних приближений будет использоваться в качестве следующего приближения. - После цикла
while
выводится минимальное значениеXmin
и соответствующее значениеF(Xmin)
. - Программа завершается вызовом
flushall();getchar();return 0;
.