Загрузка данных


clc; clear all; close all;

% Исходные данные
x0 = [3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8 8.5 9 9.5 10]';
y0 = [0.096 0.048 0.033 0.024 0.017 0.013 0.012 0.0075 0.056 0.007 0.006 0.004 0.004 0.0039 0.0026]';

% График исходных данных
figure(1);
plot(x0, y0, 'o', 'Color', 'b');
grid on; hold on;
xlabel('Ось X'); ylabel('Ось Y');
title('Приближение нелинейной зависимости');

%% 1. СТЕПЕННАЯ МОДЕЛЬ: y = a * x^b
% Линеаризация логарифмированием: ln(y) = ln(a) + b*ln(x)
x1 = log(x0);
y1 = log(y0);

X1 = [ones(size(x1)) x1]; % Матрица плана (столбец единиц и столбец ln(x))
[b, ~, r, ~] = regress(y1, X1);

% Расчет значений модели для исходных (нелинейных) данных
a_param = exp(b(1));
b_param = b(2);
ymod1 = a_param * (x0 .^ b_param);

% Построение на графике 1
plot(x0, ymod1, 'c-', 'LineWidth', 1.5);

%% 2. ОБРАТНАЯ МОДЕЛЬ: y = a + b/x
x2 = 1. ./ x0;

X2 = [ones(size(x2)) x2]; % ИСПРАВЛЕНО: столбец единиц и столбец 1/x
[bn, ~, rn, ~] = regress(y0, X2);

% Расчет значений модели
ymod2 = bn(1) + bn(2) ./ x0;

% Построение на графике 1
plot(x0, ymod2, 'k-', 'LineWidth', 1.5);

% Легенда для главного графика
legend('Исходные данные', 'Степенная зависимость', 'Обратная зависимость');

%% 3. ОЦЕНКА КАЧЕСТВА (Коэффициенты детерминации R^2 из рукописи)
ms = mean(y0);
R1 = 1 - sum((ymod1 - y0).^2) / sum((y0 - ms).^2);
R2 = 1 - sum((ymod2 - y0).^2) / sum((y0 - ms).^2);

fprintf('Коэффициент детерминации для степенной модели R1^2 = %.4f\n', R1);
fprintf('Коэффициент детерминации для обратной модели R2^2 = %.4f\n', R2);