Одномерные методы безусловной оптимизации (методы Фибоначчи и квадратичной аппроксимации)
Одномерные методы оптимизации. Минимизирование функции методом Фибоначчи квадратичной аппроксимации. Составление графика изменения длинны интервала неопределенности от номера итерации. Написание компьютерной программы на языке C# по оптимизации функций.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 19.06.2015 |
Размер файла | 945,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Міністерство освіти і науки, молоді та спорту України
Національний технічний університет
Харківський політехнічний інститут
Кафедра «Автоматизованих систем управління»
Лабораторна робота
по предмету: Математичні методи дослідження операцій
на тему: Одномірні методи безумовної оптимізації (Методи Фібоначчі та квадратичної апроксимації)
Виконав:
Копп А.М.
Харків 2013
Цель работы
Изучить одномерные методы оптимизации, минимизировать функцию, заданную преподавателем, двумя методами; сравнить результаты оптимизации и выдать рекомендации по применению исследуемых методов.
Алгоритм метода Фибоначчи
Подготовительный этап:
1) Выбрать - точность вычисления минимума на интервале . Положить и .
2) .
3) Если
тогда , иначе и идти к 3.
4) Вычислить:
.
5) Если , тогда , и идти к 6. Если и идти к 6.
6) Положить .
Основной этап:
7) Если , тогда и идти к 8. Иначе , и идти к 9.
8) Вычислить
и . Перейти к шагу 10.
9) Вычислить
и . И идти к 10.
10) Если , то и идти к 11, иначе и идти к 11.
11) Если , тогда и идти к 7.
Иначе положить
и вычислить.
Блок-схема алгоритма
Алгоритм метода квадратичной аппроксимации
1) Вычислить
2) Вычислить и .
3) Если , тогда . Если , то .
4) Вычислить и найти , .
5) С использованием посчитать .
6) Условия окончания поиска: и . Если оба выполняются, закончить алгоритм. В противном случае - идти к шагу 7.
7) Выбрать «лучшую» точку среди или , И две точки слева и справа от нее. Расположить их в естественном порядке и идти к шагу 4.
После шага (5) следует провести дополнительную проверку, и в случае, если точка слишком далеко от , заменить ее точкой .
Блок-схема алгоритма
Код программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using ZedGraph;
namespace Algorithms
{
public class Fibonachi
{
private int func;
private double xOpt, fOpt;
private int iter;
private string process;
PointPairList points;
public PointPairList Points
{
get { return points; }
set { points = value; }
}
public string Process
{
get { return process; }
set { process = value; }
}
public double FOpt
{
get { return fOpt; }
set { fOpt = value; }
}
public double XOpt
{
get { return xOpt; }
set { xOpt = value; }
}
public int Iter
{
get { return iter; }
set { iter = value; }
}
public Fibonachi(int func)
{
this.func = func;
}
private double Func(double x)
{
if (func == 1)
{
return 2 * Math.Pow((x - 3), 2) + Math.Exp(Math.Pow(x, 2) / 2);
}
if (func == 2)
{
return (Math.Pow(x, 3) + x) / (Math.Pow(x, 4) - Math.Pow(x, 2) + 1);
}
return 0;
}
private double F(int p)
{
if (p == 1 || p == 2)
{
return 1;
}
else
{
return (F(p - 1) + F(p - 2));
}
}
public void Fibo(double a0, double b0, double eps)
{
points = new PointPairList();
int j = 1;
int m;
for (; ;)
{
if (F(j + 1) < (1 / eps) * (b0 - a0) && F(j + 2) >= (1 / eps) * (b0 - a0))
{
m = j;
break;
}
j++;
}
double x1s = a0 + (F(m) / F(m + 2)) * (b0 - a0);
double x2s = a0 + (F(m + 1) / F(m + 2)) * (b0 - a0);
double a1, b1;
if (Func(x1s) <= Func(x2s))
{
a1 = a0;
b1 = x2s;
}
else
{
a1 = x1s;
b1 = b0;
}
double x1k = x1s;
double x2k = x2s;
double ak = a1;
double bk = b1;
Process = "";
for (int k = 1; k <= m - 1; k++)
{
double x1k1, x2k1;
double ak1, bk1;
if (Func(x1k) <= Func(x2k))
{
x2k1 = x1k;
x1k1 = ak + (F(m - k) / F(m + 2)) * (b0 - a0);
}
else
{
x1k1 = x2k;
x2k1 = ak + (F(m - k + 1) / F(m + 2)) * (b0 - a0);
}
if (Func(x1k1) <= Func(x2k1))
{
ak1 = ak;
bk1 = x2k1;
}
else
{
ak1 = x1k1;
bk1 = bk;
}
Process += "x: " + (ak1 + bk1) / 2 + "; f(x): " + Func((ak1 + bk1) / 2) + "; итерация: " + k + ";\n";
points.Add(k, Math.Abs(ak1 - bk1));
x1k = x1k1;
x2k = x2k1;
ak = ak1;
bk = bk1;
}
XOpt = (ak + bk) / 2;
FOpt = Func(XOpt);
Iter = m - 1;
}
public void Quadratic(double x1, double deltaX, double eps1, double eps2)
{
points = new PointPairList();
double x2 = x1 + deltaX;
double x3;
if (Func(x1) > Func(x2))
{
x3 = x1 + 2 * deltaX;
}
else
{
x3 = x1 - deltaX;
}
int k = 1;
Process += "";
for (; ;)
{
double[] F = { Func(x1), Func(x2), Func(x3) };
double Fmin = F.Min();
int minIndex = Array.IndexOf(F, Fmin);
double xMin = 0;
switch (minIndex)
{
case 0: xMin = x1; break;
case 1: xMin = x2; break;
case 2: xMin = x3; break;
default: break;
}
double a1 = (F[1] - F[0]) / (x2 - x1);
double a2 = (1 / (x3 - x2)) * ((F[2] - F[0]) / (x3 - x1) -
(F[1] - F[0]) / (x2 - x1));
double xS = ((x2 + x1) / 2) - (a1 / (2 * a2));
if (xS > (x3 + deltaX))
{ оптимизация функция фибоначчи итерация
xS = x3 + deltaX;
}
if (Math.Abs(Fmin - Func(xS)) <= eps1 && Math.Abs(xMin - xS) <= eps2)
{
Process += "x: " + xS + "; f(x): " + Func(xS) + "; итерация: " + k + "; \n";
points.Add(k, Math.Abs(x1 - x3));
XOpt = xS;
FOpt = Func(xS);
Iter = k;
break;
}
else
{
double[] xBest = { Func(xS), Func(xMin) };
int minInd = Array.IndexOf(xBest, xBest.Min());
switch (minInd)
{
case 0: x2 = xS; break;
case 1: x2 = xMin; break;
default: break;
}
x1 = x2 - deltaX;
x3 = x2 + deltaX;
Process += "x: " + xS + "; f(x): " + Func(xS) + "; итерация: " + k + "; \n";
k++;
}
if (k > 10000)
{
Process = "Необходимо увеличить значения Е1 и Е2, или уменьшить шаг!";
break;
}
}
}
}
}
Результаты работы программы
Задание: f(x) = 2(x - 3)2 + exp{x2 / 2}, [0, 100]
Рисунок 1 - Решение методом Фибоначчи, график изменения длинны интервала неопределенности от номера итерации
Результат работы программы для метода Фибоначчи:
x: 19,0983005609879; f(x): 1,59730815994183E+79; итерация: 1;
x: 11,8033988780243; f(x): 1,79061609368607E+30; итерация: 2;
x: 7,2949016829636; f(x): 359433594996,898; итерация: 3;
x: 4,50849719506067; f(x): 25937,6006853167; итерация: 4;
x: 2,78640448790293; f(x): 48,6136188214171; итерация: 5;
x: 1,72209270715774; f(x): 7,67136451462504; итерация: 6;
x: 1,06431178074518; f(x): 9,25565487933309; итерация: 7;
x: 1,47084263507781; f(x): 7,62630189506422; итерация: 8;
x: 1,72209270715774; f(x): 7,67136451462504; итерация: 9;
x: 1,56681192490506; f(x): 7,52057196317356; итерация: 10;
x: 1,66278121473232; f(x): 7,56084342303454; итерация: 11;
x: 1,60346972230689; f(x): 7,51727760135902; итерация: 12;
x: 1,56681192490506; f(x): 7,52057196317356; итерация: 13;
x: 1,58946561992866; f(x): 7,51593707248513; итерация: 14;
x: 1,60346972230689; f(x): 7,51727760135902; итерация: 15;
x: 1,59482012966151; f(x): 7,51606349215786; итерация: 16;
x: 1,58946561992866; f(x): 7,51593707248513; итерация: 17;
x: 1,59276070284119; f(x): 7,51595867486789; итерация: 18;
x: 1,59070127602086; f(x): 7,51592415514834; итерация: 19;
x: 1,59193693211305; f(x): 7,51593644659914; итерация: 20;
x: 1,59111316138492; f(x): 7,51592544841694; итерация: 21;
x: 1,59070127602086; f(x): 7,51592415514834; итерация: 22;
x: 1,59028939065679; f(x): 7,51592566285447; итерация: 23;
x*: 1,59028939065679; f(x)*: 7,51592566285447; Число итераций: 23
Рисунок 2 - Решение методом квадратичной аппроксимации
Результат для метода квадаратичной аппроксимации:
x: 1,03; f(x): 9,46149700020013; итерация: 1;
x: 1,05; f(x): 9,34042093880804; итерация: 2;
x: 1,07; f(x): 9,22240461705795; итерация: 3;
x: 1,09; f(x): 9,10750938343364; итерация: 4;
x: 1,11; f(x): 8,99579975896803; итерация: 5;
x: 1,13; f(x): 8,8873436109131; итерация: 6;
x: 1,15; f(x): 8,78221233700656; итерация: 7;
x: 1,17; f(x): 8,6804810610181; итерация: 8;
x: 1,19; f(x): 8,58222884030586; итерация: 9;
x: 1,21; f(x): 8,48753888616402; итерация: 10;
x: 1,23; f(x): 8,39649879779722; итерация: 11;
x: 1,25; f(x): 8,30920081081562; итерация: 12;
x: 1,27; f(x): 8,22574206120736; итерация: 13;
x: 1,29; f(x): 8,14622486581229; итерация: 14;
x: 1,31; f(x): 8,07075702039334; итерация: 15;
x: 1,33; f(x): 7,99945211647944; итерация: 16;
x: 1,35; f(x): 7,93242987823748; итерация: 17;
x: 1,37; f(x): 7,86981652072031; итерация: 18;
x: 1,39; f(x): 7,81174513093462; итерация: 19;
x: 1,41; f(x): 7,75835607327569; итерация: 20;
x: 1,43; f(x): 7,70979742098812; итерация: 21;
x: 1,45; f(x): 7,66622541543119; итерация: 22;
x: 1,47; f(x): 7,62780495505703; итерация: 23;
x: 1,49; f(x): 7,59471011614841; итерация: 24;
x: 1,51; f(x): 7,56712470751294; итерация: 25;
x: 1,53; f(x): 7,54524286149153; итерация: 26;
x: 1,55; f(x): 7,52926966381242; итерация: 27;
x: 1,57; f(x): 7,51942182500937; итерация: 28;
x: 1,59; f(x): 7,5159283963241; итерация: 29;
x: 1,59068610054296; f(x): 7,51592416101319; итерация: 30;
x*: 1,59068610054296; f(x)*: 7,51592416101319; Число итераций: 30
Вывод
При выполнении лабораторной работы мною были изучены одномерные методы оптимизации (метод Фибоначчи и квадратичная аппроксимация), написана программа на языке C#, которая позволяет оптимизировать заданные функции этими методами.
Результаты решения исследуемыми методами показали, что при одинаковых точностях, результаты, полученные двумя методами отличаются менее, чем на одну тысячную, но в то же время, метод квадратичной аппроксимации для достижения заданной точности требует выполнения большего количества итераций, и, следовательно, больших затрат машинного времени.
Размещено на Allbest.ru
...Подобные документы
Классификация задач нелинейного программирования. Сущность методов безусловной одномерной оптимизации. Построение алгоритма случайного поиска, правило исключения интервалов. Понятие золотого сечения и квадратичной аппроксимации, метод хорд и касательных.
презентация [377,0 K], добавлен 30.10.2013Программирование численных методов одномерной оптимизации. Решение одномерных задач оптимизации методами последовательного поиска. Градиентные методы и их применение для оптимизации на ЭВМ математических моделей объектов. Методы нулевого порядка.
контрольная работа [257,9 K], добавлен 15.01.2009Теоретические основы метода оптимизации. Разработка компьютерной системы для решения задач многомерной безусловной оптимизации методом Хука-Дживса с минимизацией по направлению. Описание структуры программы и результаты ее отладки на контрольных примерах.
курсовая работа [595,4 K], добавлен 13.01.2014Задачи оптимизации в математике и информатике. Классификация методов оптимизации. Методы с переменной метрикой. Значение функции на заданном интервале. Локальный минимум функции. Методы минимизации функции. Классификация методов многомерной оптимизации.
курсовая работа [1,5 M], добавлен 19.06.2012Сравнение методов многомерной оптимизации Хука-Дживса и Розенброка по числу вычислений и по числу вызова оптимизируемой функции в процессе оптимизации. Особенности применения алгоритмов ускоряющего шага, в которых используется поиск по направлению.
лабораторная работа [2,8 M], добавлен 14.07.2012Математические основы оптимизации. Постановка задачи оптимизации. Методы оптимизации. Решение задачи классическим симплекс методом. Графический метод. Решение задач с помощью Excel. Коэффициенты целевой функции. Линейное программирование, метод, задачи.
реферат [157,5 K], добавлен 21.08.2008Сущность задач оптимизации и методы их решения с ориентацией на современные средства компьютерной техники. Область допустимых решений. Структура оптимизационной модели. Проверка правильности нахождения точек координат методом половинного деления.
курсовая работа [2,4 M], добавлен 25.04.2015Характеристика методов нечеткого моделирования и изучение системы кластеризации в пакетах прикладных программ. Разработка и реализация алгоритма для оптимизации базы правил нечеткого классификатора с помощью генетического алгоритма аппроксимации функции.
дипломная работа [1,9 M], добавлен 21.06.2014Определение минимума функции на заданном отрезке методами перебора, поразрядного поиска, дихотомии, золотого сечения и методом парабол. Нахождение и расчет нулей функции методом Ньютона. Построение графика данной функции, ее минимальное значение.
реферат [55,6 K], добавлен 09.04.2013Общее описание и особенности использования программы, предназначенной для определения нечетных чисел, находящихся в массиве чисел. Листинг и методы оптимизации данной компьютерной программы. Источники оптимизации кода, описание выполненных команд.
лабораторная работа [17,4 K], добавлен 25.03.2011Изучение аналитических и численных методов поиска одномерного и многомерного безусловного экстремума. Решение поставленной задачи с помощью Mathcad и Excel. Реализация стандартных алгоритмов безусловной оптимизации средствами языка программирования С++.
курсовая работа [488,5 K], добавлен 21.10.2012Описание и функциональное назначение программы по оптимизации функции, ее логическая структура и используемые технические средства. Практическое применение программы, вызов и загрузка, входные и выходные данные, выполнение контрольного примера и листинг.
курсовая работа [337,4 K], добавлен 26.02.2012Исследование типовых примеров задач оптимизации. Реализация программы в среде MatLab для их решения. Изучение функций нелинейной оптимизации. Определение оптимума целевой функции одной или нескольких переменных. Поиск оптимальных настроек регулятора.
лабораторная работа [188,8 K], добавлен 07.12.2016Пример задачи нелинейной условной оптимизации. Основные группы методов: штрафных функций, прямого поиска, линеаризации. Последовательность задач безусловной оптимизации. Квадратичный и логарифмический штраф. Корректировка для обеспечения допустимости.
презентация [405,0 K], добавлен 30.10.2013Технические характеристики пневматического перфоратора. Выявление зависимости скорости бурения от усилия подачи путем вычисления коэффициентов для квадратичной и кубической аппроксимации с помощью Microsoft Excel и программы, написанной на языке QBasic.
курсовая работа [1,1 M], добавлен 01.03.2012Решения алгебраических уравнений методом выделения корней. Аппроксимация функций методом наименьших квадратов; дихотомия, бисекция. Одномерная оптимизация многоэкстремальных функций; метод золотого сечения. Многомерная оптимизация градиентным методом.
курсовая работа [956,7 K], добавлен 04.03.2013Пример расчета экстремума функции методом прямого поиска с дискретным шагом. Результаты отладки программы на контрольных примерах. Составление инструкции по использованию программы. Обработка результатов исследований визуальными средствами Excel.
курсовая работа [1,0 M], добавлен 20.05.2012Задача оптимизации с точки зрения математики как задача нахождения экстремума вещественной функции в некоторой области. Классификация и типы методов оптимизации, условия их практического использования. Создание программы, ее листинг, описание алгоритмов.
курсовая работа [181,7 K], добавлен 22.06.2012Назначение и классификация методов поисковой оптимизации. Эффективность поискового метода. Методы поиска нулевого порядка: исходные данные, условия, недостатки и применение. Структура градиентного метода поиска. Основная идея метода наискорейшего спуска.
лекция [137,8 K], добавлен 04.03.2009Оценка погрешности и точности в математике. Составление программы и алгоритма для численного дифференцирования с заданной допустимой погрешностью на алгоритмическом языке Turbo Pascal 7.0. Составление алгоритма и программы аппроксимации функции.
курсовая работа [810,6 K], добавлен 24.03.2012