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 структура, описанная во Входных параметрах. Создайте 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')

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

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

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.0630e-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. Смотрите примеры.

Если якобиан может также быть вычислен и '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. Алгоритм Levenberg-Marquardt не обрабатывает связанные ограничения. Для получения дополнительной информации о выборе алгоритма смотрите Выбор Algorithm.

CheckGradients

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

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

Диагностика

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

DiffMaxChange

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

DiffMinChange

Минимальное изменение в переменных для градиентов конечной разности (положительная скалярная величина). Значением по умолчанию является 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

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

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

FunValCheck

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

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

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

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

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

свернуть все

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

Норма в квадрате невязки, возвращенной как неотрицательное действительное. resnorm квадратичная 2-норма невязки в 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