Разработка программы для поиска минимума функций методом Фибоначчи
Описание метода и проектирование алгоритма для поиска минимума функции. Оптимизация процесса вычислений методом Фибоначчи. Разработка пользовательского интерфейса. Получение рабочей версии программы на языке С++. Системный анализ полученных данных.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 15.12.2015 |
Размер файла | 543,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://allbest.ru
Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования
“Омский государственный технический университет”
Кафедра “Информатика и вычислительная техника”
Направление 230100 “Информатика и вычислительная техника”
Профиль “Технологии разработки программного обеспечения”
Расчетно-графическая работа
На тему: «Разработка программы для поиска минимума функций методом Фибоначчи»
по дисциплине «Системный анализ, оптимизация и принятие решений»
Выполнил студент
Кудашев Е.Павлович
Проверил: А.С. Яговдик
2015
Оглавление
Введение
1. Описание метода для поиска минимума
2. Проектирование алгоритма поиска минимума функции
3. Интерфейс пользователя
4. Результаты тестирования
Заключение
Библиографический список
Приложение
Введение
В данной работе мы рассмотрим один из методов одномерной оптимизации, а именно - метод Фибоначчи.
При построении процесса оптимизации стараются сократить объем вычислений и время поиска.
Этого достигают обычно путем сокращения количества вычислений значений целевой функции f(x). Одним из наиболее эффективных методов, в которых при ограниченном количестве вычислений f(x) достигается наилучшая точность, является метод Фибоначчи.
1. Описание метода для поиска минимума
Последовательность чисел Фибоначчи определяется соотношением:
|
(8) |
и имеет вид:
i |
0 |
2 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
||
Fi |
1 |
1 |
2 |
3 |
5 |
8 |
13 |
21 |
34 |
55 |
89 |
144 |
233 |
и т.д. |
Подобно методу золотого сечения процедура поиска с использованием чисел Фибоначчи требует два вычисления функции на первом шаге, а на каждом последующем - только по одному. Однако, в отличие от метода золотого сечения, в этой процедуре общее число S вычисления функции должно быть выбрано заранее. Кроме того, сокращение интервала неопределенности не остается постоянным, а меняется от шага к шагу: на k-ом шаге длина интервала неопределенности сжимается с коэффициентом
Первые два вычисления проводятся в точках:
расположенных симметрично относительно середины отрезка [a,b]. Если f(x1)<f(x2), то новым отрезком локализации минимума является [a, x2], в случае f(x1)?f(x2)-[x1, b]. Каждая следующая точка выбирается симметрично относительно середины полученного отрезка к лежащей внутри этого отрезка точке уже проведенного вычисления (x1 или x2). При этом любая внутренняя точка делит отрезок локализации в отношении, двух последовательных чисел Фибоначчи. алгоритм интерфейс программа фибоначчи
Взаимное расположение точек первых трех вычислений в случае f(x1)<f(x2) показано на рис. 7.
Рис. 7.
После (S-1)-го шага точка проведенного вычисления оказывается в середине отрезка локализации. Точка последнего, S-го, шага выбирается на расстоянии д от середины этого отрезка, где д - заранее фиксированное малое положительное число (константа различимости).
После S вычислений функции длина отрезка локализации составляет (с точностью до д):
|
(9) |
Сравнение (9) и (7) показывает, что при одном и том же S метод Фибоначчи дает меньший интервал неопределенности, чем метод золотого сечения, т.е. является более эффективным. Однако для достаточно больших S значение стремится к (0,618)S-1 , так что эти методы становятся почти идентичными. В том случае; когда при использовании метода Фибоначчи задан .конечный интервал неопределенности е, число S можно определить из условия:
|
(10) |
Алгоритм минимизации функции f(x) с использование, чисел Фибоначчи.
1. По заданной точности рассчитывается вспомогательное число
2. Для полученного значения N находится такое число Фибоначчи FS, для которого выполняется неравенство:
3.
4. По формуле (9) определяется длина конечного интервала неопределенности l.
5. Вычисляются значения x1=a+l•FS-2, x2=b-l•FS-2.
6. В зависимости от соотношения f(x1) и f(x2) выбирается новый интервал локализации минимума.
7. Внутри полученного интервала находится новая точка (x1 или x2), симметричная к уже имеющейся точке и отстоящая от конца интервала на величину l•FS-1-k , где k - номер шага. В этой точке рассчитывается значение f(x). Затем вычисления повторяются, начиная с пункта 5, до тех пор, пока k не станет равно S-1. Тогда переходят к пункту 7.
8. Полагают x2=x1+д, находят f(x2). Если f(x2)>f(x1)то минимум реализуется на интервале (a, x1), в противном случае - на интервале (x1 , b).
2. Проектирование алгоритма поиска минимума функции
3. Интерфейс пользователя
Интерфейс пользователя выглядит следующим образом:
4. Результаты тестирования
Метод Фибоначчи:
Итерация № 1
x1 = 0.590168F(x1) = -0.129898
x2 = 0.954916F(x2) = -0.987988
Итерация № 2
x1 = 0.954916F(x1) = -0.987988
x2 = 1.18034F(x2) = -0.793145
Итерация № 3
x1 = 0.815587F(x1) = -0.808495
x2 = 0.954916F(x2) = -0.987988
Итерация № 4
x1 = 0.954916F(x1) = -0.987988
x2 = 1.04101F(x2) = -0.989773
Итерация № 5
x1 = 1.04101F(x1) = -0.989773
x2 = 1.09424F(x2) = -0.945033
Итерация № 6
x1 = 1.00815F(x1) = -0.9996
x2 = 1.04101F(x2) = -0.989773
Итерация № 7
x1 = 0.987769F(x1) = -0.999106
x2 = 1.00815F(x2) = -0.9996
Итерация № 8
x1 = 1.00815F(x1) = -0.9996
x2 = 1.02062F(x2) = -0.997431
Итерация № 9
x1 = 1.00024F(x1) = -1
x2 = 1.00815F(x2) = -0.9996
Итерация № 10
x1 = 0.995686F(x1) = -0.999889
x2 = 1.00024F(x2) = -1
Итерация № 11
x1 = 1.00024F(x1) = -1
x2 = 1.0036F(x2) = -0.999922
Итерация № 12
x1 = 0.999053F(x1) = -0.999995
x2 = 1.00024F(x2) = -1
Итерация № 13
x1 = 1.00024F(x1) = -1
x2 = 1.00242F(x2) = -0.999965
Итерация № 14
x1 = 1.00124F(x1) = -0.999991
x2 = 1.00024F(x2) = -1
Итерация № 15
x1 = 1.00024F(x1) = -1
x2 = 1.00342F(x2) = -0.99993
Итерация № 16
x1 = 1.00442F(x1) = -0.999883
x2 = 1.00024F(x2) = -1
Итерация № 17
x1 = 1.00024F(x1) = -1
x2 = 1.00442F(x2) = -0.999883
Результат:
x = 1.00392F(x) = -0.999908
Количество итераций: 17
Заключение
В данной работе был рассмотрен один из ключевых методов прямого поиска, метод Фибоначчи. Результатом работы стало получение рабочей программы на языке С++, которая позволяет решать задачу нахождения экстремумов функции за заданное количество шагов, это удобно, если сразу задано количество возможных обращений к функции.
Получен и разобран, процесс работы и построения алгоритма метода Фибоначчи. На основе этого алгоритма и была построена программа.
Минусом данной программы можно считать то, что функцию необходимо прописывать непосредственно в коде программы.
В целом, цели поставленные в начале работы, были достигнуты.
Библиографический список
1. ru.wikipedia.org/wiki - Информационная система: Википедия - свободная энциклопедия [Электронный ресурс]. - Режим доступа:
2. tp://dit.isuct.ru/ivt/sitanov/Literatura/M171/Pages/Glava1_4.htm
3. Пантелеев. Методы оптимизации в примерах, 2005.
4. Романов. Системный анализ для инженеров, 2006.
Приложение
Main.cpp
#include <iostream>
#include <cmath>
#include <fstream>
#include "Methods.h"
void Fib(double, double, std::ofstream&);
int main()
{
std::ofstream cout("rezult.txt", std::ios::out);
setlocale(LC_ALL, "Russian");
double a(0), b(2.5);
Fib(a, b, cout);
getchar();
}
Methods.h
#define eps 1e-3
double Fun(double x)
{
return (2 * x * x * x - 6 * x + 3);
}
int F(int n)
{
int f, f1(1), f2(1), m(0);
while(m < n - 1)
{
f = f1 + f2;
f1 = f2;
f2 = f;
++m;
}
return f1;
}
void Fib(double a, double b, std::ofstream& cout)
{
cout<<"\n\n\n\tМетод Фибоначчи:\n\n";
double x1, x2, _x, xf1, xf2;
int k(0);
int N(0);
double fn1(1), fn2(1), fn, f = (b - a) / eps;
while(fn1 < f)
{
fn = fn1 + fn2;
fn1 = fn2;
fn2 = fn;
++N;
}
x1 = a + (double)F(N - 2) / F(N) * (b - a) - (N&1 ? -1 : 1) * eps / F(N);
x2 = a + (double)F(N - 1) / F(N) * (b - a) + (N&1 ? -1 : 1) * eps / F(N);
xf1 = Fun(x1);
xf2 = Fun(x2);
P:
++k;
if(xf1 >= xf2)
{
a = x1;
x1 = x2;
xf1 = xf2;
x2 = a + (double)F(N - k - 1) / F(N - k) * (b - a) + ((N - k)&1 ? -1 : 1) * eps / F(N - k);
xf2 = Fun(x2);
}
else
{
b = x2;
x2 = x1;
xf2 = xf1;
x1 = a + (double)F(N - k - 2) / F(N - k) * (b - a) - ((N - k)&1 ? -1 : 1) * eps / F(N - k);
xf1 = Fun(x1);
}
cout<<"Итерация № "<<k<<'\n'
<<"x1 = "<<x1<<"\t\tF(x1) = "<<xf1
<<"\nx2 = "<<x2<<"\t\tF(x2) = "<<xf2
<<'\n'<<std::endl;
if(fabs(b - a) <= eps)
{
_x = (a + b) / 2;
cout<<"Результат:\nx = "<<_x<<"\t\tF(x) = "<<Fun(_x)<<
"\nКоличество итераций: "<<k;
}
else
goto P;
}
Размещено на Allbest.ru
...Подобные документы
Создание программы в среде программирования MatLab для решения задачи одномерной оптимизации (нахождение минимума и максимума заданных функций) методом золотого сечения, построение блок-схемы алгоритма и графическое изображение исследованных функций.
реферат [112,0 K], добавлен 14.06.2010Создание программы для поиска минимума функции двух вещественных переменных в заданной области с помощью генетического алгоритма. Генетические алгоритмы и операторы. Создание начальной популяции. Размножение. Мутация и селекция. Тестирование программы.
курсовая работа [131,6 K], добавлен 22.02.2015Необходимые условия экстремума. Разработка машинного алгоритма и программы многомерной оптимизации для градиентного метода с использованием метода равномерного поиска. Проверка необходимых и достаточных условий экстремума для найденной точки минимума.
курсовая работа [249,8 K], добавлен 25.09.2013Анализ целевой аудитории. Функциональные характеристики пользовательского приложения. Разработка алгоритмов и интерфейса программного продукта, функций рабочей области. Написание скриптов на языке C#. Тестирование программы методом чёрного ящика.
дипломная работа [1,5 M], добавлен 09.11.2016Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.
курсовая работа [1,4 M], добавлен 16.03.2012- Разработка программы, вычисляющей определенный интеграл методом трапеций для подынтегральной функции
Разработка алгоритма решения определенного интеграла методом трапеций для подынтегральной функции и моделирования задачи вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi и MathCad; идентификаторы, модули и приложения.
курсовая работа [500,4 K], добавлен 28.05.2013 Пример расчета экстремума функции методом прямого поиска с дискретным шагом. Результаты отладки программы на контрольных примерах. Составление инструкции по использованию программы. Обработка результатов исследований визуальными средствами Excel.
курсовая работа [1,0 M], добавлен 20.05.2012Программная реализация приложения для вычисления заданных функций. Процедура поиска минимума функции. Применение методов Хука-Дживса и градиентного спуска для решения задачи. Исследование функции в окрестности базисной точки, определение ее координат.
контрольная работа [767,1 K], добавлен 02.02.2014Разработка алгоритма реализации на ЭВМ процесса поиска кратчайшего пути в графе методом Дейкстры. Программная реализация алгоритма поиска кратчайшего пути между двумя любыми вершинами графа. Проверка работоспособности программы на тестовых примерах.
реферат [929,8 K], добавлен 23.09.2013Практическое использование алгоритмов для нахождения минимального пути в лабиринте. Разработка программы на языке С++ и в среде Visual C++. Основные способы поиска пути: метод волны и приоритетов. Описание разработанных функций и инструкция пользователя.
дипломная работа [54,3 K], добавлен 16.03.2012Разработка программы, которая по заданной самостоятельно функции будет выполнять интегрирование методом прямоугольников. Блок-схема алгоритма вычисления интеграла (функция rectangle_integrate). Экспериментальная проверка программы, ее текст на языке C.
курсовая работа [232,0 K], добавлен 27.05.2013Определение минимума функции на заданном отрезке методами перебора, поразрядного поиска, дихотомии, золотого сечения и методом парабол. Нахождение и расчет нулей функции методом Ньютона. Построение графика данной функции, ее минимальное значение.
реферат [55,6 K], добавлен 09.04.2013Разработка и тестирование программы на языке Pascal для поиска, вывода на экран и сохранения в файл списка книг с фамилиями авторов в алфавитном порядке, изданных после 2012 года. Разработка алгоритма и его описание. Инструкции по эксплуатации приложения.
курсовая работа [903,0 K], добавлен 13.06.2013Разработка программы, которая вычисляет определенный интеграл методом трапеций для подынтегральной функции и моделирует задачу вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi. Решение задачи с помощью пакета MathCAD.
курсовая работа [738,8 K], добавлен 24.05.2013Выбор наиболее эффективного метода поиска экстремума для функции. Оценка погрешности определения точки минимума. Проверка унимодальности уравнения аналитическим методом и по графику. Сравнение алгоритмов по количеству обращений к функции и по точности.
контрольная работа [909,0 K], добавлен 14.08.2019Описание алгоритмов поиска пути. Диаграмма объектов предметной области. Разработка структурной схемы. Проектирование интерфейса пользователя. Выбор и обоснование комплекса программных средств. Разработка пользовательского меню. Диаграмма компонентов.
курсовая работа [3,5 M], добавлен 10.04.2015Создание программы, осуществляющей хранение информации о Ресторане. Структура предприятия, нормализация отношений. Разработка пользовательского интерфейса базы данных "АРМ администратора ресторана" в Borland Delphi 7. Характеристики для поиска данных.
курсовая работа [835,5 K], добавлен 18.06.2015Ознакомление с методами решения оптимизационных задач. Алгоритм метода ломанных. Определение наименьшего значения целевой функции. Описание метода анализа математической модели. Расчет поиска минимума по методу ломаных. Листинг программы, интерфейс.
курсовая работа [2,2 M], добавлен 06.12.2014Методика разработки программной модели числового метода поиска экстремума функции двух переменных, конструирование ввода исходных данных и вывода с сохранением. Исследование ограничений на функцию, обусловленные методом поиска и средствами моделирования.
курсовая работа [195,4 K], добавлен 17.04.2010Разработка программного обеспечения, реализующего нахождение минимального значения заданной функции многих переменных и ее точку минимума методом сопряжённых градиентов. Минимизация функции вдоль заданного направления. Блок-схема алгоритма минимизации.
отчет по практике [725,6 K], добавлен 01.10.2013