Одномерная оптимизация функций методом золотого сечения
Создание программы в среде программирования MatLab для решения задачи одномерной оптимизации (нахождение минимума и максимума заданных функций) методом золотого сечения, построение блок-схемы алгоритма и графическое изображение исследованных функций.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | реферат |
Язык | русский |
Дата добавления | 14.06.2010 |
Размер файла | 112,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное образовательное учреждение высшего профессионального образования
"Чувашский государственный университет им. И.Н. Ульянова"
Факультет Информатики и вычислительной техники
Кафедра Информационно-вычислительных систем
Специальность 230100
Тема курсовой работы:
Одномерная оптимизация функций методом золотого сечения
Выполнили:
студенты гр. ИВТ 12-08
Прокопьева О. В.,
Степанова Е. В.
Проверил: старший преподаватель
Н.Н.Иванова
Чебоксары - 2005
Аннотация
Курсовая работа разработана в среде программирования MatLab.
При помощи этой программы можно решать задачи одномерной оптимизации функций (нахождение минимума и максимума) методом золотого сечения.
Программа дает навыки использования некоторых элементарных встроенных в MatLab функций таких как disp, plot…
Программа является наглядным примером для операций над матрицами.
Annotation
The course job is developed in environment(Wednesday) of programming MatLab.
Through this program it is possible to do a sum of a single-measure improvement (finding of minimum and maximum) by the method of golden section.
The program gives skills of use some elementary built - in MatLab of functions such as disp, plot…
The program is an evident example for operations above matrixes.
Оглавление
1. Содержание задания
2. Содержание расчетно-пояснительной записки
2.1 Теоретическая часть
2.2 Введение
2.3 Теоретическое описание
3 Программная часть
3.1 Текст программы в среде MatLab
3.2 Руководство программиста
3.3 Руководство пользователя
3.4 Распечатка серии тестов
3.5 Анализ полученных результатов
4 Список использованной литературы
1. Содержание задания
1. Построить блок-схему алгоритма.
2. Написать программу в среде MatLab.
3. Изучить строенные функции пакета MatLab, позволяющие решать задачи одномерной оптимизации (нахождение минимума и максимума функций) методом золотого сечения.
4. Провести серию тестов, используя написанную программу и встроенные функции. Построить графики исследованных функций. Проанализировать результаты решений.
Тестовые функции:
а) f(x) =
б) f(x) = arctg(sinx- cosx);
в) f(x) = +x2.
2. Содержание расчетно-пояснительной записки
2.1 Теоретическая часть
Целью данной курсовой работы является изучение и приобретения навыков работы в языке для технических расчетов MatLab.
Необходимо создать программу для решения задачи одномерной оптимизации (нахождение минимума и максимума функций) методом золотого сечения и построить графики исследованных функций. Так же необходимо изучить работу встроенных в MatLab функций.
Протестировать программу на серии тестов.
Теоретическое описание
Одномерная оптимизация функций методом золотого сечения
Метод золотого сечения состоит в построении последовательности отрезков [a0, b0], [a1, b1], …,стягивающихся к точке минимума функции f(x). На каждом шаге, за исключением первого, вычисление значения функции f(x) проводится лишь один раз. Эта точка, называемая золотым сечением, выбирается специальным образом.
На первом шаге процесса оптимизации внутри отрезка [a0, b0] выбираем две внутренние точки x1 и x2 и вычисляем значения целевой функции f(x1) и f(x2). Поскольку в данном случае f(x1) < f(x2), очевидно, что минимум расположен на одном из прилегающих к x1 отрезков [a0, x1] или [x1, x2]. Поэтому отрезок [x2, b0] можно отбросить, сузив тем самым первоначальный интервал неопределенности.
Второй шаг проводим на отрезке [a1, b1], где a1 = a0, b1 = x2. Нужно снова выбрать две внутренние точки, но одна из них (x1) осталась из предыдущего шага, поэтому достаточно выбрать лишь одну точку x3, вычислить значение f(x3) и провести сравнение. Поскольку здесь f(x3) > f(x1), ясно, что минимум находится на отрезке [x3, b1]. Обозначим этот отрезок [a2, b2], снова выберем одну внутреннюю точку и повторим процедуру сужения интервала неопределенности. Процесс оптимизации повторяется до тех пор, пока длина очередного отрезка [an, bn] не станет меньше заданной величины ?.
Теперь рассмотрим способ размещения внутренних точек на каждом от резке [ak, bk]. Пусть длина интервала неопределенности равна l, а точка деления делит его на части l1, l2: l1 > l2, l = l1 + l2. Золотое сечение интервала неопределенности выбирается так, чтобы отношение длины большего отрезк к длине всего интервала равнялось отношению длины меньшего отрезка к длине большего отрезка: (1)
Из этого соотношения можно найти точку деления, определив отношение l2/l1. Преобразуем выражение (1), и найдем это значение:
l=l2l1, l=l2(l1 + l2),
l+l1l2 - l=0,
2 + - 1 =0,
=.
Поскольку нас интересует только положительное решение, то
.
Отсюда l1 k1l, l2 k2l.
Поскольку заранее неизвестно, в какой последовательности делить интервал неопределенности, то рассматривают внутренние точки, соответствующие двум этим способам деления. Точки деления x1 и x2 выбираются с учетом полученных значений для частей отрезка. В данном случае имеем
x1 - a0 = b0 - x2 = k2d0,
b0 - x1 = x2 - a0 = k1d0,
d0 = b0 - a0.
После первого шага оптимизации получается новый интервал неопределенности - отрезок [a1, b1].
Можно показать, что точка x1 делит этот отрезок в требуемом отношении, при этом
b1 - x1 = k2d1, d1 = b1 - a1.
Для этого проведем очевидные преобразования:
b1 - x1 = x2 - x1 = (b0 - a0) - (x1 - a0) - (b0 - x2) = d0 - k2d0 - k2d0 = k3d0,
d1 = x2 - a0 = k1d0,
b1 - x1 = k3(d1/k1) = k2d1.
Вторая точка деления x3 выбирается на таком же расстоянии от левой границы отрезка, т.е. x3 - a1 = k2d1.
И снова интервал неопределенности уменьшается до размера
d2 = b2 - a2 = b1 - x3 = k1d1 = kd0.
Используя полученные соотношения, можно записать координаты точек деления y и z отрезка [ak, bk] на k +1 шаге оптимизации (y < z):
y = k1ak + k2bk,
z = k2ak + k1bk.
При этом длина интервала неопределенности равна
dk = bk - ak = kd0.
Процесс оптимизации заканчивается при выполнении условия dk < ?. При этом проектный параметр оптимизации составляет ak < x < bk. Можно в качестве оптимального значения принять x = ak (или x = bk, или x = (ak + bk)/2 и т.п.).
Блок-схема алгоритма
3. Программная часть
3.1 Текст программы в среде MatLab
А. Программа вычисления максимума:
function Maximum(a,b,eps)
%Maximum(a,b,eps) функция нахождения максимума функции f(x)
% методом "золотого сечения" на отрезке [a, b] с точностью eps.
% Функция f(x) задаётся в M-файле, находящимся в той же дирекктории.
% (!) Для правильной работы функции необходимо, чтоб a<b и
% искомое значение было б единствено на [a, b].
%--------------------------------------------
% Построим график (необязательно)
x=a:0.001:b; y=f(x);
plot(x,y,'k',a,f(a),'.b',b,f(b),'.b');
text(a,f(a),'A','FontSize',15); text(b,f(b),'B','FontSize',15);
title('График функции f(x).');
xlabel('Ось x.'); ylabel('f(x)');
grid on; hold on;
%--------------------------------------------
k1=(sqrt(5)-1)/2; k2=1-k1;
x1=k1*a+k2*b; x2=k2*a+k1*b;
A=f(x1); B=f(x2);
while 1
if A>B
b=x2;
if b-a<eps break;
else x2=x1; B=A; x1=k1*a+k2*b; A=f(x1);
end;
else
a=x1;
if b-a<eps break;
else x1=x2; A=B; x2=k2*a+k1*b; B=f(x2);
end;
end;
end;
x=(a+b)/2;
tab=strcat('%.',int2str(abs(floor(log10(eps)))),'g');
%(!) здесь задаётся точность результата(сколько цифр после запятой)
% и формат вывода, сравни Minimum
disp(sprintf(strcat('%s',tab),'Максимум функции f(x): x_max = ',x));
%-----------------------------------
%выведем результат на график
plot(x,f(x),'or'); text(x,f(x),'X_{max}','FontSize',15);
Б. Программа вычисления минимума:
function Minimum(a,b,eps)
%Minimum(a,b,eps) функция нахождения минимума функции f(x)
% методом "золотого сечения" на отрезке [a, b] с точностью eps.
% Функция f(x) задаётся в M-файле, находящимся в той же дирекктории.
% (!) Для правильной работы функции необходимо, чтоб a<b и
% искомое значение было б единствено на [a, b].
k1=(sqrt(5)-1)/2; k2=1-k1;
x1=k1*a+k2*b; x2=k2*a+k1*b;
A=f(x1); B=f(x2);
while 1
if A<B
b=x2;
if b-a<eps break;
else x2=x1; B=A; x1=k1*a+k2*b; A=f(x1);
end;
else
a=x1;
if b-a<eps break;
else x1=x2; A=B; x2=k2*a+k1*b; B=f(x2);
end;
end;
end;
x=(a+b)/2;
disp(sprintf('%s %.15f','Минимум функции f(x): x_min = ',x));
3.2 Руководство программиста
Запускается файл Example.m, она вызывает 2 функции максимум и минимум. Функция максимум вычисляет максимум В функцию максимум передаётся промежуток, в которой нужно вычислить максимум…В первых строках строится график заданной функции. Цикл while - бесконечный цикл. Он останавливается только, если у нас погрешность вычисленного значения меньше заданного eps. Потом задаётся точность результата (сколько цифр после запятой) и формат вывода.
Функция минимум вычисляет минимум… В функцию минимум передаётся промежуток, в которой нужно вычислить минимум … Цикл while - бесконечный цикл. Он останавливается только, если у нас погрешность вычисленного значения меньше заданного eps. Потом задаётся точность результата(сколько цифр после запятой) и формат вывода.
3.3 Руководство пользователя
Для того, чтобы вычислить максимум и минимум необходимо открыть файл Example.m, ввести промежутки вычисления минимума и максимума, задать eps и нажать Run (F5). После чего программа построит график заданной функции и вычислит максимум и минимум.
3.4 Описание всех использованных в программе встроенных функций MatLab
В программе использовались встроенный функции: plot, grid on, abs, disp, hold on.
plot - функция построения графиков.
disp -- функция, выводящая текстовые данные.
grid on - функция включения отображения сетки, которая строится пунктирными линиями.
abs - возвращает абсолютную величину для каждого числового элемента вектора x.
hold on - обеспечивает продолжение вывода графиков в текущее окно, что позволяет добавлять последующие графики к уже сеществующим.
Описание встроенных функций MatLab помогающих облегчить решение систем уравнений
Важной задачей численных методов - поиск минимума функций f(x) в некотором интервале изменения x - от x1 до x2. Если нужно найти максимум такой функции, то достаточно поставить знак "минус" перед функцией. Для решения этой задачи используется следующая функция:
- fmin (` fun', x1, x2) возвращает значение x, которое является локальным минимумом функции funx на интеравле x1<x<x2;
- fmin (` fun', x1, x2, options) - сходна с описанной выше функцией, но использует контрольные параметры options для управления процессом по умолчанию;
- [x, options] = fmin(…) дополнительно возвращает вектор контрольных параметров options, в десятом столбце которого содержится число выполненных итераций.
В этих представлениях используются следующие обозначения: x1, x2 - интервал, на котором ищется минимум функции; P1, P2…- передаваемые в функцию аргументы; fun - строка, содержащая название функции, которая будет минимизирована; options - вектор контрольных параметров, имеющий 18 компонентов. Только три из них используются функцией fmin: options(1) - при ненулевом значении отображаются промежуточные шаги решения, options (2) задает итерационную погрешность, по умолчанию она равна 1.е-4, и options (14) задает максимальное число итераций, по умолчанию равное 500.
3.5.Распечатка серии тестов
Проведем серию тестов, решив приведенные выше системы в заданиях для тестовых расчетов, используя написанную программу .
а). Запускаем example.m для функции f(x) = в промежутке [-4,4].
Максимум функции f(x): x_max = 4
Минимум функции f(x): x_min = 0.000000005266636
График функций
б) Запускаем example.m для функции f(x) = arctg(sinx- cosx) в промежутке (-3.14, 3.14);
Максимум функции f(x): x_max = 2.35619
Минимум функции f(x): x_min = -0.785398139394453
График функций
в) Запускаем example.m для функции f(x) = +x2 в промежутке (0, 20)
3.6 Анализ полученных результатов
В ходе курсовой работы мною были изучены некоторые аспекты программирования в среде MATLAB, а также некоторые встроенные функции данного пакета. При оформлении курсовой работы был получены навыки оформления программной документации в соответствии с Единой Системой Программной Документации, а также большой практический опыт работы в MATLAB, Microsoft Word 2003, (хотя освоение этих программных продуктов не было целью курсовой работы, данные навыки нельзя считать бесполезными). Теоретические сведения были закреплены практическими занятиями.
4. Список использованной литературы
1. Численные методы. Волков Е.А.: Учебное пособие. - М.: Наука. Главная редакция физико-математической литературы, 1982.
2. Дьяконов В., Круглов В. MATLAB. Анализ, идентификация и моделирование систем. Специальный справочник. - СПб.: Питер, 2002.
3. Дьяконов В. MATLAB. Обработка сигналов и изображений. Специальный справочник. - СПб.: Питер, 2002.
4. Дьяконов В.
5. MATLAB: учебный курс. -- СПб: Питер, 2001.
Подобные документы
Решения алгебраических уравнений методом выделения корней. Аппроксимация функций методом наименьших квадратов; дихотомия, бисекция. Одномерная оптимизация многоэкстремальных функций; метод золотого сечения. Многомерная оптимизация градиентным методом.
курсовая работа [956,7 K], добавлен 04.03.2013Определение минимума функции на заданном отрезке методами перебора, поразрядного поиска, дихотомии, золотого сечения и методом парабол. Нахождение и расчет нулей функции методом Ньютона. Построение графика данной функции, ее минимальное значение.
реферат [55,6 K], добавлен 09.04.2013Классификация задач нелинейного программирования. Сущность методов безусловной одномерной оптимизации. Построение алгоритма случайного поиска, правило исключения интервалов. Понятие золотого сечения и квадратичной аппроксимации, метод хорд и касательных.
презентация [377,0 K], добавлен 30.10.2013Метод установления границ начального отрезка локализации минимума. Метод золотого сечения. Оценивание точки минимума внутри найденного отрезка локализации. Программная реализация метода Свенна на языке C++. Текст программы нахождения точки минимума.
контрольная работа [47,3 K], добавлен 27.01.2011Особенности решения транспортной задачи распределительным методом и анализ результатов. Построение математической модели, алгоритма. Создание программы для решения транспортной задачи распределительным методом в программной среде Borland Delphi 7.
курсовая работа [1000,7 K], добавлен 23.06.2012Одномерная оптимизация, метод "золотого сечения". Условная нелинейная оптимизация, применение теоремы Джона-Куна-Таккера. Исследование функции на выпуклость и овражность. Безусловная оптимизация неквадратичной функции, метод Дэвидона-Флетчера-Пауэлла.
курсовая работа [2,1 M], добавлен 12.01.2013Исследование типовых примеров задач оптимизации. Реализация программы в среде MatLab для их решения. Изучение функций нелинейной оптимизации. Определение оптимума целевой функции одной или нескольких переменных. Поиск оптимальных настроек регулятора.
лабораторная работа [188,8 K], добавлен 07.12.2016Рассмотрение особенностей объявления функций на языке СИ. Определение понятий аргументов функции и их переменных (локальных, регистровых, внешних, статических). Решение задачи программным методом: составление блок-схемы, описание функций main и sqr.
презентация [125,5 K], добавлен 26.07.2013Нахождение минимума целевой функции для системы ограничений, заданной многоугольником. Графическое решение задачи линейного программирования. Решение задачи линейного программирования с использованием таблицы и методом отыскания допустимого решения.
курсовая работа [511,9 K], добавлен 20.07.2012Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.
курсовая работа [435,8 K], добавлен 15.06.2013