Progress-servis55.ru

Новости из мира ПК
16 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Минимум функции matlab

Иллюстрированный самоучитель по MatLab

Минимизация функции нескольких переменных

Значительно сложнее задача минимизации функций нескольких переменных f(х 1 ,…). При этом значения переменных представляются вектором х, причем начальные значения задаются вектором х . Для минимизации функций ряда переменных MATLAB обычно использует разновидности симплекс-метода Нелдера-Мида.

Этот метод является одним из лучших прямых методов минимизации функций ряда переменных, не требующим вычисления градиента или производных функции. Он сводится к построению симплекса в n-мерном пространстве, заданного n+1 вершиной. В двумерном пространстве симплекс является треугольником, а в трехмерном – пирамидой. На каждом шаге итераций выбирается новая точка решения внутри или вблизи симплекса. Она сравнивается с одной из вершин симплекса. Ближайшая к этой точке вершина симплекса обычно заменяется этой точкой. Таким образом, симплекс перестраивается и обычно позволяет найти новое, более точное положение точки решения. Решение повторяется, пока размеры симплекса по всем переменным не станут меньше заданной погрешности решения.

Реализующая симплекс-методы Нелдера-Мида функция записывается в виде:

  • fminsearch(@fun,x0) – возвращает вектор х, который является локальным минимумом функции fun(x) вблизи х0.х0 может быть скаляром, вектором (отрезком) при минимизации функции одной переменной или матрицей (для функции нескольких переменных);
  • fminsearch(@fun,x0,options) – аналогична описанной выше функции, но использует вектор параметров options точно так же, как функция fminbnd;
  • fminsearch(@fun,x0,options.P1.P2,…) – сходна с описанной выше функцией, но передает в минимизируемую функцию нескольких переменных fun(x.P1,P2….) ее дополнительные аргументы Р1. Р2,…. Если требуется использовать параметры вычислений по умолчанию, то вместо options перед Р1, Р2 необходимо ввести [ ].;
  • [x.fval] = fminsearch(…) – дополнительно возвращает значение целевой функции fval в точке минимума;
  • [x.fval.exitflag] = fminsearch(…) – дополнительно возвращает параметр exitflag, положительный, если процесс итераций сходится с использованием options .tol X, отрицательный, если итерационный процесс не сходится к полученному решению х, и 0, если превышено максимальное число итераций options .maxi ten;
  • [х .fval.exitflag.output] – fminsearch(…) возвращает структуру (запись) output,
  • output.algorithm – использованный алгоритм;
  • output.funcCount – число оценок целевой функции;
  • output.Iterations – число проведенных итераций.

Классическим примером применения функции fminsearch является поиск минимума тестовой функции Розенброка, точка минимума которой находится в «овраге» с «плоским дном»: rb(x 1 ,x 2 ,а) = 100*(x 2 -x 1 ) 2 + (а -x 1 ) 2 .

Численная оптимизация в Matlab

Здравствуйте, уважаемые читатели. Продолжаем разбираться в Matlab. И сегодня наша тема связанна с численной оптимизацией — нахождением локальных и глобальных экстремумов функций одной или нескольких переменных в среде Matlab.

Общие сведения

Итак, в этом блоке ничего про Matlab не будет, лишь информация о понятии оптимизации. Это понятие сводится к терминам минимума и максимума функции, или, если коротко — экстремумам.

Под минимумом понимают такое значение функции, которое в некоторой окрестности этой функции, принимает наименьшее значение из всех возможных значений в этой окрестности. Соответственно максимум — это наибольшее значение функции в какой-либо окрестности.

Если не понятно — вот простой пример с всеми известной параболой:

У этой функции есть один минимум, и он находится в точке x = 0. Эта точка называется точкой минимума, а само значение этой функции есть минимум (он тоже равен 0). Максимумов у этой функции нет, но если бы функцию перевернули вверх ногами, то он бы появился.

Часто встречаются сложные функции, у которых есть несколько и минимумов и максимумов. И в таком случае, разделяют понятия локального и глобального экстремума. Локальный — это тот экстремум, который определен в некоторой области, а глобальный — на всей области определения функции. На рисунке выше представлен глобальный минимум параболы.

Поиск экстремумов в Matlab

И теперь, когда вы хоть как то познакомились с понятиями оптимизации и нахождения экстремумов функции, можем перейти к нахождению максимумов и минимумов в Matlab. Далее, как обычно мы будем разбирать примеры различной сложности. Часть примеров будет содержать в себе стандартные команды Matlab для нахождения минимума и максимума функции, а другая часть — это реализация метода с нуля.

Стандартные методы Matlab

Разберем 2 задачи нахождения минимума в Matlab:

1 пример. Вычислить минимум функции f(x)=-x 1/x , определив графически интервал его локализации. Вычисления провести с минимальным шагом по аргументу 1*10 -5

Для начала создадим скрипт, который отобразит эту функцию. Вот код для этого:

Запускаем скрипт и получаем:
По графику функции делаем вывод, что имеется один минимум, и его координаты находятся в интервале 2.5 — 3, то есть мы сократим интервал поиска минимума.

Читать еще:  Решение системы дифференциальных уравнений в matlab

Теперь создадим еще один скрипт, дадим ему название first.m и пропишем в него функцию:

Таким образом в этом m-файле мы определили функцию. Теперь в командном окне мы пропишем следующий код:

И получаем такие значения:
x = 2.7183 — координата точки минимума
y = -1.4447 — значение минимума

В этой части кода мы использовали стандартный метод Matlab для нахождения минимума функции — fminbnd. мы передаем 3 параметра — саму функцию и интервалы для поиска минимума. Стоит отметить, что этот метод подходит только для функций, зависящих от одной переменной.

Итак, для этой задачи мы создали 2 скрипт-файла, которые вы можете скачать в конце статьи.

2 пример. Вычислить минимум функции двух переменных x 4 +y 4 -2x 2 +4xy-2y 2 +1 с точность 1*10-5.
Координаты начальной точки поиска [1.0,-1.0].

Для начала построим график функции от двух переменных — для этого создадим новый скрипт и пропишем там этот код:

Функция surf позволяет строить трехмерные графики и отображать глубину значений функции для лучшего понимания. Запускаем скрипт — в итоге получился такой график:
Как видно из графика, имеется два участка, где присутствует локальный минимум (темно-синие участки), и наша задача найти координаты и значения двух этих точек. Воспользуемся стандартными инструментами Matlab и создадим новый скрипт с именем second.m, в котором и пропишем код:

После этого, в командной строке, как и для первой задачи, прописываем стандартную функцию Matlab:

Получаем такой вывод:

Для нахождение минимумов в Matlab на этот раз мы использовали функцию fminsearch. Эта функция реализует симплекс — метод Нелдера-Мида. В выводе мы получили несколько переменных: в z записались значения координат точек минимума, в f само значение этого минимума. А в переменных exitflag и output помещены условия прерывания процесса поиска и информация об оптимизации соответственно.

В итоге у нас опять получилось 2 m-файла.

Метод Ньютона Matlab

А теперь попробуем сами реализовать метод Ньютона для оптимизации функции.

3 пример. Методом Ньютона найти точку минимума x* и минимальное значение f* функции f(x)=(x-2) 4 -lnx на отрезке xє[2;3] c точностью 10 -7

Начнем с того, что создадим новый скрипт и назовем его Newton.m. Затем пропишем в нем код:

Вполне понятная функция, которая работает с первой и второй производной символьной функции, которую получает в качестве параметра. Также в параметрах принимается диапазон. Эта функция возвращает координаты точки и значение экстремума.
Теперь нам осталось вызвать эту функцию в командном окне:

В итоге получилось:
Xk = 2.4663
Yk = -0.8554

Не будем приводить график, но вы сами можете проверить, что значения найдены правильно. Важно сказать, что этот метод позволяет найти только локальный экстремум, и если на выбранном диапазоне есть несколько экстремумов, то метод может найти не тот, который нужен вам.

Также, очень важно задавать как можно узкий диапазон поиска, иначе метод может работать некорректно, особенно это проявляется с периодическими функциями по типу cos(x) и т.п.

Заключение

Ну что ж, в этой статье мы рассмотрели некоторые методы для нахождения экстремумов в Matlab. Мы использовали как стандартные методы, так и реализовали метод Ньютона в среде Matlab. Их исходники чуть ниже.
Скачать исходники

На этом сегодня все, оставляйте ваши комментарии и задавайте вопросы.

fminbnd

Find minimum of single-variable function on fixed interval

Syntax

Description

fminbnd is a one-dimensional minimizer that finds a minimum for a problem specified by

min x f ( x ) such that x 1 x x 2 .

x, x1, and x2 are finite scalars, and f( x) is a function that returns a scalar.

x = fminbnd( fun , x1 , x2 ) returns a value x that is a local minimizer of the scalar valued function that is described in fun in the interval x1 .

x = fminbnd( fun , x1 , x2 , options ) minimizes with the optimization options specified in options . Use optimset to set these options.

x = fminbnd( problem ) finds the minimum for problem , where problem is a structure.

[ x , fval ] = fminbnd( ___ ) , for any input arguments, returns the value of the objective function computed in fun at the solution x .

[ x , fval , exitflag ] = fminbnd( ___ ) additionally returns a value exitflag that describes the exit condition.

[ x , fval , exitflag , output ] = fminbnd( ___ ) additionally returns a structure output that contains information about the optimization.

Examples

Minimum of sin

Find the point where the sin ( x ) function takes its minimum in the range 0 x 2 π .

Читать еще:  Usyn ru rutube index php

To display precision, this is the same as the correct value x = 3 π / 2 .

Minimize a Function Specified by a File

Minimize a function that is specified by a separate function file. A function accepts a point x and returns a real scalar representing the value of the objective function at x .

Write the following function as a file, and save the file as scalarobjective.m on your MATLAB® path.

Find the x that minimizes scalarobjective on the interval 1 x

Minimize with Extra Parameter

Minimize a function when there is an extra parameter. The function sin ( x — a ) has a minimum that depends on the value of the parameter a . Create an anonymous function of x that includes the value of the parameter a . Minimize this function over the interval 0 x 2 π .

This answer is correct; the theoretical value is

For more information about including extra parameters, see Parameterizing Functions.

Monitor Iterations

Monitor the steps fminbnd takes to minimize the sin ( x ) function for 0 x 2 π .

Find Minimum Location and Function Value

Find the location of the minimum of sin ( x ) and the value of the minimum for 0 x 2 π .

Obtain All Information

Return all information about the fminbnd solution process by requesting all outputs. Also, monitor the solution process using a plot function.

Input Arguments

fun — Function to minimize
function handle | function name

Function to minimize, specified as a function handle or function name. fun is a function that accepts a real scalar x and returns a real scalar f (the objective function evaluated at x ).

Specify fun as a function handle for a file:

where myfun is a MATLAB ® function such as

You can also specify fun as a function handle for an anonymous function:

Example: fun = @(x)-x*exp(-3*x)

Data Types: char | function_handle | string

x1 — Lower bound
finite real scalar

Lower bound, specified as a finite real scalar.

Example: x1 = -3

Data Types: double

x2 — Upper bound
finite real scalar

Upper bound, specified as a finite real scalar.

Example: x2 = 5

Data Types: double

options — Optimization options
structure such as optimset returns

Optimization options, specified as a structure such as optimset returns. You can use optimset to set or change the values of these fields in the options structure. See Set Optimization Options for detailed information.

‘notify’ (default) displays output only if the function does not converge.

‘off’ or ‘none’ displays no output.

‘iter’ displays output at each iteration.

‘final’ displays just the final output.

FunValCheck

Check whether objective function values are val >’off’ allows fminbnd to proceed when the objective function returns a value that is complex or NaN . The ‘on’ setting throws an error when the objective function returns a value that is complex or NaN .

Maximum number of function evaluations allowed, a positive integer. The default is 500 . See Tolerances and Stopping Criteria.

Maximum number of iterations allowed, a positive integer. The default is 500 . See Tolerances and Stopping Criteria.

OutputFcn

Specify one or more user-defined functions that an optimization function calls at each iteration, either as a function handle or as a cell array of function handles. The default is none ( [] ). See Optimization Solver Output Functions.

Plots various measures of progress while the algorithm executes, select from predefined plots or write your own. Pass a function handle or a cell array of function handles. The default is none ( [] ).

@optimplotx plots the current point

@optimplotfunccount plots the function count

@optimplotfval plots the function value

For information on writing a custom plot function, see Optimization Solver Plot Functions.

Termination tolerance on x , a positive scalar. The default is 1e-4 . See Tolerances and Stopping Criteria.

Example: options = optimset(‘Display’,’iter’)

Data Types: struct

problem — Problem structure
structure

Problem structure, specified as a structure with the following fields.

Field NameEntry
Objective function
Left endpoint
Right endpoint
‘fminbnd’
Options structure such as returned by optimset

The simplest way to obtain a problem structure is to export the problem from the Optimization app.

Data Types: struct

Output Arguments

x — Solution
real scalar

Solution, returned as a real scalar. Typically, x is a local solution to the problem when exitflag is positive.

fval — Objective function value at solution
real number

Objective function value at the solution, returned as a real number. Generally, fval = fun(x) .

exitflag — Reason fminbnd stopped
integer

Reason fminbnd stopped, returned as an integer.

Function converged to a solution x .

Number of iterations exceeded options.MaxIter or number of function evaluations exceeded options.MaxFunEvals .

Stopped by an output function or plot function.

The bounds are inconsistent, meaning x1 > x2 .

output — Information about the optimization process
structure

Information about the optimization process, returned as a structure with fields:

Number of iterations taken

Number of function evaluations

‘golden section search, parabolic interpolation’

Limitations

The function to be minimized must be continuous.

fminbnd might only give local solutions.

fminbnd can exhibit slow convergence when the solution is on a boundary of the interval.

Algorithms

fminbnd is a function file. The algorithm is based on golden section search and parabolic interpolation. Unless the left endpoint x1 is very close to the right endpoint x2, fminbnd never evaluates fun at the endpoints, so fun need only be defined for x in the interval x1 x x2.

If the minimum actually occurs at x1 or x2, fminbnd returns a point x in the interior of the interval ( x1, x2) that is close to the minimizer. In this case, the distance of x from the minimizer is no more than 2*(TolX + 3*abs(x)*sqrt(eps)) . See [1] or [2] for details about the algorithm.

References

[1] Forsythe, G. E., M. A. Malcolm, and C. B. Moler. Computer Methods for Mathematical Computations. Englewood Cliffs, NJ: Prentice Hall, 1976.

[2] Brent, Richard. P. Algorithms for Minimization without Derivatives. Englewood Cliffs, NJ: Prentice-Hall, 1973.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

For C/C++ code generation:

fminbnd does not support the problem structure argument.

fminbnd ignores the Display option and does not give iterative display or an exit message. To check solution quality, examine the exit flag.

The output structure does not include the algorithm or message fields.

fminbnd ignores the OutputFcn and PlotFcns options.

Поиск минимума функции

День добрый. Подскажите пожалуйста, как найти минимум функции, где помимо неизвестной переменной используются известные.
Понятно что можно перебором, но интересно — есть ли в матлабе более простой способ (типа fminbnd, fminsearch и т п, как эти функции приспособить — я не знаю).

Конкретно интересует такой пример:

iterations
funcCount
algorithm
message
Matlab M
18.12.2017, 11:35

Поиск минимума и максимума функции
Здравствуйте, только начала изучать Матлаб и столкнулась вот с такой задачей: необходимо найти.

Поиск значений аргументов кастомной функции, удовлетворяющих критерий минимума
Добрый день! Просмотрел функции оптимизации, в частности fminsearch(), понятно, что она возвращает.

Поиск минимума задачи с ограничениями fmincon
Доброго времени суток! Мне нужно минимизировать функцию при помощи MatLab 2015b: function f =.

Нахождение минимума функции
Нужно найти минимум без использования fminbnd функции y=x/lnx, вот что у меня получилось, но в.

18.12.2017, 11:532
Matlab M
18.12.2017, 12:00 [ТС]3

Annza, ну тогда это будет только на длину когда влиять. Но по факту — это тот же перебор будет ведь.
Даже памяти больше выделится чем при переборе.

А из встроенных функций никакую приладить сюда нельзя?
Сделать что-то типа

Matlab M
18.12.2017, 12:034
18.12.2017, 12:08 [ТС]5
18.12.2017, 13:596
18.12.2017, 14:05 [ТС]7

Как эти функции применять для одной переменной с постоянными коэффициентами я знаю и хелпом пользоваться умею.
Мне нужен совет — как эти функции применить касательно моего примера. Т.к. в случае с аргументами, которые известны, но подаются на вход — я не могу создать ни отдельную функцию с одним аргументом, которую подам на вход fminbnd, ни inline или что-то такое.

Т.е. в вопросе присутствует еще переменная s, которую варьировать не нужно, но она меняется до поиска минимума и вот она как раз-таки мешает мне заранее создать функцию, либо как-то иначе использовать.

Либо да, подскажите мне учебник или хелп, в которых данный вопрос освещен. Так как найденные и прочитанные мной хелпы, статьи на экспоненте и прочее — описывают примеры с одной переменной, которые тривиальны и не подходят.

Ссылка на основную публикацию
Adblock
detector