Нелинейная регрессия в MATLAB

При большом количестве точек выборки невозможно применять полиномиальную интерполяцию а для МНК подходят не все функции. Поэтому имеет смысл применить аппроксимацию выборки нелинейной функцией. Аргументом функции может быть как один так и множество.

Далее рассмотрю функции MATLAB которые позволяют подобрать коэффициенты нелинейной аппроксимирующей функции.

  1. nlinfit

beta = nlinfit(X,Y,modelfun,beta0)

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

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));

Тоесть функция должна быть анонимной и зависимой от двух параметров (переменная и коэффициенты)

Листинг 1 – Пример реализации функции nlinfit

%%

clear

clc

%% функция в которой подбираются коэффициенты

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));

%% коэффициенты для генерации выборки

b = [1;3;2];

%% генерация выборки

x = exprnd(2,100,1);

y = modelfun(b,x) + normrnd(0,0.1,100,1);

%% начальные коэффициенты для подбора

beta0 = [2;2;2];

%% функция подбора коэффициентов

beta = nlinfit(x,y,modelfun,beta0)

%% расчет точек по новым коэффициентам

x2 = sort(x)

y2 = modelfun(beta,x2)

%% построение графика

figure

plot(x,y,’*’)

hold on

grid on

plot(x2,y2) legend(‘иссходные точки’,’аппроксимация’)

Рисунок 1 – расчет кривой с помощью функции nlinfit

2. fitnlm

mdl = fitnlm(X,y,modelfun,beta0)

Листинг 2 – Пример реализации функции fitnlm

%%

clear

clc

%% функция в которой подбираются коэффициенты

modelfun = @(b,x)(b(1)+b(2)*exp(-b(3)*x));

%% коэффициенты для генерации выборки

b = [1;3;2];

%% генерация выборки

x = exprnd(2,100,1);

y = modelfun(b,x) + normrnd(0,0.1,100,1);

%% начальные коэффициенты для подбора

beta0 = [2;2;2];

%% функция подбора коэффициентов

mdl = fitnlm(x,y,modelfun,beta0)

beta = mdl.Coefficients.Estimate

%% расчет точек по новым коэффициентам

x2 = sort(x)

y2 = modelfun(beta,x2)

%% построение графика

figure

plot(x,y,’*’)

hold on

grid on

plot(x2,y2)

legend(‘иссходные точки’,’аппроксимация’)

Скачать скрипты MATLAB для которых написана статья вы можете по ссылке: https://yadi.sk/d/af4DvYR-Zw-26Q