В матлабе как найти максимумы функции

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. Их исходники чуть ниже.
Скачать исходники

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

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



Знаток

(286),
на голосовании



11 лет назад

Голосование за лучший ответ

Andy Lee

Мастер

(1394)


11 лет назад

В матлабе есть пакет символьных вычислений, там вы можете найти производную функции (diff), далее вам нужно найти точку в которой производная = 0 (solve(резул-т дифф.) ) – нашли необход. условие сущ-ния экстремума в x0. Дальше – по определению максимума – f(x) <= f(x0) для всех х (справа и слева от х0) (или найти вторую производную в точке х0 и если она меньше 0 – точка локального макимума – собрать все найти максим).

Джеймс Девиван

Гуру

(4877)


6 лет назад

Минимум одномерной функции отыскивают с помощью команды fminsearch. Для поиска
максимума функции f (x) достаточно найти минимум функции – f (x), поэтому специальной
функции для поиска максимумов в MATLAB не существует.

Оптимизация

Оптимизация — в математике, информатике и исследовании операций задача нахождения экстремума (минимума или максимума) целевой функции в некоторой области конечномерного векторного пространства, ограниченной набором линейных и/или нелинейных равенств и/или неравенств.

Теорию и методы решения задачи оптимизации изучает математическое программирование.

Классификация

Одномерная оптимизация – целевая функция – это функция одной переменной.
Многомерная оптимизация – целевая функция – функция нескольких переменных.

Безусловная оптимизация – область, в которой происходит поиск решения задачи оптимизации, ничем не ограничена.
Условная оптимизация – область, в которой происходит поиск решения задачи оптимизации, ограничен набором линейных и/или нелинейных равенств и/или неравенств.

Безусловная оптимизация в MATLAB

Для решения задачи безусловной оптимизации в MATLAB встроены функции fminsearch и fminunc.

Функция fminsearch реализует симплексный алгоритм Нелдара-Мида. Его идея заключается в следующем: на предварительном шаге выбирается n + 1 точек, не расположенных в одной гиперплоскости. Эти точки являются вершинами симплекса, откуда название алгоритма. Точка, в которой значение функции максимально, удаляется и вместо неё по определённым правилам выбирается другая. Итерации продолжаются до тех пор, пока симплекс не станет достаточно малым. Алгоритм Нелдера-Мида можно использовать для оптимизации негладких и даже разрывных функций.

Функция fminunc реализует несколько методов гладкой безусловной оптимизации:

  • метод наискорейшего спуска (Steepest Descent method)
  • квази-Ньютоновский BFGS-метод (Broyden–Fletcher–Goldfarb–Shanno)
  • квази-Ньютоновский DFP-метод (Davidon–Fletcher–Powell)
  • методы, основанные на построении доверительных двумерных областей (trust region)

Первые три из них отнесены к «medium-scale»-методам и предназначены для решения задач оптимизации средней размерности (например, не больше 100 переменных), последний — к «large-scale»-методам. По умолчанию, если пользователь задает аналитическое выражение для градиента, запускается метод доверительного интервала. В противном случае используется BFGS-метод, но есть возможность переключиться и на
другие. Метод наискорейшего спуска, как правило, очень медлителен и его не рекомен-дуется использовать для решения практических задач. В Matlab-е он присутствует только для иллюстративных целей.

fminsearch

x = fminsearch(fun,x0)
x = fminsearch(fun,x0,options)
[x,fval] = fminsearch(...)
[x,fval,exitflag] = fminsearch(...)
[x,fval,exitflag,output] = fminsearch(...)

Входные параметры:

  • fun – указатель на функцию. Например, @function_name, если функция уже где-то определена, либо fun = '4*x.^2+3', т.е. можно просто задать строку, содержащую запись функции.
  • x0 – стартовая точка.
  • options – стрктура, задающая различные дополнительные опции. Поля структуры:
    • Display – определяет объём информации, который будет выводить функция в процессе работы. Возможные значения:
      • off или none – ничего не будет выведено в консоль.
      • iter – выводить информацию на каждой итерации алгоритма.
      • notify – выводить инфорацию только в том случае, если не удаётся найти решение (only if the function does not converge).
      • final (по умолчанию) – вывести финальные результаты.
    • FunValCheck – проверяет, валидные ли значения возвращает функция. Возможные значения:
      • on – выводит сообщение об ошибке, если функция вернула complex, Inf или NaN.
      • off (по умолчанию) – противоположно случаю on.
    • MaxFunEvals – маскимально допустимое число подсчёта значений функции. Положительное число. По умолчанию 200 * numberOfVariables.
    • MaxIter – маскимально допустимое число итераций алгоритма. Положительное число. По умолчанию 200 * numberOfVariables.
    • OutputFcn – позволяет укзать одну или более пользовательских функций, которые будут вызываться на каждой итерации.
    • PlotFcns – позволяет указать одну или более пользовательских функий, которые будет рисовать прогресс алгоритма. В MATLAB уже доступно несколько функций:
      • @optimplotx plots the current point.
      • @optimplotfunccount plots the function count.
      • @optimplotfval plots the function value.
    • TolFun – Termination tolerance on the function value, a positive scalar. The default is 1e-4.
    • TolX – Termination tolerance on x, a positive scalar. The default value is 1e-4.

Выходные параметры:

  • x – найденная точка локального минимума.
  • fval – значение функции в найденной точке.
  • exitflag – описывает причину, по которой функция завершила свою работу. Возможные значения:
    • 1 – найдено решение x.
    • 0 – превышено число итераций options.MaxIter или число вычислений функции MaxFunEvals.
    • -1 – алгоритм был остановлен функцией options.OutputFcn.
  • output – структура, содержащая информацию об оптимизации. Поля структуры:
    • iterations – число выполненных итераций.
    • funcCount – число вычислений значения функции.
    • algorithm – название алгоритма: ‘Nelder-Mead simplex direct search’.
    • message – причина завершения работы функции (в виде текстового сообщения).

Пример

fun = @myfunc; % '4 * x^2 + 2 * x + 3'; 

[x, y, exitflag, output] = fminsearch(fun, -20);

x, y, exitflag, output

X = -1:0.1:1;
Y = myfunc(X);

hold on;
plot(X, Y, '-r');
plot(x, y, '*b');
hold off;

myfunc.m:

function [Y] = myfunc(X)
Y = 4 * X.^2 + 2 * X + 3;

Результат работы:

x =

   -0.2500


y =

    2.7500


exitflag =

     1


output = 

    iterations: 22
     funcCount: 44
     algorithm: 'Nelder-Mead simplex direct search'
       message: 'Optimization terminated:
 the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-04 
 and...'

Результат безусловной одномерной интерполяции

fminunc

x = fminunc(fun,x0)
x = fminunc(fun,x0,options)
x = fminunc(problem)
[x,fval] = fminunc(...)
[x,fval,exitflag] = fminunc(...)
[x,fval,exitflag,output] = fminunc(...)
[x,fval,exitflag,output,grad] = fminunc(...)
[x,fval,exitflag,output,grad,hessian] = fminunc(...)

Одномерная условная оптимизация в MATLAB

Функция f(x) одного аргумента x называется унимодальной на отрезке [a, b], если на нём найдется такая точка x0 (точка минимума), что f(x) монотонно убывает при a ≤ x ≤ x0 и монотонно возрастает при x0 ≤ x ≤ b. Для минимизации унимодальной функции, заданной на отрезке Matlab предоставляет функцию fminbnd.

Ее можно применять и для минимизации функций, не являющихся унимодальными. В этом случае будет найден локальный минимум. fminbnd использует комбинацию методов золотого сечения и последовательной параболической интерполяции. Реализована функция в виде m-файла, поэтому желающие могут ознакомиться с деталями по исходному коду.

Добавить комментарий