Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Найти точки минимума внутри найденного отрезка локализации минимума методом золотого сечения.
(Программа должна обеспечить на каждой итерации метода вывод на экран: § номера итерации, § границ текущего отрезка [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); }
|