курсовая_Петров_вариант8
.doc
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ЭУТ
Курсовая РАБОТА
по дисциплине «Методы обработки измерительной информации»
Тема: Полная обработка результатов измерений физического процесса
Вариант 8
Студент гр. |
|
|
Преподаватель |
|
Петров Г.А. |
Санкт-Петербург
2025
1. Листинг исходного кода программы
clear; clc; close all;
% исходные данные, разделённые на 5 выборок по 200 значений
nabludeniya = load('kyrs1_8.txt');
viborki = mat2cell(nabludeniya, size(nabludeniya,1), ones(1,5));
%% 1. Определение промахов в результатах неблюдений
clean_viborki = cell(5,1);
ubit_promakhi = zeros(5,1);
F0 = @(x) normcdf(x) - 0.5;
q = 0.05; % уровень значимости
for j = 1:5
X = viborki{j};
n_izn = length(X);
promakhi = 0;
while true
m = mean(X);
s = std(X, 1); % СКО с нормировкой на n-1
[x_min, idx_min] = min(X);
[x_max, idx_max] = max(X);
P_min = 0.5 - F0((m - x_min)/s);
P_max = 0.5 - F0((x_max - m)/s);
if P_min < q/2 && P_max < q/2
if P_min < P_max
X(idx_min) = [];
promakhi = promakhi + 1;
else
X(idx_max) = [];
promakhi = promakhi + 1;
end
elseif P_min < q/2
X(idx_min) = [];
promakhi = promakhi + 1;
elseif P_max < q/2
X(idx_max) = [];
promakhi = promakhi + 1;
else
% промахи отсутствуют
break;
end
end
clean_viborki{j} = X;
ubit_promakhi(j) = promakhi;
end
%% 2. Определение выборочных характеристик случайного процесса
stats = zeros(5,4); % [n, mean, var, std]
for j = 1:5
X = clean_viborki{j};
n = length(X);
m = mean(X);
v = var(X, 1); % несмещенная оценка дисперсии (делитель n-1)
s = std(X, 1);
stats(j,:) = [n, m, v, s];
end
% Графики характеристик
figure('Position',[100,100,900,300], 'Name', 'Выборочные характеристики');
subplot(1,3,1);
plot(1:5, stats(:,2), 'bo-', 'LineWidth',2, 'MarkerSize',8);
xlabel('Выборка'); ylabel('x̄'); title('Средние значения'); grid;
xlim([0.5,5.5]);
subplot(1,3,2);
plot(1:5, stats(:,3), 'ro-', 'LineWidth',2, 'MarkerSize',8);
xlabel('Выборка'); ylabel('D'); title('Дисперсии'); grid;
xlim([0.5,5.5]);
subplot(1,3,3);
plot(1:5, stats(:,4), 'go-', 'LineWidth',2, 'MarkerSize',8);
xlabel('Выборка'); ylabel('s'); title('СКО'); grid;
xlim([0.5,5.5]);
%% 3. Проверка гипотезы об одномерной нормальном распределении случайного процесса
% 3.1. По критерию ассиметричночти и эксцесса (метод моментов)-------------
norm_assym = false(5,1);
for j = 1:5
X = clean_viborki{j};
n = stats(j,1);
m = stats(j,2);
s = stats(j,4);
m3 = moment(X, 3); % Третий центральный момент
m4 = moment(X, 4); % Четвертый центральный момент
% Асимметрия и эксцесс
A = m3 / (s^3);
E = m4 / (s^4) - 3; % Эксцесс для нормального распределения = 0
% Дисперсии асимметрии и эксцесса
DA = 6*(n-1) / ((n+1)*(n+3));
DE = 24*n*(n-2)*(n-3) / ((n+1)^2 * (n+3) * (n+5));
% Проверка условий
cond_A = abs(A) <= 3*sqrt(DA);
cond_E = abs(E) <= 5*sqrt(DE);
is_normal = cond_A && cond_E;
norm_assym(j) = is_normal;
end
% 3.2. Проверка по критерию Пирсона----------------------------------------
X_all = vertcat(clean_viborki{:});
n_all = length(X_all);
m_all = mean(X_all);
s_all = std(X_all, 1);
% Определение числа интервалов по Старджессу
k = round(1 + 3.322 * log10(n_all));
% Границы интервалов
x_min = min(X_all);
x_max = max(X_all);
delta = (x_max - x_min) / k;
edges = linspace(x_min, x_max, k+1);
% Частоты попадания в интервалы
[counts, ~] = histcounts(X_all, edges);
% Теоретические вероятности и χ²
p_theor = zeros(1,k);
chi2_components = zeros(1,k);
for i = 1:k
if i == 1
% Первый интервал: (-∞, edges(2)]
z_upper = (edges(2) - m_all) / s_all;
p_theor(i) = 0.5 + F0(z_upper); % Используем F0
elseif i == k
% Последний интервал: [edges(k), +∞)
z_lower = (edges(k) - m_all) / s_all;
p_theor(i) = 0.5 - F0(z_lower);
else
% Внутренние интервалы
z_lower = (edges(i) - m_all) / s_all;
z_upper = (edges(i+1) - m_all) / s_all;
p_theor(i) = F0(z_upper) - F0(z_lower);
end
% Компонент χ²
chi2_components(i) = (counts(i) - n_all * p_theor(i))^2 / (n_all * p_theor(i));
end
chi2 = sum(chi2_components);
df = k - 3; % степени свободы
chi2_crit = chi2inv(0.95, df); % квантиль распределения χ²
normal_chi2 = chi2 <= chi2_crit;
% Гистограмма с теоретической плотностью
figure('Position',[100,100,800,400], 'Name', 'Критерий χ²');
subplot(1,2,1);
histogram(X_all, edges, 'Normalization','pdf', 'FaceColor',[0.7 0.7 0.9], 'EdgeColor','k');
hold on;
x_fit = linspace(x_min, x_max, 1000);
pdf_fit = normpdf(x_fit, m_all, s_all);
plot(x_fit, pdf_fit, 'r-', 'LineWidth',2);
xlabel('Значение'); ylabel('Плотность вероятности');
title(sprintf('Гистограмма и N(%.4f, %.4f²)', m_all, s_all));
legend('Эксперимент','Теория','Location','best'); grid;
subplot(1,2,2);
bar(1:k, chi2_components, 'FaceColor',[0.3 0.6 0.9]);
hold on;
plot([0, k+1], [chi2_crit, chi2_crit], 'r--', 'LineWidth',2);
xlabel('Интервал'); ylabel('χ²_m');
title(sprintf('Компоненты χ² (сумма = %.2f)', chi2));
legend('χ²_m', sprintf('χ²_крит = %.2f', chi2_crit)); grid;
xlim([0, k+1]);
% 3.3. Проверка по критерию Колмогорова------------------------------------
X1 = sort(clean_viborki{1});
n1 = length(X1);
m1 = mean(X1);
s1 = std(X1, 1);
% Эмпирическая функция распределения
F_emp = (1:n1)' / n1;
% Теоретическая функция распределения (используем normcdf напрямую)
F_theor = normcdf(X1, m1, s1);
% Статистика Колмогорова
D = max(abs(F_emp - F_theor));
lambda = D * sqrt(n1);
lambda_crit = 1.22; % для q=0.1
normal_kolm = lambda <= lambda_crit;
% График функций распределения
figure('Position',[100,100,800,400], 'Name', 'Критерий Колмогорова');
subplot(1,2,1);
stairs([X1(1)-0.1; X1; X1(end)+0.1], [0; F_emp; 1], 'b-', 'LineWidth',1.5);
hold on;
plot(X1, F_theor, 'r-', 'LineWidth',2);
[D_max, idx] = max(abs(F_emp - F_theor));
plot([X1(idx), X1(idx)], [F_emp(idx), F_theor(idx)], 'g--', 'LineWidth',2);
xlabel('x'); ylabel('F(x)');
title(sprintf('Функции распределения: D_{max} = %.4f', D_max));
legend('F_n(x)', 'F(x)', 'D_{max}', 'Location','best'); grid;
subplot(1,2,2);
plot(X1, F_emp - F_theor, 'k-', 'LineWidth',1.5);
hold on;
plot([X1(1), X1(end)], [0, 0], 'r--');
plot([X1(idx), X1(idx)], [0, D_max], 'g--', 'LineWidth',2);
xlabel('x'); ylabel('F_n(x) - F(x)');
title('Разность функций распределения'); grid;
%% 4. Расчёт значений корреляционной функции случайного процесса
X_full = X_all;
n_full = length(X_full);
m_full = mean(X_full);
tau_max = floor(n_full / 2);
tau = 0:tau_max;
R = zeros(size(tau));
for k_idx = 1:length(tau)
if tau(k_idx) == 0
R(k_idx) = var(X_full, 1);
else
sum_val = 0;
for i = 1:n_full - tau(k_idx)
sum_val = sum_val + (X_full(i+tau(k_idx)) - m_full) * (X_full(i) - m_full);
end
R(k_idx) = sum_val / (n_full - tau(k_idx) - 1);
end
end
% Нормированная корреляционная функция
r_norm = R / R(1);
% Графики корреляционной функции
figure('Position',[100,100,900,300], 'Name', 'Корреляционная функция');
subplot(1,2,1);
plot(tau, R, 'b-', 'LineWidth',2);
xlabel('τ'); ylabel('R(τ)');
title('Корреляционная функция'); grid;
subplot(1,2,2);
plot(tau, r_norm, 'r-', 'LineWidth',2);
xlabel('τ'); ylabel('r(τ)');
title('Нормированная корреляционная функция'); grid;
%% 5. Проверка гипотезы о стационарности случайного процесса от отношению к дисперсии
% Выравнивание выборок по минимальному размеру
n_min = min(stats(:,1));
D_vals = zeros(5,1);
for j = 1:5
X_short = clean_viborki{j}(1:n_min);
D_vals(j) = var(X_short, 1);
end
% Статистика Кохрана
G = max(D_vals) / sum(D_vals);
G_crit = 0.2; % для k=5, f=n_min-1, q=0.05 (из таблицы)
stat_var = G <= G_crit;
%% 6. Проверка гипотезы об эргодичности стационарного процесса
% Критическое значение нормированной корреляционной функции
r_crit = 0.1; % для уровня значимости q=0.05
% Поиск τ1
tau1_idx = find(abs(r_norm(2:end)) <= r_crit, 1);
if isempty(tau1_idx)
ergodic = false;
tau1 = Inf;
else
ergodic = true;
tau1 = tau(tau1_idx + 1);
end
% График для проверки эргодичности
figure('Position',[100,100,800,400], 'Name', 'Проверка эргодичности');
subplot(1,2,1);
plot(tau, abs(r_norm), 'b-', 'LineWidth',1.5);
hold on;
yline(r_crit, 'r--', 'LineWidth',2, 'DisplayName', sprintf('r_кр=%.2f', r_crit));
if ergodic
xline(tau1, 'g--', 'LineWidth',2, 'DisplayName', sprintf('τ₁=%d', tau1));
end
xlabel('τ'); ylabel('|r(τ)|');
title('Затухание корреляционной функции');
legend('Location','best'); grid;
ylim([0, max(1.1*r_crit, max(abs(r_norm)))]);
subplot(1,2,2);
semilogy(tau, abs(r_norm), 'b-', 'LineWidth',1.5);
hold on;
yline(r_crit, 'r--', 'LineWidth',2);
if ergodic
xline(tau1, 'g--', 'LineWidth',2);
end
xlabel('τ'); ylabel('|r(τ)| (лог. шкала)');
title('Затухание'); grid;
%% Результаты обработки полученных данных
fprintf('Итого:\n\n');
for j = 1:5
fprintf(' Из выборки %d удалено %d промахов.\n', j, ubit_promakhi(j));
end
fprintf('\n Согласно критерию асимметрии и эксцесса, ');
if all(norm_assym)
fprintf('все выборки имеют нормальное распределение.\n');
else
fprintf('не все выборки имеют нормальное распределение.\n');
end
fprintf('\n Согласно критерию Пирсона: %s (χ²=%.2f, крит=%.2f)\n', string(normal_chi2), chi2, chi2_crit);
fprintf(' Согласно критерию Колмогорова: %s (λ=%.3f, крит=%.2f)\n', string(normal_kolm), lambda, lambda_crit);
fprintf('\n Стационарность случайного процесса по дисперсии составляет: %s (G=%.4f, крит=%.3f)\n', string(stat_var), G, G_crit);
fprintf('\n Эргодичность случайного процесса составляет %s', string(ergodic));
if ergodic
fprintf(' (τ₁=%d)', tau1);
end
fprintf('\n r_кр=%.3f\n', r_crit);
fprintf('\n Корреляционная функция случайного процесса принимает значение\n');
fprintf(' R(0)=%.4f, R(%d)=%.4f\n', R(1), tau(end), R(end));
2. Результаты работы программы
Итоги работы программы:
Итого:
Из выборки 1 удалено 3 промахов.
Из выборки 2 удалено 5 промахов.
Из выборки 3 удалено 6 промахов.
Из выборки 4 удалено 4 промахов.
Из выборки 5 удалено 4 промахов.
Согласно критерию асимметрии и эксцесса, все выборки имеют нормальное распределение.
Согласно критерию Пирсона: false (χ²=82.43, крит=15.51)
Согласно критерию Колмогорова: true (λ=0.929, крит=1.22)
Стационарность случайного процесса по дисперсии составляет: false (G=0.2217, крит=0.200)
Эргодичность случайного процесса составляет true (τ₁=1)
r_кр=0.100
Корреляционная функция случайного процесса принимает значение
R(0)=0.0821, R(489)=-0.0002
Рисунок 1 - Проверка по критерию Пирсона
Рисунок 2 - Проверка по критерию Колмогорова
Рисунок 3 - Корреляционная функция случайного процесса
Рисунок 4 - Эргодичность стационарного процесса
вывод
Согласно результатам работы разработанного программного кода, в исходных выборках очень мало промахов, до 6 промахов из общего числа 200 записей, и каждая выборка метода моментов и Колмогорова, однако исследуемый случайный процесс не проходит по критерию Пирсона.
Проверка рассматриваемого случайного процесса на стационарность по его дисперсии показала, что процесс не является стационарным, а значение его нормированной корреляционной функции, в самом начале процесса равное 1, практически сразу падает до значений ниже 0,1. Полученные результаты свидетельствуют о не стационарности и значительной некоррелированности рассматриваемого случайного процесса.
Также случайный процесс эргодичен.
