fsolve

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

Описание

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

Решает задачу, заданную как

F (<reservedrangesplaceholder0>) = 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}&#xA;{e^{ - {e^{ - ({x_1} + {x_2})}}}} = {x_2}\left( {1 + x_1^2} \right)\\&#xA;{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right) = \frac{1}{2}.&#xA;\end{array} $$

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

$$\begin{array}{c}&#xA;{e^{ - {e^{ - ({x_1} + {x_2})}}}} - {x_2}\left( {1 + x_1^2} \right) = 0\\&#xA;{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right)&#xA;- \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}&#xA;{e^{ - {e^{ - ({x_1} + {x_2})}}}} = {x_2}\left( {1 + x_1^2} \right)\\&#xA;{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right) = \frac{1}{2}.&#xA;\end{array} $$

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

$$\begin{array}{c}&#xA;{e^{ - {e^{ - ({x_1} + {x_2})}}}} - {x_2}\left( {1 + x_1^2} \right) = 0\\&#xA;{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right)&#xA;- \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 и решить проблему.

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

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

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

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

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

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

$$\begin{array}{c}&#xA;{e^{ - {e^{ - ({x_1} + {x_2})}}}} - {x_2}\left( {1 + x_1^2} \right) = 0\\&#xA;{x_1}\cos \left( {{x_2}} \right) + {x_2}\sin \left( {{x_1}} \right)&#xA;- \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). Это значение уменьшается до почти нуля по мере продолжения итераций. Мера оптимальности первого порядка также уменьшается до почти нуля по мере продолжения итераций. Эти записи показывают сходимость итераций к решению. Значения других записей см. в разделе Итеративное отображение.

The 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-by- 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'.

The Algorithm опция задаёт выбор, для какого алгоритма использовать. Это только выбор, потому что для алгоритма доверительной области нелинейная система уравнений не может быть недостаточно определена; то есть количество уравнений (количество элементов F возвращается по fun) должно быть не менее длины x. Точно так же для алгоритма доверительной области-резкого искривления количество уравнений должно быть таким же, как и длина 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

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

DiffMinChange

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

Display

Level of 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

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

Для optimset, имя TolFun. См. «Текущие и устаревшие имена опций».

FunValCheck

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

MaxFunctionEvaluations

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

Для optimset, имя MaxFunEvals. См. «Текущие и устаревшие имена опций».

MaxIterations

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

Для optimset, имя MaxIter. См. «Текущие и устаревшие имена опций».

OptimalityTolerance

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

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

OutputFcn

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

PlotFcn

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

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

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

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

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

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

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

Для optimset, имя PlotFcns. См. «Текущие и устаревшие имена опций».

SpecifyObjectiveGradient

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

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

StepTolerance

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

Для optimset, имя TolX. См. «Текущие и устаревшие имена опций».

TypicalX

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

The 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)/  <reservedrangesplaceholder0>  ≠ 0.

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

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

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

Начальное значение параметра Левенберга-Марквардта, a положительной скалярной величины. По умолчанию это 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 stop, возвращается как целое число.

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 дает только один корень.

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

Совет

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

Алгоритмы

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

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

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

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

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

Приложение

Задача Optimize Live Editor обеспечивает визуальный интерфейс для fsolve.

Ссылки

[1] Coleman, T.F. and Y. Li, «An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds», SIAM Journal on Optimization, Vol. 6, pp. 418-445, 1996.

[2] Coleman, T.F. and Y. Li, «On the Convergence of Reflective Newton Methods for Large Nonlinear Minimization Subjected to Bounds», Mathematical Programming, Vol. 67, Number 2, pp. 189-224, 1994.

[3] Деннис, Дж. Э. Младший, «Нелинейные наименьшие квадраты», Состояние искусства в численном анализе, ред. Д. Якобс, Академическая пресса, стр. 269-312.

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

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

[6] Moré, J. J., «The Levenberg-Marquardt Algorithm: Implementation and Theory», Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics 630, Springer Verlag, pp. 105-116, 1977.

[7] Море, Дж. Дж., Б. С. Garbow, and K. E. Hillstrom, Руководство for MINPACK 1, Argonne National Laboratory, Rept. ANL-80-74, 1980.

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

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

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