You are on page 1of 6

Міністерство освіти та науки України

Дніпровський національний університет ім. Олеся Гончара


Факультет фізики, електроніки та комп’ютерних систем

Кафедра КНІТ

Лабораторна робота № 2
з дисципліни «Інтелектуальний аналіз даних»

на тему «Нелінійний метод найменших квадратів»

Виконала:
студентка 3 курсу
групи КС-17-1
Бабанська Яна

Перевірив:
доц. Прокоф’єв Т. А.

Дніпро
2020
Мета роботи: практичне освоєння аналізу експериментальних даних за
допомогою нелінійного методу найменших квадратів.

Хід роботи:

1. Ознайомилась з функціями MATLAB, необхідними для виконання


лабораторної роботи:

- fopen- отримання інформації про відкриті файли;


- load- завантаження даних з файлу;
- path- повний шлях до файлу;
- fscanf- зчитування інформації по байтах;
- nlinfit- визначає невідомі коефіцієнти, оптимізує рішення;
- nlparci- оцінка заданих інтервалів;
- chi2inv- обчислення інверсії хі- квадрата з заданими степенями
свободи;
- tinv- дистрибутив;
- diag- формування квадратної матриці, визначення її діагоналей.

2. Завантаження даних з файлу за допомогою функції load і запис даних


в x, y, sigma:

>> mas = load('Y:\\data.txt');


>> x = mas(:,1);
y = mas(:,2);
sigma = mas(:,3);

3. Запрограмуємо задані функції f (x, θ) (Максвелла, Показова,


Вейбулла) в окремих m- файлах:

maxwell.m
function [res] = maxwell(beta, x)
a=beta;
res = sqrt(2./pi) .* a.^3 .* x.^2 .* exp(-((a.^2 .* x.^2) ./ 2));
return;
end

exponential.m
function [res] = exponential(beta, x)
lambda=beta;
res = lambda.*exp(-lambda.*x);
2
return;
end

weibull.m
function [res] = weibull(beta, x)
a=beta(1);
b=beta(2);
res = a.*b.*x.^(b-1).*exp(-a.*x.^b);
return;
end

4. Реалізація процедури НМНК аналізу даних за допомогою трьох за-


даних функцій. Початкові наближення для параметрів функцій
обираються довільно. Для процедури оптимізації використовується
функція nlinfit. В результаті виконання функції отримуємо точкові
оцінки коефіцієнтів регресійної моделі – beta, вектор залишків – r та
матрицю Якобі – j:

[beta_weib, r_weib, j_weib] = nlinfit(x, y, @weibull, [0.1 0.1]);


[beta_exp, r_exp, j_exp] = nlinfit(x, y, @exponential, 0.1);
[beta_maxw, r_maxw, j_maxw] = nlinfit(x, y, @maxwell, 0.1);

5. Оцінка якості аналізу даних за допомогою нормованого критерію .


Якщо параметр наближається до 1, то така функція
апроксимує дані краще(далі саме завдяки цій властивості у цьому
випадку функція Вейбулла буде апроксимувати дані найкраще):

3
function [ res ] = chi_2(distrib, x, y, beta, sigma)
N = length(x);
beta_length = length(beta);
chi_2 = 0;
for i=1:N
num = distrib(beta, x(i)) - y(i);
chi_2 = chi_2 + (num./sigma(i)).^2;
end
res = chi_2/(N - beta_length - 1);
return
end

Застосовуємо до наших даних:

chi_2_weib = chi_2(@weibull, x, y, beta_weib, sigma)


chi_2_weib = 1.0654
chi_2_exp = chi_2(@exponential, x, y, beta_exp, sigma)
chi_2_exp = 493.1124
chi_2_maxw = chi_2(@maxwell, x, y, beta_maxw, sigma)
chi_2_maxw = 9.6869

Як бачимо, найкраще апроксимує дані функція Вейбулла.

6. Оцінка якості аналізу даних за допомогою графіка зважених


залишків:

function [res] = weighted_residues(distrib, x, y, beta, sigma)


N = length(x);
res = zeros(N, 1);
for i=1:N
num = y(i) - distrib(beta, x(i));
res(i) = num./sigma(i);
end
return end

Застосовуємо до наших даних:

wei_res_weib = weighted_residues(@weibull, x, y, beta_weib, sigma);


wei_res_exp = weighted_residues(@exponential, x, y, beta_exp, sigma);
wei_res_maxw = weighted_residues(@maxwell, x, y, beta_maxw, sigma);

4
Згідно з графіком, знову найкраще апроксимує дані функція Вейбулла.

7. Оцінка якості аналізу даних за допомогою автокореляційної функції:

function [res] = autocorrelation(wei_res)


N = length(wei_res);
res = zeros(N, 1);
denum = 0;
for i = 1:N
denum = denum + wei_res(i) * wei_res(i);
end
denum = denum / N;
for k = 1:N
num = 0;
for i = 1:(N - k + 1)
num = nume + (wei_res(i) * wei_res(i+k-1));
end
res(k) = ((1 / (N-k+1)) * num) / denum;
end
return
end

Застосовуємо:

autocorr_weib = autocorrelation(wei_res_weib);

5
autocorr_exp = autocorrelation(wei_res_exp);
autocorr_maxw = autocorrelation(wei_res_maxw);

Згідно з графіком, цього разу також найкраще апроксимує дані функція


Вейбулла.

8. Побудова 68% довірчих інтервалів для оцінок параметрів за


допомогою функції nlparci:

alpha = 0.32;
conf_interval_veib = nlparci(beta_weib, r_weib, j_weib, alpha)
conf_interval_weib =
0.9938 1.0052
2.2077 2.2269
conf_interval_exp = nlparci(beta_exp, r_exp, j_exp, alpha)
conf_interval_exp = 0.6270 0.7460
conf_interval_maxw = nlparci(beta_maxw, r_maxw, j_maxw, alpha)
conf_interval_maxw = 1.7578 1.7782

Висновки:

За результатами реалізації різних оцінок найкраще апроксимує


експериментальні дані функція Вейбулла (серед трьох
розглянутих функцій).

You might also like