Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Метод оценивания точки минимума внутри найденного отрезка локализации минимума
(Программа должна обеспечить на каждой итерации метода вывод на экран: § номера итерации, § границ текущего отрезка [a, b], § внутренних точек и значений функции в них, а затем § финальной оценки x* точки минимума функции f(x) § соответствующего точке x* значения функции f(x*)). 3. С помощью программы решить следующие задачи одномерной оптимизации § f(x) = x2 – 12x. Начальные точки: 1, 3, 0, 10. ∆ = 1, 10 § f(x) = 2x2+(16/x) Начальные точки: 1, 6, 2, 1, 0.1, 10. ∆ = 1, 2 § f(x) = (127/4)x2-(61/4)x+2. Начальные точки: 0, 1, 2, -10, 10. ∆ = 0, 5, 1 4.Составить отчет, содержащий: § Титульный лист с указанием учебной дисциплины, номера и названия задания, ФИО выполнившего работу студента; § Полностью текст задания, приведенный несколькими строками выше; § Определение унимодальности; § Алгоритмы; § Текст программы на С++; § Подробное решение одной из предложенных задач – то, что выводит программа при ее решении на каждой итерации; § Сводную таблицу результатов решения задач, содержащую информацию о тестовой функции, начальных данных задачи и параметрах программы и результаты решения задачи(оценку точки минимума, значение функции в ней, число итераций). Задание№1
Программно реализовать на языке C++ метод Свенна (Программа должна обеспечить вывод на экран § начальной точки и шага на каждой итерации метода: § номера итерации, § генерируемой методом новой точки x и значения функции в ней; а на последней итерации отрезка [a, b] локализации минимума функции f(x) и его длины, а также числа итераций. С помощью программы решить следующие задачи одномерной оптимизации § f(x) = x2 – 12x. Начальные точки: 1, 3, 0, 10. ∆ = 1, 10 § f(x) = 2x2+(16/x) Начальные точки: 1, 6, 2, 1, 0.1, 10. ∆ = 1, 2 § f(x) = (127/4)x2-(61/4)x+2. Начальные точки: 0, 1, 2, -10, 10. ∆ = 0, 5, 1 Текст программы на С++
#include < iostream.h> #include < conio.h> #include < math.h> #include < iomanip.h> using namespace std; double f(double); int _tmain(int argc, _TCHAR* argv[]) { double t, ll, e, l, xk, yk, a, b; double x, delta, xp, x1, x2, k=0, y; int p=0; cout< < " enter x* "; cin> > x; cout< < " enter t "; cin> > t; x1=x-t; x2=x+t; if ((f(x-t) > =f(x)) & & (f(x+t) > =f(x))) { a=x-t; b=x+t; p=1; }; if ((f(x-t) < =f(x)) & & (f(x+t) < =f(x))) { p=1; }; xp=x; if ((f(x-t) > f(x)) & & (f(x) > f(x+t))) { delta=t; a=x; x=x+t; } if ((f(x-t) < f(x)) & & (f(x) < f(x+t))) { delta=-t; b=x; x=x-t; } while ((p! =1)) { if ((f(x)< f(xp)) & & (delta*t > 0)) a=xp; if ((f(x)< f(xp)) & & (delta*t < 0)) b=xp; if ((f(x)> f(xp)) & & (delta*t > 0)) { b=x; p=1; }; if ((f(x)> f(xp)) & & (delta*t< 0)) { a=x; p=1; }; k++; cout< < " Номер итерации " < < k< < endl; cout< < " Ганицы отрезка a=" < < a< < " b=" < < b< < endl; xp=x; x=xp+pow(2.0, k-1)*delta; } cout < < " a= " < < a< < " b= " < < b< < endl; cout< < " Количество итераций= " < < k< < endl; system(" pause"); return 0; } double f(double x) { double y; y=x*x-12*x; return (y); }
|