Если библиотека тулбокса не содержит желаемого параметрического уравнения, можно создать собственное пользовательское уравнение. Однако модели Library предлагают лучший шанс для быстрого сходимости. Это потому, что:
Для большинства библиотечных моделей тулбокс вычисляет оптимальные начальные точки коэффициента по умолчанию. Для пользовательских моделей тулбокс выбирает случайные начальные точки по умолчанию на интервале [0,1]. Вам нужно найти подходящие стартовые точки для пользовательских моделей.
Модели библиотеки используют аналитический якобиан. Пользовательские модели используют конечное дифференцирование.
Вы можете создать пользовательские общие уравнения с типом подгонки Custom Equation. Общие модели являются нелинейными комбинациями (возможно, нелинейных) членов. Они заданы уравнениями, которые могут быть нелинейными в параметрах. Пользовательская подгонка уравнения использует процедуру нелинейного метода наименьших квадратов аппроксимации.
Вы можете задать пользовательское линейное уравнение с помощью типа Custom Equation, хотя нелинейный подбор кривой менее эффективна и обычно медленнее, чем линейный метод наименьших квадратов подбора кривой.
Если вы не знаете, может ли ваше уравнение быть выражено как набор линейных функций, выберите Custom Equation
. Может потребоваться поиск подходящих начальных точек.
Если вам нужна линейный метод наименьших квадратов подгонка для пользовательских уравнений, выберите Linear Fitting
вместо этого тип модели. См. Раздел «Настраиваемый линейный подбор кривой»
В приложении Аппроксимирование Кривыми выберите Custom Equation
из списка типов модели.
Используйте пользовательскую подгонку уравнения, чтобы задать свои собственные уравнения. Пример пользовательского уравнения появляется, когда вы выбираете Custom Equation из списка, как показано здесь для данных кривой.
Если у вас есть данные о поверхности, в примере пользовательского уравнения используются как x, так и y.
Можно редактировать x
, y
, и z
ко всем допустимым именам переменной.
В нижнем поле отредактируйте пример, чтобы задать собственное пользовательское уравнение. Вы можете ввести любой действительный MATLAB® выражение в терминах имен переменных. Можно задать имя функции или скрипта (см. «Подбор кривой, заданной файлом» в приложении Аппроксимирование Кривыми).
Нажмите кнопку Fit Options, если необходимо задать начальные точки или границы. По умолчанию начальные значения выбираются случайным образом на интервале [0,1] и не имеют ограничений. Может потребоваться поиск подходящих начальных точек и границ. Для получения примера смотрите Пользовательский нелинейный анализ данных ENSO.
Если вы задаете опции подгонки, а затем изменяете другие настройки подгонки, приложение запоминает ваш выбор для нижних и верхних границ и начальных точек, если это возможно. Для пользовательских уравнений приложение Аппроксимирование Кривыми всегда запоминает пользовательские значения, но для многих библиотечных моделей, если вы изменяете настройки подгонки, приложение автоматически вычисляет новые лучшие значения для начальных точек или нижних границ.
Можно сохранить пользовательские уравнения как часть сохраненных сеансов приложения Аппроксимирование Кривыми.
Ваша функция может выполнять несколько раз, как во время подбора кривой, так и во время предварительной обработки перед подбором кривой. Имейте в виду, что это может занять много времени, если вы используете функции с побочными эффектами, такими как запись данных в файл или отображение диагностической информации в Командном окне.
Для примеров смотрите:
В этом примере показано, как предоставить имя функции или скрипта в качестве модели аппроксимации в приложении Аппроксимирование Кривыми. Задайте функцию в файле и используйте ее, чтобы соответствовать кривой.
Задайте функцию в файле MATLAB.
function y = piecewiseLine(x,a,b,c,d,k) % PIECEWISELINE A line made of two pieces % that is not continuous. y = zeros(size(x)); % This example includes a for-loop and if statement % purely for example purposes. for i = 1:length(x) if x(i) < k, y(i) = a + b.* x(i); else y(i) = c + d.* x(i); end end end
Сохраните файл в пути MATLAB.
Определите некоторые данные и откройте приложение Аппроксимирование Кривыми.
x = [0.81;0.91;0.13;0.91;0.63;0.098;0.28;0.55;... 0.96;0.96;0.16;0.97;0.96]; y = [0.17;0.12;0.16;0.0035;0.37;0.082;0.34;0.56;... 0.15;-0.046;0.17;-0.091;-0.071]; cftool
В приложении Аппроксимирование Кривыми выберите x
и y
в X data и Y data списках.
Используйте свои piecewiseLine
функция в приложении Аппроксимирование Кривыми путем выбора типа Custom Equation fit, а затем ввода выражения функции в текстовое поле пользовательского уравнения. Функция принимает данные x и некоторые параметры для подбора кривой.
piecewiseLine( x, a, b, c, d, k )
Приложение Аппроксимирование Кривыми создает подгонку с помощью вашей функции.
Совет
Если вы хотите использовать ту же функцию для подбора кривой в командной строке, используйте то же выражение как вход в fittype
, а затем используйте fittype
как вход в fit
:
ft = fittype('piecewiseLine( x, a, b, c, d, k )'); f = fit( x, y, ft)
fit
функция.Чтобы соответствовать пользовательским моделям, либо:
Поставьте пользовательскую модель в fit
функция в fitType
входной параметр. Можно использовать выражение MATLAB (включая любое .m
файл), массив ячеек из линейных модельных членов или анонимная функция.
Создайте fittype
объект с fittype
функцию, которая используется в качестве входного параметра для fit
функция.
Этот пример загружает некоторые данные и использует пользовательское уравнение, определяющее модель Вейбула в качестве входов fit
функция:
time = [ 0.1; 0.1; 0.3; 0.3; 1.3; 1.7; 2.1; 2.6; 3.9; 3.9; ... 5.1; 5.6; 6.2; 6.4; 7.7; 8.1; 8.2; 8.9; 9.0; 9.5; ... 9.6; 10.2; 10.3; 10.8; 11.2; 11.2; 11.2; 11.7; 12.1; 12.3; ... 12.3; 13.1; 13.2; 13.4; 13.7; 14.0; 14.3; 15.4; 16.1; 16.1; ... 16.4; 16.4; 16.7; 16.7; 17.5; 17.6; 18.1; 18.5; 19.3; 19.7;]; conc = [0.01; 0.08; 0.13; 0.16; 0.55; 0.90; 1.11; 1.62; 1.79; 1.59; ... 1.83; 1.68; 2.09; 2.17; 2.66; 2.08; 2.26; 1.65; 1.70; 2.39; ... 2.08; 2.02; 1.65; 1.96; 1.91; 1.30; 1.62; 1.57; 1.32; 1.56; ... 1.36; 1.05; 1.29; 1.32; 1.20; 1.10; 0.88; 0.63; 0.69; 0.69; ... 0.49; 0.53; 0.42; 0.48; 0.41; 0.27; 0.36; 0.33; 0.17; 0.20;]; f = fit( time, conc, 'c*a*b*x^(b-1)*exp(-a*x^b)', 'StartPoint', [0.01, 2, 5] ) plot( f, time, conc )
Чтобы задать пользовательскую модель, используя fittype
, используйте форму:
f = fittype(expr)
fittype
объект для выражения MATLAB, содержащегося в строке, массиве ячеек или анонимной функции expr
.См. fittype
страница с описанием для получения дополнительной информации о:
Определение зависимых и независимых переменных, параметров задачи и коэффициентов с помощью fittype
.
Указание массива ячеек членов для использования линейного алгоритма аппроксимации для пользовательского уравнения. Если
является строковой или анонимной функцией, тогда тулбокс использует нелинейный алгоритм аппроксимации.expr
Для получения дополнительной информации о линейном подборе кривой см. Раздел «Выбор линейного подбора кривой в командной строке».
Примеры линейных и нелинейных пользовательских моделей.
Для пошагового примера смотрите Пользовательский нелинейный подбор переписи.