Разработка программы для поиска минимума функций методом Фибоначчи

Описание метода и проектирование алгоритма для поиска минимума функции. Оптимизация процесса вычислений методом Фибоначчи. Разработка пользовательского интерфейса. Получение рабочей версии программы на языке С++. Системный анализ полученных данных.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 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+lFS-2, x2=b-lFS-2.

6. В зависимости от соотношения f(x1) и f(x2) выбирается новый интервал локализации минимума.

7. Внутри полученного интервала находится новая точка (x1 или x2), симметричная к уже имеющейся точке и отстоящая от конца интервала на величину lFS-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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.