При большом количестве точек выборки невозможно применять полиномиальную интерполяцию а для МНК подходят не все функции. Поэтому имеет смысл применить аппроксимацию выборки нелинейной функцией. Аргументом функции может быть как один так и множество.
Далее рассмотрю функции MATLAB которые позволяют подобрать коэффициенты нелинейной аппроксимирующей функции.
- 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(‘иссходные точки’,’аппроксимация’)
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