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

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

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

Примечание

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

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

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

CheckGradients

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

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

Диагностика

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

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.

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

OutputFcn

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

PlotFcn

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

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

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

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

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

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

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

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

Для 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)/  <reservedrangesplaceholder0>  ≠ 0.

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

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

MaxPCGIter

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

PrecondBandWidth

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

SubproblemAlgorithm

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

TolPCG

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

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

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

  • Расчет предкондиционера, используемое в предварительно обусловленной сопряженной градиентной части метода отражения доверительной области, формирует 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 в пределах объема виртуальной памяти, доступной в вашей системе.

Алгоритмы

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

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

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

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

Приложение

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

Ссылки

[1] Коулман, Т. Ф. и Я. Ли. Подход внутренней доверительной области для нелинейной минимизации с учетом границ. SIAM Journal on Optimization, Vol. 6, 1996, pp. 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] Moré, J. J. «The Levenberg-Marquardt Algorithm: Implementation and Theory». Численный анализ, ред. Г. А. Ватсон, Лекции по математике 630, Springer Verlag, 1977, с. 105-116.

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

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

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

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