Матлаб как найти максимум функции

This demonstration shows how to find extrema of functions using analytical and numerical techniques using the Symbolic Math Toolbox™.

  • First Derivatives: Finding Local Minimum and Maximum of the Function

  • Second Derivatives: Finding Inflection Points of the Function

  • Limits: Functions with Suprema

First Derivatives: Finding Local Minima and Maxima

Computing the first derivative of an expression helps you find local minima and maxima of that expression. For example, create a rational expression where the numerator and the denominator are polynomial expressions.

syms x
f = (3 * x^3 + 17 * x^2 + 6 * x + 1)/(2 * x^3 + x * -1 + 3)
f = 

3 x3+17 x2+6 x+12 x3-x+3

Plotting this expression shows that it has horizontal and vertical asymptotes, a local minimum between -1 and 0, and a local maximum between 1 and 2.

Figure contains an axes object. The axes object contains an object of type functionline.

By default, when you operate on this expression, results can include both real and imaginary numbers. If you are interested in real numbers only, you can set the permanent assumption that x belongs to the set of real numbers. This allows you to avoid complex numbers in the solutions and it also can improve performance.

To find a horizontal asymptote, compute the limit of f for x approaching positive and negative infinities. The horizontal asymptote is x=3/2.

[limit(f, x, sym(inf)), limit(f, x, -sym(inf))]

To find a vertical asymptote of f, find the roots of the polynomial expression that represents the denominator of f.

solve(2 * x^3 + x * -1 + 3 == sym(0), x)

To get an explicit solution for such equations, try calling the solver with the option MaxDegree. The option specifies the maximum degree of polynomials for which the solver tries to return explicit solutions. By default, MaxDegree = 2. Increasing this value, you can get explicit solutions for higher-order polynomials. For example, specifying MaxDegree = 3 results in an explicit solution.

solve(2 * x^3 + x * -1 + 3 == 0, x, 'MaxDegree', 3)
ans = 

-16 34-241 4324321/3-34-241 4324321/3

You can approximate the exact solution numerically by using the vpa function.

Now find the local minimum and maximum of the expression f. If the point is a local extremum (either minimum or maximum), the first derivative of the expression at that point is equal to zero. To compute the derivative of an expression, use the diff function.

g = 

9 x2+34 x+62 x3-x+3-6 x2-1 3 x3+17 x2+6 x+12 x3-x+32

To find the local extrema of f, solve the equation g = 0. If you use the MaxDegree option, the solver returns the long explicit solution, which can be approximated by using the vpa function.

solve(g == 0, x, 'MaxDegree', 4);
extrema = vpa(ans, 6)
extrema = 

(-0.1892451.28598)

The plot of the expression f shows that x = -0.189 is a local minimum of the expression, and x = 1.286 is its local maximum.

fplot(f)
hold on
plot(extrema, subs(f,extrema), '*')
hold off

Figure contains an axes object. The axes object contains 2 objects of type functionline, line. One or more of the lines displays its values using only markers

Second Derivatives: Finding Inflection Points

Computing the second derivative lets you find inflection points of the expression.

h(x) = simplify(diff(f, x, 2))
h(x) = 

2 68 x6+90 x5+18 x4-699 x3-249 x2+63 x+1722 x3-x+33

To find inflection points of f, solve the equation h = 0. For this equation the symbolic solver returns a complicated result even if you use the MaxDegree option.

solve(h == 0, x, 'MaxDegree', 4)
ans = 

(root(σ1,z,1)root(σ1,z,4))where  σ1=z6+45 z534+9 z434-699 z368-249 z268+63 z68+4317

To get the simpler numerical result, solve the equation numerically by using vpasolve; specify the search range to restrict the returned results to all real solutions of the expression.

inflection = vpasolve(h == 0, x, [-inf, inf])
inflection = 

(0.578718426554417483196010858601961.8651543689917122385037075917613)

The expression f has two inflection points: x = 0.579 and x = 1.865.

fplot(f)
hold on
plot(extrema, subs(f,extrema), '*')
plot(inflection, subs(f,inflection), '*')
hold off

Figure contains an axes object. The axes object contains 3 objects of type functionline, line. One or more of the lines displays its values using only markers

Suprema

Not all functions can be treated analytically; the function

f(x)=tan(sin(x))-sin(tan(x))

is very flat at the origin and it oscillates infinitely often near -π2, becomes linear as it approaches zero and oscillates again near π.

f = @(x) tan(sin(x))-sin(tan(x))
f = function_handle with value:
    @(x)tan(sin(x))-sin(tan(x))

Most important for our purposes here, fplot has picked the limit on the y-axes to be

What is happening at π2?

MATLAB® uses double precision arithmetic, so π2 evaluates to one of the oscillations.

The Symbolic Math Toolbox uses exact arithmetic, which shows the function is undefined.

F = tan(sin(x))-sin(tan(x))

Taylor Series

We can also try to look at the value with a Taylor Series.

T = taylor(F,x,'Order',10,'ExpansionPoint',0)
ans = 3.0198759869735883213825972535797
hold on 
fplot(T)
ylim ([-3 3])
hold off

Figure contains an axes object. The axes object contains 2 objects of type functionline.

Calculus

We learn in calculus that a maximum occurs at a zero of the derivative. But this function is not differentiable in the vicinity of π2. We can analytically differentiate f(x) using the Symbolic Math Toolbox.

ans = cos(x) tan(sin(x))2+1-cos(tan(x)) tan(x)2+1
fplot(diff(F), [-pi , pi])

Figure contains an axes object. The axes object contains an object of type functionline.

Sampling

We can sample the function N times near π2 to get a numerical approximation to the value of the maximum. Is that good enough?

N = 100;
xValues = 3*pi/8 + pi/4*rand(1,N) 
xValues = 1×100

    1.8180    1.8895    1.2778    1.8955    1.6748    1.2547    1.3968    1.6076    1.9301    1.9359    1.3019    1.9404    1.9299    1.5593    1.8066    1.2895    1.5093    1.8973    1.8003    1.9317    1.6931    1.2061    1.8450    1.9117    1.7112    1.7732    1.7618    1.4862    1.6929    1.3125    1.7326    1.2031    1.3956    1.2144    1.2544    1.8248    1.7238    1.4271    1.9244    1.2052    1.5227    1.4778    1.7793    1.8026    1.3249    1.5628    1.5281    1.6857    1.7352    1.7708

ySoln = 1×100

    0.7260    1.5080    1.5932    1.5614    1.3796    1.3158    2.0658    2.4586    1.8194    1.8541    1.9088    1.8793    1.8178    2.3439    0.6145    1.7447    2.0697    1.5775    0.5629    1.8290    2.4930    0.8543    1.0347    1.6931    2.2371    0.5024    0.6011    2.2489    2.4891    2.0499    1.3564    0.8308    2.0986    0.9208    1.3122    0.8011    1.7177    0.9333    1.7830    0.8466    0.6138    2.5047    0.4857    0.5809    2.2051    2.5133    2.5387    2.2247    1.2583    0.5153

Proof

Determine the maximum from a mathematical proof.

sin(x)≤1

so sin(tan(x))≤1 and tan(sin(x))≤tan(1) which means consequently

f(x)≤1+tan(1)

As x⇒π2, tan(x) oscillates and blows up; sof(x) is actually not defined at all at this point as was shown above

f(x)<1+tan(1)

Now we can take a look at the numerical value.

Main Content

This example describes how to analyze a simple function to find its asymptotes, maximum, minimum, and inflection point.

Define a Function

The function in this example is

f(x)=3×2+6x-1×2+x-3.

First, create the function.

syms x
num = 3*x^2 + 6*x -1;
denom = x^2 + x - 3;
f = num/denom

Plot the function by using fplot. The fplot function automatically shows vertical asymptotes.

Figure contains an axes object. The axes object contains an object of type functionline.

Find Asymptotes

To find the horizontal asymptote of f mathematically, take the limit of f as x approaches positive infinity.

The limit as x approaches negative infinity is also 3. This result means the line y=3 is a horizontal asymptote to f.

To find the vertical asymptotes of f, set the denominator equal to 0 and solve it.

roots indicates that the vertical asymptotes are the lines

x=-1-132

and

x=-1+132.

Find Maximum and Minimum

You can see from the graph that f has a local maximum between the points x=–2 and x=0. It also has a local minimum between x=–6 and x=–2. To find the x-coordinates of the maximum and minimum, first take the derivative of f.

f1 = 

6 x+6x2+x-3-2 x+1 3 x2+6 x-1x2+x-32

To simplify this expression, enter the following.

f1 = 

-3 x2+16 x+17x2+x-32

Next, set the derivative equal to 0 and solve for the critical points.

crit_pts = 

(-133-83133-83)

As the graph of f shows, the function has a local minimum at

x1=-8-133

and a local maximum at

x1=-8+133.

Plot the maximum and minimum of f.

fplot(f)
hold on
plot(double(crit_pts), double(subs(f,crit_pts)),'ro')
title('Maximum and Minimum of f')
text(-4.8,5.5,'Local minimum')
text(-2,4,'Local maximum')
hold off

Figure contains an axes object. The axes object with title Maximum and Minimum of f contains 4 objects of type functionline, line, text. One or more of the lines displays its values using only markers

Find Inflection Point

To find the inflection point of f, set the second derivative equal to 0 and solve for this condition.

f2 = diff(f1);
inflec_pt = solve(f2,'MaxDegree',3);
double(inflec_pt)
ans = 3×1 complex

  -5.2635 + 0.0000i
  -1.3682 - 0.8511i
  -1.3682 + 0.8511i

In this example, only the first element is a real number, so this is the only inflection point. MATLAB® does not always return the roots to an equation in the same order.

Instead of selecting the real root by indexing into inter_pt, identify the real root by determining which roots have a zero-valued imaginary part.

idx = imag(double(inflec_pt)) == 0;
inflec_pt = inflec_pt(idx)
inflec_pt = 

-139 16954-2197181/3-16954-2197181/3-83

Plot the inflection point. The extra argument [-9 6] in fplot extends the range of x values in the plot so that you can see the inflection point more clearly, as the figure shows.

fplot(f,[-9 6])
hold on
plot(double(inflec_pt), double(subs(f,inflec_pt)),'ro')
title('Inflection Point of f')
text(-7,1,'Inflection point')
hold off

Figure contains an axes object. The axes object with title Inflection Point of f contains 3 objects of type functionline, line, text. One or more of the lines displays its values using only markers

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

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

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

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

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

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

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

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

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

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

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

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

x = 0.00001:0.00001:10;
y = -x.^(x.^(-1));
plot (x,y);
hold on;
grid on;

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

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

function fun=first(x)
fun = -x.^(x.^(-1));
end

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

>> [x,y] = fminbnd(@first,2.5,3)

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

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

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

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

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

[x y] = meshgrid(-2:0.1:2, -2:0.1:2);
z = x.^4 + y.^4 - 2*x.^2 + 4 * x.*y - 2*y.^2 + 1;
surf(x,y,z);

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

function fun=second(x)
fun = x(1)^4 + x(2)^4 - 2*x(1)^2 + 4 * x(1)*x(2) - 2*x(2)^2 + 1;
end

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

>> [z,f,exitflag,output] = fminsearch(@second, [1.0,-1.0], optimset('TolX',1e-5))

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

z = 1.4142   -1.4142
f = -7.0000
exitflag = 1
output = 
    iterations: 40
    funcCount: 74
    algorithm: 'Nelder-Mead simplex direct search'
    message: [1x196 char]

Для нахождение минимумов в 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. Затем пропишем в нем код:

function [Xk, Yk] = Newton(f,diap)
    a = diap(1); % границы
    b = diap(2);
    df = char(diff(sym(f))); % символьно ищем первую 
    ddf = char(diff(sym(df))); % и вторую производные
    F = inline(f); % преобразуем в функции
    F1 = inline(df);
    F2 = inline(ddf);
    eps = 0.0000001; % задаем точность
    if F(a)*F2(a) > 0 % проверка с какой границы начинать искать
        Xk = b;
    else
        Xk = a;
    end
    while abs(F1(Xk)) > eps
        X0 = Xk; % X0 - значение предыдущего шага
        Xk =  X0 - (F1(X0)/(F2(X0))); % расчет нового значения
        Yk = F(Xk);
    end
end

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

>> fun = '(x-2)^4 - log(x)';
>> diap = [2,3];
>> [Xk, Yk] = Newton(fun, diap);

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

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

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

Заключение

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

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

Найдите асимптоты, очень важные, и точки перегиба

Этот пример описывает, как анализировать простую функцию, чтобы найти ее асимптоты, максимум, минимум и точку перегиба.

Задайте функцию

Функция в этом примере

f(x)=3×2+6x-1×2+x-3.

Во-первых, создайте функцию.

syms x
num = 3*x^2 + 6*x -1;
denom = x^2 + x - 3;
f = num/denom

Постройте функцию при помощи fplot. fplot функционируйте автоматически показывает вертикальные асимптоты.

Figure contains an axes object. The axes object contains an object of type functionline.

Найдите асимптоты

Найти горизонтальную асимптоту f математически, возьмите предел f как x приближается к положительной бесконечности.

Предел как x подходы отрицательная бесконечность равняются также 3. Этот результат означает линию y=3 горизонтальная асимптота к f.

Найти вертикальные асимптоты f, установите знаменатель, равный 0, и решите его.

roots указывает, что вертикальные асимптоты являются линиями

x=-1-132

и

x=-1+132.

Найдите максимум и минимум

Вы видите из графика это f имеет локальный максимум между точками x=–2 и x=0. Это также имеет локальный минимум между x=–6 и x=–2. Найти x— координаты максимума и минимальный, первый берут производную f.

f1 = 

6 x+6x2+x-3-2 x+1 3 x2+6 x-1x2+x-32

Чтобы упростить это выражение, введите следующее.

f1 = 

-3 x2+16 x+17x2+x-32

Затем установите производную, равную 0, и решите для критических точек.

crit_pts = 

(-133-83133-83)

Как график f показывает, функция имеет локальный минимум в

x1=-8-133

и локальный максимум в

x1=-8+133.

Постройте максимум и минимум f.

fplot(f)
hold on
plot(double(crit_pts), double(subs(f,crit_pts)),'ro')
title('Maximum and Minimum of f')
text(-4.8,5.5,'Local minimum')
text(-2,4,'Local maximum')
hold off

Figure contains an axes object. The axes object with title Maximum and Minimum of f contains 4 objects of type functionline, line, text.

Найдите точку перегиба

Найти точку перегиба f, установите вторую производную, равную 0, и решите для этого условия.

f2 = diff(f1);
inflec_pt = solve(f2,'MaxDegree',3);
double(inflec_pt)
ans = 3×1 complex

  -5.2635 + 0.0000i
  -1.3682 - 0.8511i
  -1.3682 + 0.8511i

В этом примере только первым элементом является вещественное число, таким образом, это — единственная точка перегиба. MATLAB® не всегда возвращает корни в уравнение в том же порядке.

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

idx = imag(double(inflec_pt)) == 0;
inflec_pt = inflec_pt(idx)
inflec_pt = 

-139 16954-2197181/3-16954-2197181/3-83

Постройте точку перегиба. Дополнительный аргумент [-9 6] в fplot расширяет область значений x значения в графике так, чтобы вы видели точку перегиба более ясно как фигура, показывают.

fplot(f,[-9 6])
hold on
plot(double(inflec_pt), double(subs(f,inflec_pt)),'ro')
title('Inflection Point of f')
text(-7,1,'Inflection point')
hold off

Figure contains an axes object. The axes object with title Inflection Point of f contains 3 objects of type functionline, line, text.

МАТЛАБ.
ОПТИМИЗАЦИЯ, ЛИНЕЙНОЕ ПРОГРАММИРОВАНИЕ.

Поиск
экстремума функции одной переменной.

Поиск локального (в пределах определенного
интервала) минимума осуществляет функция
[x,y]=fminbnd(имяФункции,границыИнтервала).
Если же надо найти локальный минимум,
то исследуемую функцию берут с другим
знаком и ищут ее минимум, который
фактически является ее максимумом. При
этом значение функции в максимуме это
найденное значение с другим знаком.

Поиск
экстремума функции нескольких переменных.

Если функция вычисляется от нескольких
переменных, то для поиска ее минимума
используется (после приблизительной
оценки начальных приближений переменных
в предполагаемом минимуме) команда
[x,y]=fminsearch(имяФункции,
векторНачальныхПриближенийПеременных).

Решение
задач линейного программирования.

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

Пусть
функция L(x1,x2,x3,x4)=x1+x2+x3+x4
и надо найти ее максимум и соответствующие
ее максимуму значения переменных.

Пусть
даны ограничения в виде неравенств.
x1≥0,
x2≥0,
x3≥0,
x4≥0.

Пусть
также даны еще ограничения в виде
неравенств.

3x1-x2≤7,
x2-2x3≤-1,
4x3-x4≤3,
5x1+2x4≥14.

Для
решения задачи линейного программирования
(нахождения минимума) используется
функция [x,
L,
f]=linprog(c,
A,
b,
A1,
b1,Lx,
Rx)
где

x
вектор значений переменных, полученный
в качестве ответа; L
значение функции в минимуме;

f
параметр, характеризующий вычислительный
процесс (если он ноль то решение
приостановлено после достижения
максимального числа итераций, если
положителен то все нормально решено,
если отрицателен то решения не найдено);

c
функция цели представленная в виде
вектора коэффициентов (в нашем случае
[1 1 1 -1] но так как нам нужен максимум, а
функция [x,
L,
f]=linprog(c,
A,
b,
A1,
b1,
Lx,
Rx)
ищет минимум, то в выражении для функции
поменяем знак, поэтому вектор коэффициентов
будет [-1 -1 -1 1]);

A,
b
система ограничений, заданная в матричном
виде Ax≤b
(это в нашей задаче ограничения 3x1-x2≤7,
x2-2x3≤-1,
4x3-x4≤3,
5x1+2x4≥14,
но так как 5x1+2x4≥14
не подходит, то надо поменять знак в
этом неравенстве и тогда оно будет
-5x1-2x4≤-14,
в таком случае матрица А состоит из
коэффициентов (при переменных) в этих
неравенствах, а столбец b
состоит из правых (не содержащих
переменных) частей неравенств;

A1,
b1
система равенств вида A1x=b
(в нашей задаче такой системы ограничений
нету, но могла бы быть);

Lx,
Rx
относятся к ограничениям в виде Lx≤x≤Rx,
Lx≤x,
x≤Rx
(в нашей задаче есть ограничения вида
Lx≤x,
поэтому вектор Lx
будет 0 0 0 0).

При
использовании функции linprog
в списке аргументов вместо тех, которые
не указаны, ставятся пустые квадратные
скобки.

Рассмотрим
еще пример для тренировки. Пусть дана
функция W=x1+x2+3x3-x4
и надо найти ее максимум. Пусть даны
ограничения в виде неравенств.

x1-5x2+4x3≤5,
x1-2x2-3x3≤4,
x1+6x2+5x3≤4,
x2+x3≤1.
И пусть есть еще ограничения в виде
неравенств. x1≥0,
x2≥0,
x3≥0,
x4≥0.

Решим
задачу с помощью функции [x,
L,
f]=linprog(c,
A,
b,
A1,
b1,
Lx,
Rx).
Для ее применения нам надо подготовить
аргументы функции. Вектор с коэффициентов
функции равен (1 1 3 -1), но так как функция
linprog
ищет минимум, а нам нужен максимум, то
поменяем знак у коэффициентов функции
и тогда вектор с будет (-1 -1 -3 1). Матрица
А состоит из коэффициентов при переменных
в системе неравенств x1-5x2+4x3≤5,
x1-2x2-3x3≤4,
x1+6x2+5x3≤4,
x2+x3≤1.
Так как все они со знаком ≤ то ничего
менять не требуется. Вектор b
состоит из правых частей этих же
неравенств. Матрица A1
из системы A1х=b1
для нас не актуальна (нет таких условий).
Lx,
Rx
относятся к ограничениям в виде Lx≤x≤Rx,
Lx≤x,
x≤Rx.
У нас есть ограничения в виде неравенств.
x1≥0,
x2≥0,
x3≥0,
x4≥0.
Тогда вектор Lx=[0;
0; 0; 0]. Что касается остальных типов
ограничений, то так как у нас нет таких
ограничений, то для нас они не важны.

Задачи
нелинейного программирования.

Нелинейная задача отличается от линейной.
В ней есть система линейных неравенств
Ax≤b,
система линейных равенств A1x=b1,
система ограничений вида lx≤x≤rx,
lx≤x,
x≤rx.
Однако помимо этих уже знакомых (из
линейного программирования) условий,
есть еще система нелинейных ограничений
вида g1(x)≤0,
и система нелинейных равенств g2(x)=0.
Для решения задачи нелинейного
программирования (после выбора вектора
начальных приближений х0) используется
функция [x,
y,
f]=fmincon(F,
x0,
A,
b,
A1,
b1,
Lx,
Rx,
G),
где G
это М-функция, вычисляющая левые части
нелинейных ограничений g1(x)≤0,
g2(x)=0.
Если какие-то аргументы не определены,
то вместо них в вызове функции ставятся
квадратные скобки.

Рассмотрим
для примера следующую задачу. пусть
дана функция x12+x22=1
при условии, что x1x2=4,
x1≥0,
x2≥0.
Вектор начальных приближений примем
равным х0=(0.1, 0.1).

Понравилась статья? Поделить с друзьями:
  • Как найти лису в лесу зимой
  • Как найти сюжет для фанфика
  • Как исправить уже покрашенный потолок
  • Как найти дело по душе практическое руководство
  • Как составить анкету на проверяемого