exponenta event banner

lsqcurvefit

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

Описание

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

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

minx‖F (x, xdata) −ydata‖22=minx∑i (F (x, xdatai) ydatai) 2,

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

Необязательно, компоненты x могут иметь нижнюю и верхнюю границы 1b и 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) начинается в 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.

[x,resnorm] = lsqcurvefit(___), для любых входных аргументов возвращает значение возведенной в квадрат 2-нормы остатка при 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')

Figure contains an axes. The axes with title Data and Fitted Curve contains 2 objects of type line. These objects represent Data, Fitted exponential.

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

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

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), которая наилучшим образом соответствует данным, с параметрами, ограниченными следующим образом:

0≤x (1) ≤3/4

- 2≤x (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')

Figure contains an axes. The axes with title Data and Fitted Curve contains 2 objects of type line. These objects represent Data, Fitted exponential.

Сравнение результатов фитинга со значением по умолчанию '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')

Figure contains an axes. The axes with title Data and Fitted Curve contains 2 objects of type line. These objects represent Data, Fitted exponential.

Сравнение результатов фитинга со значением по умолчанию '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.0626e-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')

Figure contains an axes. The axes with title Data and Fitted Curve contains 2 objects of type line. These objects represent Data, Fitted exponential.

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

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. Забава функции может быть указана как дескриптор функции для файла функции:

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

Примечание

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

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

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около-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. Дополнительные сведения о выборе алгоритма см. в разделе Выбор алгоритма.

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

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

PlotFcn

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

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

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

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

  • 'optimplotresnorm' строит график нормы остатков.

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

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

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

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

SpecifyObjectiveGradient

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

SubproblemAlgorithm

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

TolPCG

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

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

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

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 структура.

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

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

свернуть все

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

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

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

Причина остановки решателя, возвращаемого в виде целого числа.

1

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

2

Изменение в x меньше указанного допуска или Jacobian при 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.

Ограничения

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

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

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

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

Алгоритм отражения области доверия можно использовать в lsqnonlin, lsqcurvefit, и fsolve с малыми и средними проблемами без вычисления Jacobian в fun или предоставление якобианской модели разреженности. (Это также относится к использованию fmincon или fminunc без вычисления гессенского или предоставления гессенского шаблона разреженности.) Насколько малыми являются малые и средние размеры? Абсолютный ответ недоступен, так как зависит от объема виртуальной памяти в конфигурации компьютера.

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

Алгоритмы

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

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

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

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

Приложение

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

Ссылки

[1] Коулман, Т. Ф. и Я. Ли. «Подход» Внутренняя область, область доверия «для нелинейной минимизации с учетом ограничений». Журнал СИАМ по оптимизации, том 6, 1996, стр. 418-445.

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

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

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

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

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

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

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

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

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