fsolve

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

Нелинейный системный решатель

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

F (x) = 0

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

x является вектором или матрицей; смотрите Матричные аргументы.

Синтаксис

x = fsolve(fun,x0)
x = fsolve(fun,x0,options)
x = fsolve(problem)
[x,fval] = fsolve(___)
[x,fval,exitflag,output] = fsolve(___)
[x,fval,exitflag,output,jacobian] = fsolve(___)

Описание

пример

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

пример

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

пример

x = fsolve(problem) решает problem, где problem является структурой, описанной во Входных параметрах. Создайте структуру problem путем экспорта проблемы из приложения Оптимизации, как описано в Экспорте работы.

пример

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

пример

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

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

Примеры

свернуть все

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

Преобразуйте уравнения в форму.

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

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);

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

Преобразуйте уравнения в форму.

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

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 и решите проблему.

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

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

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

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

Преобразуйте уравнения в форму.

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

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

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

2x1x2=ex1x1+2x2=ex2.

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

2x1x2ex1=0x1+2x2ex2=0.

Запустите свой поиск решения в x0 = [-5 -5].

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

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

Сохраните этот файл функции как myfun.m на вашем пути MATLAB®.

Настройте начальную точку. Установите опции возвращать итеративное отображение.

x0 = [-5;-5];
options = optimoptions('fsolve','Display','iter');

Вызовите fsolve.

[x,fval] = fsolve(@myfun,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 =
    0.5671
    0.5671

fval =
  1.0e-006 *
      -0.4059
      -0.4059

Найдите матричный X, который удовлетворяет

X*X*X=[1234],

запуск в точке x= [1,1;1,1]. Исследуйте fsolve выходные параметры, чтобы видеть качество решения и процесс.

Создайте анонимную функцию, которая вычисляет матричное уравнение.

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

Установите опции выключать отображение. Установите начальную точку x0.

options = optimoptions('fsolve','Display','off');
x0 = ones(2);

Вызовите fsolve и получите информацию о процессе решения.

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

   -0.1291    0.8602
    1.2903    1.1612


fval =

   1.0e-09 *

   -0.1618    0.0778
    0.1160   -0.0474


exitflag =

     1

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

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

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

fsolve выполнил 35 функциональных оценок, чтобы найти решение, как вы видите в структуре output.

output.funcCount
ans =

    35

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

свернуть все

Нелинейные уравнения, чтобы решить, заданный как указатель на функцию или имя функции. 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 являются массивами, они преобразованы в векторы, использующие линейную индексацию (см. Индексацию массива (MATLAB)).

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

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

функциональный 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'.

Опция Algorithm задает настройку который алгоритм использовать. Это - только настройка, потому что для алгоритма доверительной области, нелинейная система уравнений не может быть недоопределенной; то есть, количество уравнений (число элементов F, возвращенного fun), должно быть, по крайней мере, столько же сколько длина x. Точно так же для алгоритма доверительного резкого искривления области, количество уравнений должно совпасть с длиной x. fsolve использует алгоритм Levenberg-Marquardt, когда выбранный алгоритм недоступен. Для получения дополнительной информации о выборе алгоритма смотрите Выбор Algorithm.

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

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

  • InitDamping — Установите начальный параметр Levenberg-Marquardt λ установкой 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

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

PlotFcn

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

  • 'optimplotx' строит текущую точку.

  • 'optimplotfunccount' строит функциональное количество.

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

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

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

Для получения информации о записи пользовательской функции построения графика смотрите Синтаксис Функции построения графика.

Для 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 для масштабирования конечных разностей для оценки градиента.

Алгоритм 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, что означает, что прямая факторизация (Холесский) используется, а не методы сопряженных градиентов (CG). Прямая факторизация является в вычислительном отношении более дорогой, чем CG, но производит лучший качественный шаг к решению. Установите PrecondBandWidth на 0 для предварительного создания условий диагонали (верхняя пропускная способность 0). Для некоторых проблем промежуточная пропускная способность сокращает количество итераций PCG.

SubproblemAlgorithm

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

TolPCG

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

Алгоритм Levenberg-Marquardt
InitDamping

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

ScaleProblem

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

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

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

Имя поляЗапись

objective

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

x0

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

solver

'fsolve'

options

Опции создаются с optimoptions

Самый простой способ получить структуру problem состоит в том, чтобы экспортировать проблему из приложения Оптимизации.

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

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

свернуть все

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

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

Обоснуйте, что остановленный fsolve, возвратился как целое число.

1

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

2

Уравнение решено. Изменитесь в 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 только дает один корень.

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

Советы

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

Алгоритмы

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

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

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

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

Ссылки

[1] Коулман, Т.Ф. и И. Ли, “Внутренний, Доверительный Подход области для Нелинейной Минимизации Согласно Границам”, SIAM Journal на Оптимизации, Издании 6, стр 418-445, 1996.

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

[3] Деннис, J. E. Младший, “Нелинейный метод наименьших квадратов”, Состояние в Числовом Анализе, редакторе Д. Джейкобсе, Academic Press, стр 269-312.

[4] Levenberg, K., “Метод для Решения Определенных проблем в Наименьших квадратах”, Ежеквартальная Прикладная математика 2, стр 164-168, 1944.

[5] Marquardt, D., “Алгоритм для Оценки Наименьших квадратов Нелинейных Параметров”, Прикладная математика SIAM Journal, Издание 11, стр 431-441, 1963.

[6] Moré, J. J. “Алгоритм Levenberg-Marquardt: Реализация и Теория”, Числовой Анализ, редактор Г. А. Уотсон, Примечания Лекции в Математике 630, Springer Verlag, стр 105-116, 1977.

[7] Moré, J. J. бакалавр наук Гарбоу, и К. Э. Хиллстром, руководство пользователя для MINPACK 1, национальной лаборатории Аргонна, Rept. ANL-80-74, 1980.

[8] Пауэлл, M. J. D. “Стандартная подпрограмма Фортрана для Решения Систем Нелинейных Алгебраических уравнений”, Численные методы для Нелинейных Алгебраических уравнений, П. Рабиновица, редактора, Ch.7, 1970.

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

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