lsqcurvefit

Решите нелинейный подбор кривых (подбор кривой данных) проблемы в смысле наименьших квадратов

Решатель нелинейного метода наименьших квадратов

Найдите коэффициенты x, которые решают проблему

minxF(x,xdata)ydata22=minxi(F(x,xdatai)ydatai)2,

учитывая входные данные xdata и наблюдаемый вывод ydata, где xdata и ydata являются матрицами или векторами, и F (x, xdata) являются функцией с векторным знаком или с матричным знаком, одного размера как ydata.

Опционально, компоненты x могут иметь нижние и верхние границы lb и ub. Аргументы x, lb и ub могут быть векторами или матрицами; смотрите Матричные аргументы.

Функция lsqcurvefit использует тот же алгоритм в качестве lsqnonlin. lsqcurvefit просто обеспечивает удобный интерфейс для соответствующих данным проблем.

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

F(x,xdata)=[F(x,xdata(1))F(x,xdata(2))F(x,xdata(k))].

Синтаксис

x = lsqcurvefit(fun,x0,xdata,ydata)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
x = lsqcurvefit(problem)
[x,resnorm] = lsqcurvefit(___)
[x,resnorm,residual,exitflag,output] = lsqcurvefit(___)
[x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(___)

Описание

пример

x = lsqcurvefit(fun,x0,xdata,ydata) запускается в x0 и находит коэффициенты x, чтобы лучше всего соответствовать нелинейному функциональному fun(x,xdata) к данным ydata (в смысле наименьших квадратов). ydata должен быть одного размера как вектор (или матрица) F, возвращенный fun.

Примечание

Передача Дополнительных Параметров объясняет, как передать дополнительные параметры вектор-функции fun(x) при необходимости.

пример

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub) задает набор нижних и верхних границ на переменных проекта в x, так, чтобы решением всегда был в области значений  lb   ≤ x ≤ ub. Можно зафиксировать компонент решения x(i) путем определения   lb(i) = ub(i).

Примечание

Если заданные входные границы для проблемы противоречивы, выводом x является x0, и выходными параметрами resnorm и residual является [].

Компоненты x0, которые нарушают границы     lb ≤ x ≤ ub, сбрасываются к внутренней части поля, заданного границами. Компоненты, которые уважают границы, не изменяются.

пример

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options) минимизирует с опциями оптимизации, заданными в options. Используйте optimoptions, чтобы установить эти опции. Передайте пустые матрицы для lb и ub, если никакие границы не существуют.

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

[x,resnorm] = lsqcurvefit(___), для любых входных параметров, возвращает значение квадратичной нормы невязки в x: sum((fun(x,xdata)-ydata).^2).

пример

[x,resnorm,residual,exitflag,output] = lsqcurvefit(___) дополнительно возвращает значение остаточного fun(x,xdata)-ydata в решении x, значение exitflag, который описывает выходное условие и структуру output, который содержит информацию о процессе оптимизации.

[x,resnorm,residual,exitflag,output,lambda,jacobian] = lsqcurvefit(___) дополнительно возвращает структуру lambda, поля которого содержат множители Лагранжа в решении x и якобиан fun в решении x.

Примеры

свернуть все

Предположим, что у вас есть данные времени наблюдения xdata и наблюдаемые данные об ответе ydata, и вы хотите найти параметры x(1) и x(2) подбирать модель формы

ydata=x(1)exp(x(2)xdata).

Введите времена наблюдения и ответы.

xdata = ...
 [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = ...
 [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];

Создайте простую экспоненциальную модель затухания.

fun = @(x,xdata)x(1)*exp(x(2)*xdata);

Соответствуйте модели с помощью отправной точки x0 = [100,-1].

x0 = [100,-1];
x = lsqcurvefit(fun,x0,xdata,ydata)
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.
x = 1×2

  498.8309   -0.1013

Отобразите на графике данные и кривую по экспериментальным точкам.

times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun(x,times),'b-')
legend('Data','Fitted exponential')
title('Data and Fitted Curve')

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

Сгенерируйте данные из экспоненциальной модели затухания плюс шум. Модель

y=exp(-1.3t)+ε,

с t в пределах от 0 до 3, и ε нормально распределенный шум со средним значением 0 и стандартным отклонением 0.05.

rng default % for reproducibility
xdata = linspace(0,3);
ydata = exp(-1.3*xdata) + 0.05*randn(size(xdata));

Проблема: учитывая данные (xdata, ydata), находят экспоненциальную модель затухания y=x(1)exp(x(2)xdata) тот лучшие подгонки данные, с параметрами, ограниченными можно следующим образом:

0x(1)3/4

-2x(2)-1.

lb = [0,-2];
ub = [3/4,-1];

Создайте модель.

fun = @(x,xdata)x(1)*exp(x(2)*xdata);

Создайте исходное предположение.

x0 = [1/2,-2];

Решите ограниченную подходящую проблему.

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
Local minimum found.

Optimization completed because the size of the gradient is less than
the value of the optimality tolerance.
x = 1×2

    0.7500   -1.0000

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

plot(xdata,ydata,'ko',xdata,fun(x,xdata),'b-')
legend('Data','Fitted exponential')
title('Data and Fitted Curve')

Сравните результаты подбора кривой алгоритмом 'trust-region-reflective' по умолчанию и алгоритмом 'levenberg-marquardt'.

Предположим, что у вас есть данные времени наблюдения xdata и наблюдаемые данные об ответе ydata, и вы хотите найти параметры x(1) и x(2) подбирать модель формы

ydata=x(1)exp(x(2)xdata).

Введите времена наблюдения и ответы.

xdata = ...
 [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = ...
 [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];

Создайте простую экспоненциальную модель затухания.

fun = @(x,xdata)x(1)*exp(x(2)*xdata);

Соответствуйте модели с помощью отправной точки x0 = [100,-1].

x0 = [100,-1];
x = lsqcurvefit(fun,x0,xdata,ydata)
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.
x = 1×2

  498.8309   -0.1013

Сравните решение с той из подгонки 'levenberg-marquardt'.

options = optimoptions('lsqcurvefit','Algorithm','levenberg-marquardt');
lb = [];
ub = [];
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)
Local minimum possible.
lsqcurvefit stopped because the relative size of the current step is less than
the value of the step size tolerance.
x = 1×2

  498.8309   -0.1013

Эти два алгоритма сходились к тому же решению. Отобразите на графике данные и подходящую экспоненциальную модель.

times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun(x,times),'b-')
legend('Data','Fitted exponential')
title('Data and Fitted Curve')

Сравните результаты подбора кривой алгоритмом 'trust-region-reflective' по умолчанию и алгоритмом 'levenberg-marquardt'. Исследуйте процесс решения, чтобы видеть, который более эффективен в этом случае.

Предположим, что у вас есть данные времени наблюдения xdata и наблюдаемые данные об ответе ydata, и вы хотите найти параметры x(1) и x(2) подбирать модель формы

ydata=x(1)exp(x(2)xdata).

Введите времена наблюдения и ответы.

xdata = ...
 [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3];
ydata = ...
 [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5];

Создайте простую экспоненциальную модель затухания.

fun = @(x,xdata)x(1)*exp(x(2)*xdata);

Соответствуйте модели с помощью отправной точки x0 = [100,-1].

x0 = [100,-1];
[x,resnorm,residual,exitflag,output] = lsqcurvefit(fun,x0,xdata,ydata);
Local minimum possible.

lsqcurvefit stopped because the final change in the sum of squares relative to 
its initial value is less than the value of the function tolerance.

Сравните решение с той из подгонки 'levenberg-marquardt'.

options = optimoptions('lsqcurvefit','Algorithm','levenberg-marquardt');
lb = [];
ub = [];
[x2,resnorm2,residual2,exitflag2,output2] = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options);
Local minimum possible.
lsqcurvefit stopped because the relative size of the current step is less than
the value of the step size tolerance.

Действительно ли решения эквивалентны?

norm(x-x2)
ans = 2.0632e-06

Да, решения эквивалентны.

Какой алгоритм взял меньше функциональных оценок, чтобы найти решение?

fprintf(['The ''trust-region-reflective'' algorithm took %d function evaluations,\n',...
   'and the ''levenberg-marquardt'' algorithm took %d function evaluations.\n'],...
   output.funcCount,output2.funcCount)
The 'trust-region-reflective' algorithm took 87 function evaluations,
and the 'levenberg-marquardt' algorithm took 72 function evaluations.

Отобразите на графике данные и подходящую экспоненциальную модель.

times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun(x,times),'b-')
legend('Data','Fitted exponential')
title('Data and Fitted Curve')

Подгонка выглядит хорошей. Насколько большой невязки?

fprintf(['The ''trust-region-reflective'' algorithm has residual norm %f,\n',...
   'and the ''levenberg-marquardt'' algorithm has residual norm %f.\n'],...
   resnorm,resnorm2)
The 'trust-region-reflective' algorithm has residual norm 9.504887,
and the 'levenberg-marquardt' algorithm has residual norm 9.504887.

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

свернуть все

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

x = lsqcurvefit(@myfun,x0,xdata,ydata)

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

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

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

f = @(x,xdata)x(1)*xdata.^2+x(2)*sin(xdata);
x = lsqcurvefit(f,x0,xdata,ydata);

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

Примечание

fun должен возвратить fun(x,xdata), а не сумму квадратов sum((fun(x,xdata)-ydata).^2). lsqcurvefit неявно вычисляет сумму квадратов компонентов fun(x,xdata)-ydata. Смотрите Примеры.

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

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

затем функциональный fun должен возвратить второй выходной аргумент с якобиевским значением J (матрица) в x. Путем проверки значения nargout функция может постараться не вычислять J, когда fun вызван только одним выходным аргументом (в случае, где для алгоритма оптимизации только нужно значение F, но не J).

function [F,J] = myfun(x,xdata)
F = ...          % objective function values at x
if nargout > 1   % two output arguments
   J = ...   % Jacobian of the function evaluated at x
end

Если fun возвращает вектор (матрица) компонентов m, и x имеет элементы n, где n является числом элементов x0, якобиевским J является m-by-n матрица, где J(i,j) является частной производной F(i) относительно x(j). (Якобиевский J является транспонированием градиента F.) Для получения дополнительной информации, смотрите Вектор Записи и Матричные Целевые функции.

Пример: @(x,xdata)x(1)*exp(-x(2)*xdata)

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

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

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

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

Входные данные для модели, заданной как вектор действительных чисел или действительный массив. Модель

ydata = fun(x,xdata),

где xdata и ydata являются зафиксированными массивами, и x является массивом параметров, которые lsqcurvefit изменяет, чтобы искать минимальную сумму квадратов.

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

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

Данные об ответе для модели, заданной как вектор действительных чисел или действительный массив. Модель

ydata = fun(x,xdata),

где xdata и ydata являются зафиксированными массивами, и x является массивом параметров, которые lsqcurvefit изменяет, чтобы искать минимальную сумму квадратов.

Массив ydata должен быть одного размера и сформировать как массив fun(x0,xdata).

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

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

Нижние границы, заданные как вектор действительных чисел или действительный массив. Если число элементов в x0 равно числу элементов в lb, то lb задает это

x(i) >= lb(i) для всего i.

Если numel(lb) < numel(x0), то lb задает это

x(i) >= lb(i) для 1 <= i <= numel(lb).

Если существует меньше элементов в lb, чем в x0, решатели выдают предупреждение.

Пример: Чтобы указать, что все x компоненты положительны, используйте lb = zeros(size(x0)).

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

Верхние границы, заданные как вектор действительных чисел или действительный массив. Если число элементов в x0 равно числу элементов в ub, то ub задает это

x(i) <= ub(i) для всего i.

Если numel(ub) < numel(x0), то ub задает это

x(i) <= ub(i) для 1 <= i <= numel(ub).

Если существует меньше элементов в ub, чем в x0, решатели выдают предупреждение.

Пример: Чтобы указать, что все x компоненты - меньше чем 1, используйте ub = ones(size(x0)).

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

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

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

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

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

Algorithm

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

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

CheckGradients

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

Для optimset именем является DerivativeCheck, и значениями является 'on' или 'off'. См. Текущие и Устаревшие Таблицы Имени Опции.

Диагностика

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

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.

Для optimset именем является TolFun. См. Текущие и Устаревшие Таблицы Имени Опции.

OutputFcn

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

PlotFcn

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

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

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

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

  • 'optimplotresnorm' строит норму невязок.

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

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

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

Для optimset именем является PlotFcns. См. Текущие и Устаревшие Таблицы Имени Опции.

SpecifyObjectiveGradient

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

Для optimset именем является Jacobian, и значениями является 'on' или 'off'. См. Текущие и Устаревшие Таблицы Имени Опции.

StepTolerance

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

Для optimset именем является TolX. См. Текущие и Устаревшие Таблицы Имени Опции.

TypicalX

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

UseParallel

Когда true, решатель оценивает градиенты параллельно. Отключите путем установки на значение по умолчанию, 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 не формируется явным образом. Решатель использует Jinfo, чтобы вычислить предварительный формирователь. Смотрите Передающие Дополнительные Параметры для получения информации о том, как предоставить значения для любых дополнительных параметров потребности jmfun.

Примечание

'SpecifyObjectiveGradient' должен собираться в true для решателя передать 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). Решатель может аппроксимировать J через разреженные конечные разности, когда вы даете JacobPattern.

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

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

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

ScaleProblem

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

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

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

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

objective

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

x0

Начальная точка для x, активный алгоритм набора только

xdata

Входные данные для целевой функции

ydata

Выходные данные, которые будут соответствующими целевой функцией
lbВектор нижних границ
ubВектор верхних границ

solver

'lsqcurvefit'

options

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

Необходимо предоставить, по крайней мере, objective, x0, solver, xdata, ydata и поля options в структуре problem.

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

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

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

свернуть все

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

Норма в квадрате невязки, возвращенной как неотрицательное действительное. resnorm является квадратичной нормой невязки в x: sum((fun(x,xdata)-ydata).^2).

Значение целевой функции при решении, возвращенном как массив. В целом, residual = fun(x,xdata)-ydata.

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

1

Функция сходилась к решению x.

2

Изменение в x было меньше, чем заданный допуск.

3

Изменение в невязке было меньше, чем заданный допуск.

4

Значение поискового направления было меньшим, чем заданный допуск.

0

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

-1

Выходная функция отключила алгоритм.

-2

Проблема неосуществима: границы lb и ub противоречивы.

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

firstorderopt

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

iterations

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

funcCount

Количество функциональных оценок

cgiterations

Общее количество итераций PCG (доверяют области только отражающий алгоритм),

stepsize

Итоговое смещение в x

algorithm

Алгоритм оптимизации используется

message

Выходное сообщение

Множители Лагранжа в решении, возвращенном как структура с полями:

lower

Нижние границы lb

upper

Верхние границы ub

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

Ограничения

  • Алгоритм Levenberg-Marquardt не обрабатывает связанные ограничения.

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

    Поскольку доверительная область, отражающий алгоритм не обрабатывает недоопределенные системы и Levenberg-Marquardt, не обрабатывает связанные ограничения, проблемы, которые имеют обе из этих характеристик, не могут быть решены lsqcurvefit.

  • lsqcurvefit может решить проблемы с комплексным знаком непосредственно с алгоритмом levenberg-marquardt. Однако этот алгоритм не принимает связанные ограничения. Для комплексной проблемы со связанными ограничениями, разделение переменные в действительные и мнимые части и использование алгоритм trust-region-reflective. Сочтите целесообразным Модель к Данным с комплексным знаком.

  • Вычисление перед формирователем использовало в предобусловленной части метода сопряженных градиентов доверительной области, отражающий метод формирует JTJ (где J является якобиевской матрицей) прежде, чем вычислить предварительный формирователь. Поэтому строка J со многими ненулями, который приводит к почти плотному продукту JTJ, может привести к процессу дорогостоящего решения для больших проблем.

  • Если компоненты x имеют не верхний (или ниже) границы, lsqcurvefit предпочитает, чтобы соответствующие компоненты ub (или lb) были установлены в inf (или -inf для нижних границ) в противоположность произвольному, но положительному очень большому (или отрицательные для нижних границ) номер.

Можно использовать доверительную область отражающий алгоритм в lsqnonlin, lsqcurvefit и fsolve с маленьким - к проблемам средней шкалы, не вычисляя якобиан в fun или обеспечивая якобиевский шаблон разреженности. (Это также применяется к использованию fmincon или fminunc, не вычисляя Гессиан или предоставляя шаблон разреженности Гессиана.), Как маленький является маленьким - к средней шкале? Никакой абсолютный ответ не доступен, когда это зависит от суммы виртуальной памяти в вашей настройке компьютерной системы.

Предположим, что ваша проблема имеет уравнения m и неизвестные n. Если команда  , J = sparse(ones(m,n)) вызывает ошибку Out of memory на вашей машине, то это - конечно, слишком большая проблема. Если это не приводит к ошибке, проблема может все еще быть слишком большой. Можно узнать только путем выполнения его и наблюдения, запускается ли MATLAB в сумме виртуальной памяти, доступной в системе.

Алгоритмы

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

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

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

Ссылки

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

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

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

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

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

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

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

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

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

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