exponenta event banner

fsolve

Система решения нелинейных уравнений

Описание

Решатель нелинейной системы

Решает проблему, указанную в

F (x) = 0

для x, где F (x) - функция, возвращающая значение вектора.

x - вектор или матрица; см. Аргументы матрицы.

пример

x = fsolve(fun,x0) начинается в x0 и пытается решить уравнения fun(x) = 0, массив нулей.

пример

x = fsolve(fun,x0,options) решает уравнения с опциями оптимизации, указанными в options. Использовать optimoptions для установки этих параметров.

пример

x = fsolve(problem) решает problem, структура, описанная в problem.

пример

[x,fval] = fsolve(___)для любого синтаксиса возвращает значение целевой функции fun на решении x.

пример

[x,fval,exitflag,output] = fsolve(___) дополнительно возвращает значение exitflag который описывает условие выхода fsolveи структура output с информацией о процессе оптимизации.

[x,fval,exitflag,output,jacobian] = fsolve(___) возвращает якобиан из fun на решении x.

Примеры

свернуть все

В этом примере показано, как решить два нелинейных уравнения в двух переменных. Уравнения:

$$ \begin{array}{c}
{e^{ - {e^{ - ({x_1} + {x_2})}}}} = {x_2}\left( {1 + x_1^2} \right)\\
{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right) = \frac{1}{2}.
\end{array} $$

Преобразуйте уравнения в форму.$F(x) = \bf{0}$

$$\begin{array}{c}
{e^{ - {e^{ - ({x_1} + {x_2})}}}} - {x_2}\left( {1 + x_1^2} \right) = 0\\
{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right)
- \frac{1}{2} = 0. \end{array} $$

Запишите функцию, которая вычисляет левую сторону этих двух уравнений.

function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;

Сохранить этот код как файл с именем root2d.m на пути MATLAB ®.

Решить систему уравнений, начиная с точки [0,0].

fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0)
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.


x =

    0.3532    0.6061

Проверьте процесс решения для нелинейной системы.

Задайте для опций отсутствие отображения и функции графика, отображающей оптимальность первого порядка, которая должна сходиться к 0 при итерации алгоритма.

options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);

Уравнения в нелинейной системе:

$$\begin{array}{c}
{e^{ - {e^{ - ({x_1} + {x_2})}}}} = {x_2}\left( {1 + x_1^2} \right)\\
{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right) = \frac{1}{2}.
\end{array} $$

Преобразуйте уравнения в форму.$F(x) = \bf{0}$

$$\begin{array}{c}
{e^{ - {e^{ - ({x_1} + {x_2})}}}} - {x_2}\left( {1 + x_1^2} \right) = 0\\
{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right)
- \frac{1}{2} = 0. \end{array} $$

Запишите функцию, которая вычисляет левую сторону этих двух уравнений.

function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;

Сохранить этот код как файл с именем root2d.m на пути MATLAB ®.

Решение нелинейной системы начиная с точки [0,0] и наблюдать за процессом решения.

fun = @root2d;
x0 = [0,0];
x = fsolve(fun,x0,options)
x =

    0.3532    0.6061

Создание структуры проблем для fsolve и решить проблему.

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

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

problem.options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);

Уравнения в нелинейной системе:

$$\begin{array}{c}
{e^{ - {e^{ - ({x_1} + {x_2})}}}} = {x_2}\left( {1 + x_1^2} \right)\\
{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right) = \frac{1}{2}.
\end{array} $$

Преобразуйте уравнения в форму.$F(x) = \bf{0}$

$$\begin{array}{c}
{e^{ - {e^{ - ({x_1} + {x_2})}}}} - {x_2}\left( {1 + x_1^2} \right) = 0\\
{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right)
- \frac{1}{2} = 0. \end{array} $$

Запишите функцию, которая вычисляет левую сторону этих двух уравнений.

function F = root2d(x)

F(1) = exp(-exp(-(x(1)+x(2)))) - x(2)*(1+x(1)^2);
F(2) = x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5;

Сохранить этот код как файл с именем root2d.m на пути MATLAB ®.

Создайте оставшиеся поля в структуре проблемы.

problem.objective = @root2d;
problem.x0 = [0,0];
problem.solver = 'fsolve';

Решите проблему.

x = fsolve(problem)
x =

    0.3532    0.6061

Этот пример возвращает итеративное отображение, показывающее процесс решения для системы двух уравнений и двух неизвестных

2x1-x2 = e-x1-x1 + 2x2 = e-x2.

Перепишите уравнения в виде F (x )  = 0:

2x1-x2-e-x1 = 0-x1 + 2x2-e-x2 = 0.

Начните поиск решения по адресу x0 = [-5 -5].

Сначала запишите функцию, которая вычисляет F, значения уравнений при x.

F = @(x) [2*x(1) - x(2) - exp(-x(1));
         -x(1) + 2*x(2) - exp(-x(2))];

Создание начальной точки x0.

x0 = [-5;-5];

Задайте параметры для возврата итеративного отображения.

options = optimoptions('fsolve','Display','iter');

Решите уравнения.

[x,fval] = fsolve(F,x0,options)
                                         Norm of      First-order   Trust-region
 Iteration  Func-count     f(x)          step         optimality    radius
     0          3         47071.2                      2.29e+04               1
     1          6         12003.4              1       5.75e+03               1
     2          9         3147.02              1       1.47e+03               1
     3         12         854.452              1            388               1
     4         15         239.527              1            107               1
     5         18         67.0412              1           30.8               1
     6         21         16.7042              1           9.05               1
     7         24         2.42788              1           2.26               1
     8         27        0.032658       0.759511          0.206             2.5
     9         30     7.03149e-06       0.111927        0.00294             2.5
    10         33     3.29525e-13     0.00169132       6.36e-07             2.5

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.
x = 2×1

    0.5671
    0.5671

fval = 2×1
10-6 ×

   -0.4059
   -0.4059

Итеративный дисплей показывает f(x), который является квадратом нормы функции F(x). По мере выполнения итераций это значение уменьшается почти до нуля. Измерение оптимальности первого порядка также уменьшается почти до нуля по мере выполнения итераций. Эти записи показывают сходимость итераций к решению. Значения других записей см. в разделе Итерационное отображение.

fval выходные данные дают значение функции F(x), которая должна быть равна нулю при решении (в пределах FunctionTolerance допуск).

Найти матрицу X, удовлетворяющую требованиям

X * X * X = [1234],

начиная с точки x0 = [1,1;1,1]. Создание анонимной функции, которая вычисляет матричное уравнение и создает точку x0.

fun = @(x)x*x*x - [1,2;3,4];
x0 = ones(2);

Установите параметры без отображения.

options = optimoptions('fsolve','Display','off');

Осмотрите fsolve результаты для просмотра качества решения и процесса.

[x,fval,exitflag,output] = fsolve(fun,x0,options)
x = 2×2

   -0.1291    0.8602
    1.2903    1.1612

fval = 2×2
10-9 ×

   -0.1618    0.0778
    0.1160   -0.0474

exitflag = 1
output = struct with fields:
       iterations: 6
        funcCount: 35
        algorithm: 'trust-region-dogleg'
    firstorderopt: 2.4095e-10
          message: '...'

Значение флага выхода 1 указывает, что решение является надежным. Чтобы проверить это вручную, вычислите остаток (сумму квадратов fval), чтобы увидеть, насколько он близок к нулю.

sum(sum(fval.*fval))
ans = 4.7957e-20

Этот небольшой остаток подтверждает, что x является решением.

Вы можете видеть в output структурировать, сколько итераций и оценок функций fsolve выполняется для поиска решения.

Входные аргументы

свернуть все

Нелинейные уравнения для решения, заданные как дескриптор функции или имя функции. fun - функция, принимающая вектор x и возвращает вектор F, нелинейные уравнения, оцененные в x. Решаемые уравнения: F = 0 для всех компонентов F. Функция fun может быть указан как дескриптор функции для файла

x = fsolve(@myfun,x0)

где myfun является функцией MATLAB ®, такой как

function F = myfun(x)
F = ...            % Compute function values at x

fun также может быть дескриптором функции для анонимной функции.

x = fsolve(@(x)sin(x.*x),x0);

Если пользовательские значения для x и F являются массивами, они преобразуются в векторы с помощью линейного индексирования (см. «Индексирование массивов»).

Если якобиан также может быть вычислен и 'SpecifyObjectiveGradient' опция - true, устанавливается по

options = optimoptions('fsolve','SpecifyObjectiveGradient',true)

функция fun должен возвращать во втором выходном аргументе значение якобиана J, матрица, в x.

Если fun возвращает вектор (матрицу) m компоненты и x имеет длину n, где n - длина x0, якобианец J является mоколо-n матрица, где J(i,j) - частная производная F(i) в отношении x(j). (Якобиан J - транспонирование градиента F.)

Пример: fun = @(x)x*x*x-[1,2;3,4]

Типы данных: char | function_handle | string

Начальная точка, заданная как вещественный вектор или вещественный массив. fsolve использует количество элементов в и размер x0 для определения количества и размера переменных, которые fun принимает.

Пример: x0 = [1,2,3,4]

Типы данных: double

Опции оптимизации, указанные как выходные данные optimoptions или структура, такая как optimset возвращает.

Некоторые опции применимы ко всем алгоритмам, а другие актуальны для конкретных алгоритмов. Дополнительные сведения см. в разделе Справочник по опциям оптимизации.

Некоторые опции отсутствуют в optimoptions дисплей. Эти параметры выделены курсивом в следующей таблице. Дополнительные сведения см. в разделе Параметры просмотра.

Все алгоритмы
Algorithm

Выберите между 'trust-region-dogleg' (по умолчанию), 'trust-region', и 'levenberg-marquardt'.

Algorithm задает настройку для используемого алгоритма. Это только предпочтение, потому что для алгоритма доверительной области нелинейная система уравнений не может быть недооценена; то есть количество уравнений (количество элементов F возвращено fun) должно быть не менее длины x. Аналогично, для алгоритма trust-region-dogleg число уравнений должно быть равно длине x. fsolve использует алгоритм Левенберга-Марквардта, когда выбранный алгоритм недоступен. Дополнительные сведения о выборе алгоритма см. в разделе Выбор алгоритма.

Установка некоторых параметров алгоритма с помощью optimset вместо optimoptions:

  • Algorithm - Установить алгоритм в 'trust-region-reflective' вместо 'trust-region'.

  • InitDamping - установка начального параметра Левенберга-Марквардта λ путем установки Algorithm к массиву ячеек, такому как {'levenberg-marquardt',.005}.

CheckGradients

Сравнение предоставленных пользователем производных (градиентов цели или ограничений) с производными с конечной разницей. Выбор: true или значение по умолчанию false.

Для optimset, имя: DerivativeCheck и значения 'on' или 'off'. См. раздел Имена текущих и устаревших опций.

Диагностика

Отображение диагностической информации о функции, которая должна быть свернута или решена. Выбор: 'on' или значение по умолчанию 'off'.

DiffMaxChange

Максимальное изменение переменных для градиентов конечных разностей (положительный скаляр). Значение по умолчанию: Inf.

DiffMinChange

Минимальное изменение переменных для градиентов конечных разностей (положительный скаляр). Значение по умолчанию: 0.

Display

Уровень отображения (см. Итерационный просмотр):

  • 'off' или 'none' не отображает выходные данные.

  • 'iter' отображает выходные данные в каждой итерации и выдает сообщение о выходе по умолчанию.

  • 'iter-detailed' отображает выходные данные в каждой итерации и выдает сообщение о техническом выходе.

  • 'final' (по умолчанию) отображает только окончательный вывод и выдает сообщение о выходе по умолчанию.

  • 'final-detailed' отображает только окончательный вывод и выдает сообщение о техническом выходе.

FiniteDifferenceStepSize

Коэффициент размера шага скаляра или вектора для конечных разностей. При установке FiniteDifferenceStepSize к вектору v, прямые конечные различия delta являются

delta = v.*sign′(x).*max(abs(x),TypicalX);

где sign′(x) = sign(x) кроме sign′(0) = 1. Центральными конечными различиями являются

delta = v.*max(abs(x),TypicalX);

Скаляр FiniteDifferenceStepSize расширяется до вектора. Значение по умолчанию: sqrt(eps) для прямых конечных разностей, и eps^(1/3) для центральных конечных разностей.

Для optimset, имя: FinDiffRelStep. См. раздел Имена текущих и устаревших опций.

FiniteDifferenceType

Конечные различия, используемые для оценки градиентов: 'forward' (по умолчанию), или 'central' (по центру). 'central' занимает вдвое больше оценок функций, но должно быть более точным.

Алгоритм тщательно соблюдает границы при оценке обоих типов конечных разностей. Так, например, может потребоваться обратная, а не прямая разница, чтобы избежать оценки в точке за пределами границ.

Для optimset, имя: FinDiffType. См. раздел Имена текущих и устаревших опций.

FunctionTolerance

Допуск окончания для значения функции, положительный скаляр. Значение по умолчанию: 1e-6. См. раздел Допуски и критерии остановки.

Для optimset, имя: TolFun. См. раздел Имена текущих и устаревших опций.

FunValCheck

Проверьте допустимость значений целевой функции. 'on' отображает ошибку, когда целевая функция возвращает значение, complex, Inf, или NaN. Значение по умолчанию, 'off', не отображает ошибки.

MaxFunctionEvaluations

Максимально допустимое число оценок функций, положительное целое число. Значение по умолчанию: 100*numberOfVariables. См. раздел Допуски и критерии остановки, итерации и подсчеты функций.

Для optimset, имя: MaxFunEvals. См. раздел Имена текущих и устаревших опций.

MaxIterations

Максимальное допустимое число итераций, положительное целое число. Значение по умолчанию: 400. См. раздел Допуски и критерии остановки, итерации и подсчеты функций.

Для optimset, имя: MaxIter. См. раздел Имена текущих и устаревших опций.

OptimalityTolerance

Допуск окончания для оптимальности первого порядка (положительный скаляр). Значение по умолчанию: 1e-6. См. раздел Измерение оптимальности первого порядка.

Внутри, 'levenberg-marquardt' алгоритм использует допуск оптимальности (критерий остановки) 1e-4 времена FunctionTolerance и не использует OptimalityTolerance.

OutputFcn

Укажите одну или несколько пользовательских функций, вызываемых функцией оптимизации в каждой итерации. Передача дескриптора функции или массива ячеек дескрипторов функции. Значение по умолчанию - нет ([]). См. раздел Функция вывода и синтаксис функции печати.

PlotFcn

Отображает различные показатели прогресса во время выполнения алгоритма; выбрать из предопределенных графиков или написать свой собственный. Передача имени встроенной функции графика, дескриптора функции или массива ячеек имен встроенных функций графика или дескрипторов функций. Для пользовательских функций печати передайте дескрипторы функций. Значение по умолчанию - нет ([]):

  • 'optimplotx' строит график текущей точки.

  • 'optimplotfunccount' строит график подсчета функций.

  • 'optimplotfval' строит график значения функции.

  • 'optimplotstepsize' строит график размера шага.

  • 'optimplotfirstorderopt' строит график измерения оптимальности первого порядка.

Пользовательские функции печати используют тот же синтаксис, что и функции вывода. См. раздел Функции вывода для оптимизации Toolbox™ и Функция вывода и синтаксис функции печати.

Для optimset, имя: PlotFcns. См. раздел Имена текущих и устаревших опций.

SpecifyObjectiveGradient

Если true, fsolve использует определяемый пользователем Jacobian (определяется в fun), или якобинская информация (при использовании JacobianMultiplyFcn), для целевой функции. Если false (по умолчанию), fsolve аппроксимирует якобиан с помощью конечных разностей.

Для optimset, имя: Jacobian и значения 'on' или 'off'. См. раздел Имена текущих и устаревших опций.

StepTolerance

Допуск окончания на x, положительный скаляр. Значение по умолчанию: 1e-6. См. раздел Допуски и критерии остановки.

Для optimset, имя: TolX. См. раздел Имена текущих и устаревших опций.

TypicalX

Типичный x значения. Количество элементов в TypicalX равно количеству элементов в x0, отправная точка. Значение по умолчанию: ones(numberofvariables,1). fsolve использование TypicalX для масштабирования конечных разностей для градиентной оценки.

trust-region-dogleg использование алгоритма TypicalX в качестве диагональных членов матрицы масштабирования.

UseParallel

Когда true, fsolve оценивает градиенты параллельно. Отключите, установив значение по умолчанию, false. См. раздел Параллельные вычисления.

Алгоритм доверительной области
JacobianMultiplyFcn

Функция умножения якобиана, заданная как дескриптор функции. Для крупномасштабных структурированных задач эта функция вычисляет матричное изделие Якобиана J*Y, J'*Y, или J'*(J*Y) без фактического формирования J. Функция имеет вид

W = jmfun(Jinfo,Y,flag)

где Jinfo содержит матрицу, используемую для вычисления J*Y (или J'*Y, или J'*(J*Y)). Первый аргумент Jinfo должен совпадать со вторым аргументом, возвращаемым целевой функцией fun, например, в

[F,Jinfo] = fun(x)

Y - матрица, имеющая такое же количество строк, как и размеры в задаче. flag определяет, какой продукт вычислять:

  • Если flag == 0, W = J'*(J*Y).

  • Если flag > 0, W = J*Y.

  • Если flag < 0, W = J'*Y.

В каждом случае J не формируется явным образом. fsolve использование Jinfo для вычисления предварительного условия. Для получения информации о подаче значений для любых дополнительных параметров см. раздел Передача дополнительных параметров. jmfun потребности.

Примечание

'SpecifyObjectiveGradient' необходимо установить значение true для fsolve пройти Jinfo от fun кому jmfun.

Аналогичный пример см. в разделе Минимизация с помощью плотных структурированных гессенских линейных уравнений.

Для optimset, имя: JacobMult. См. раздел Имена текущих и устаревших опций.

JacobPattern

Узор разреженности якобиана для конечных разностей. Набор JacobPattern(i,j) = 1 когда fun(i) зависит от x(j). В противном случае установите JacobPattern(i,j) = 0. Другими словами, JacobPattern(i,j) = 1 когда вы можете иметь ∂fun(i)/∂x(j)  ≠ 0.

Использовать JacobPattern когда неудобно вычислять матрицу Якобиана J в fun, хотя вы можете определить (скажем, инспекцией), когда fun(i) зависит от x(j). fsolve может аппроксимировать J посредством разреженных конечных разностей, когда вы даете JacobPattern.

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

MaxPCGIter

Максимальное число итераций PCG (предварительно кондиционированный сопряженный градиент), положительный скаляр. Значение по умолчанию: max(1,floor(numberOfVariables/2)). Дополнительные сведения см. в разделе Алгоритмы решения уравнений.

PrecondBandWidth

Верхняя полоса пропускания устройства предварительного кондиционирования для PCG, неотрицательное целое число. Дефолт PrecondBandWidth является Inf, что означает использование прямой факторизации (Cholesky), а не сопряженных градиентов (CG). Прямая факторизация в вычислительном отношении дороже, чем CG, но обеспечивает более качественный шаг к решению. Набор PrecondBandWidth кому 0 для предварительного кондиционирования по диагонали (верхняя полоса пропускания 0). Для некоторых проблем промежуточная полоса пропускания уменьшает количество итераций PCG.

SubproblemAlgorithm

Определяет способ вычисления шага итерации. Значение по умолчанию, 'factorization', делает более медленный, но более точный шаг, чем 'cg'. См. раздел Алгоритм области доверия.

TolPCG

Допуск окончания для итерации PCG, положительный скаляр. Значение по умолчанию: 0.1.

Алгоритм Левенберга-Марквардта
InitDamping

Начальное значение параметра Левенберга-Марквардта, положительный скаляр. По умолчанию: 1e-2. Дополнительные сведения см. в разделе Метод Левенберга-Марквардта.

ScaleProblem

'jacobian' иногда может улучшить сходимость плохо масштабированной проблемы. Значение по умолчанию: 'none'.

Пример: options = optimoptions('fsolve','FiniteDifferenceType','central')

Структура проблемы, заданная как структура со следующими полями:

Имя поляВход

objective

Целевая функция

x0

Начальная точка для x

solver

'fsolve'

options

Параметры, созданные с помощью optimoptions

Типы данных: struct

Выходные аргументы

свернуть все

Решение, возвращаемое в виде вещественного вектора или вещественного массива. Размер x совпадает с размером x0. Как правило, x является локальным решением проблемы, когда exitflag является положительным. Сведения о качестве решения см. в разделе Когда решатель добьется успеха.

Значение целевой функции в решении, возвращаемое как действительный вектор. Как правило, fval = fun(x).

Причина fsolve остановлено, возвращено как целое число.

1

Уравнение решено. Оптимальность первого порядка мала.

2

Уравнение решено. Изменение в x меньше указанного допуска, или якобиан при x не определен.

3

Уравнение решено. Изменение остаточного значения меньше заданного допуска.

4

Уравнение решено. Величина направления поиска меньше заданного допуска.

0

Превышено число итераций options.MaxIterations или количество превышенных оценок функций options.MaxFunctionEvaluations.

-1

Функция вывода или функция графика остановили алгоритм.

-2

Уравнение не решено. Сообщение о выходе может содержать дополнительную информацию.

-3

Уравнение не решено. Радиус области доверия стал слишком маленьким (trust-region-dogleg алгоритм).

Информация о процессе оптимизации, возвращенная в виде структуры с полями:

iterations

Количество выполненных итераций

funcCount

Количество оценок функций

algorithm

Используемый алгоритм оптимизации

cgiterations

Общее количество итераций PCG ('trust-region' только алгоритм)

stepsize

Окончательное смещение в x (не в 'trust-region-dogleg')

firstorderopt

Мера оптимальности первого порядка

message

Выйти из сообщения

Якобиан в решении, вернулся как реальная матрица. jacobian(i,j) - частная производная fun(i) в отношении x(j) на решении x.

Ограничения

  • Решаемая функция должна быть непрерывной.

  • При успешном выполнении, fsolve дает только один корень.

  • Метод trust-region dogleg по умолчанию может использоваться только в том случае, если система уравнений квадратная, т.е. число уравнений равно числу неизвестных. Для метода Левенберга - Марквардта система уравнений не обязательно должна быть квадратной.

Совет

  • Для больших проблем, т.е. проблем с тысячами переменных или более, сохраните память (и, возможно, сэкономьте время), установив Algorithm опция для 'trust-region' и SubproblemAlgorithm опция для 'cg'.

Алгоритмы

Методы Левенберга-Марквардта и области доверия основаны на нелинейных алгоритмах наименьших квадратов, также используемых в lsqnonlin. Используйте один из этих методов, если система может не иметь нуля. Алгоритм по-прежнему возвращает точку, где остаток мал. Однако, если якобиан системы является единственным, алгоритм может сходиться к точке, которая не является решением системы уравнений (см. Ограничения).

  • По умолчанию fsolve выбирает алгоритм dogleg области доверия. Алгоритм является вариантом метода доглега Пауэлла, описанного в [8]. По своей природе он аналогичен алгоритму, реализованному в [7]. См. раздел Алгоритм Trust-Region-Dogleg.

  • Алгоритм области доверия является методом области доверия подпространства и основан на способе Ньютона с внутренним отражением, описанном в [1] и [2]. Каждая итерация включает в себя приблизительное решение большой линейной системы методом предварительно кондиционированных сопряженных градиентов (PCG). См. раздел Алгоритм области доверия.

  • Метод Левенберга-Марквардта описан в ссылках [4], [5] и [6]. См. Метод Левенберга-Марквардта.

Альтернативная функциональность

Приложение

Задача «Оптимизировать интерактивный редактор» обеспечивает визуальный интерфейс для fsolve.

Ссылки

[1] Коулман, Т.Ф. и Ю.Ли, «Интерьерный, доверительный региональный подход для нелинейной минимизации, подверженной ограничениям», SIAM Journal on Optimization, Vol. 6, pp. 418-445, 1996.

[2] Коулман, Т.Ф. и Ю.Ли, «О конвергенции отражательных методов Ньютона для крупномасштабной нелинейной минимизации, подверженной ограничениям», Математическое программирование, том 67, номер 2, стр. 189-224, 1994.

[3] Деннис, Дж. Э. младший, «Нелинейные наименьшие квадраты», The State of the Art in Numerical Analysis, ред. Д. Джейкобс, Academic Press, pp. 269-312.

[4] Левенберг, К., «Метод решения некоторых проблем в наименьших квадратах», Ежеквартальная прикладная математика 2, стр. 164-168, 1944.

[5] Марквардт, Д., «Алгоритм оценки нелинейных параметров методом наименьших квадратов», SIAM Journal Applied Mathematics, Vol. 11, pp. 431-441, 1963.

[6] Море, Дж. Дж., «Алгоритм Левенберга-Марквардта: реализация и теория», Численный анализ, ред. Г. А. Ватсон, Лекционные записки по математике 630, Спрингер Верлаг, стр. 105-116, 1977.

[7] Море, Дж. Дж., Б. С. Гарбоу и К. Э. Хиллстрем, Руководство пользователя MINPACK 1, Аргоннская национальная лаборатория, Rept. ANL-80-74, 1980.

[8] Пауэлл, М. Дж. Д., «Подпрограмма Фортрана для решения систем нелинейных алгебраических уравнений», Численные методы нелинейных алгебраических уравнений, П. Рабиновиц, изд., Ch.7, 1970.

Расширенные возможности

.
Представлен до R2006a