Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Найти точки минимума внутри найденного отрезка локализации минимума методом золотого сечения.






(Программа должна обеспечить на каждой итерации метода вывод на экран:

§ номера итерации,

§ границ текущего отрезка [a, b],

§ внутренних точек и значений функции в них,

а затем

§ финальной оценки x* точки минимума функции f(x)

§ соответствующего точке x* значения функции f(x*)).

Текст программы на С++

 

#include < iostream.h>

#include < iomanip.h>

#include < math.h>

#include < conio.h>

#include < stdlib.h>

double function (double); // вычисляет значение функции в данной точке

void main (void)

{

double a, b, E, F1, F2, LM, x = 0, fc, fd, fx, i = 0, c = 0, d = 0; // Определение переменных

clrscr();

cout < < " Введите границы начального отрезка: " < < endl < < " a0 = ";

cin > > a;

cout < < " b0 = ";

cin > > b;

cout < < " Введите число Е: " < < endl < < " E = ";

cin > > E;

clrscr();

cout < < " Границы начальнога отрезка: " < < endl < < " а[" < < i < < " ] = " < < a < < endl;

cout < < " b[" < < i < < " ] = " < < b < < endl;

cout < < " Число Е = " < < E < < endl;

F1 = (3 - sqrt(5))*0.5;

F2 = 1 - F1;

do

{

LM = b - a;

cout < < endl < < " Номер итерации " < < i + 1 < < endl;

cout < < " Границы текущего отрезка: " < < endl < < " а[" < < i < < " ] = " < < a < < endl;

cout < < " b[" < < i < < " ] = " < < b < < endl;

if (LM < = E)

{

x = (a + b)*0.5;

fx = function(x);

cout < < " Точка минимума x = " < < setprecision(10) < < x < < endl;

cout < < " Значение функции F(x) в точке минимума = " < < setprecision(10) < < fx < < endl;

cout < < " Press any key";

getch();

exit(0);

}

else

{

c = a + F1 * LM;

d = a + F2 * LM;

fc = function(c);

fd = function(d);

cout < < " Значение внутренней точки с[" < < i < < " ] = " < < setprecision(10) < < c < < endl;

cout < < " Значение внутренней точки d[" < < i < < " ] = " < < setprecision(10) < < d < < endl;

cout < < " Значение функции F(x) в точке с[" < < i < < " ] = " < < setprecision(10) < < fc < < endl;

cout < < " Значение функции F(x) в точке d[" < < i < < " ] = " < < setprecision(10) < < fd < < endl;

}

if (fc == fd)

{

a = c;

b = d;

x = (a + b)*0.5;

fx = function(x);

cout < < " Точка минимума x = " < < setprecision(10) < < x < < endl;

cout < < " Значение функции F(x) в точке минимума = " < < setprecision(10) < < fx < < endl;

cout < < " Press any key";

getch();

exit(0);

}

else

{

if (fc < fd)

{

a = a;

b = d;

i++;

}

else

{

a = c;

b = b;

i++;

}

}

}

while (1);

}

double function (double x)

{

double y;

y = x * x - 12 * x;

return (y);

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.