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


%% Лабораторная работа: Упрощение линейных систем
% Вариант №4
clear; clc; close all;

%% 1. Определение исходной системы
s = tf('s');
num = [2700 2700];
den = [1 8 27 40 24];
W = tf(num, den);

%% 2. Упрощение модели до 3-го порядка
% Используем метод сбалансированного сокращения (balred) для аппроксимации
W_red = balred(W, 3); 

fprintf('--- Исходная система (Вариант 4) ---\n');
display(W);
fprintf('--- Упрощенная система (3-й порядок) ---\n');
display(W_red);

%% 3. Построение переходного процесса в разомкнутой системе
figure('Name', 'Разомкнутая система: Вариант 4');
step(W, 'b', W_red, 'r--');
grid on;
legend('Исходная (4 пор.)', 'Упрощенная (3 пор.)');
title('Переходная характеристика разомкнутой системы');

%% 4. Построение переходного процесса в замкнутой системе (единичная ОС)
W_cl = feedback(W, 1);
W_red_cl = feedback(W_red, 1);

figure('Name', 'Замкнутая система: Вариант 4');
step(W_cl, 'b', W_red_cl, 'r--');
grid on;
legend('Исходная', 'Упрощенная');
title('Переходный процесс замкнутой системы');

%% 5. Сравнение показателей качества и вывод
info = stepinfo(W_cl);
info_red = stepinfo(W_red_cl);

fprintf('\nСравнение прямых показателей качества:\n');
fprintf('%-20s | %-10s | %-10s | %-10s\n', 'Показатель', 'Оригинал', 'Упрощ.', 'Ошибка %');
fprintf('------------------------------------------------------------\n');

% Метрики для сравнения
metrics = {'SettlingTime', 'Overshoot', 'RiseTime'};
labels = {'Время рег. (с)', 'Перерегулирование %', 'Время нарастания'};

for i = 1:length(metrics)
    m = metrics{i};
    val_orig = info.(m);
    val_red = info_red.(m);
    
    % Расчет ошибки в %
    if val_orig == 0
        err = 0;
    else
        err = abs(val_orig - val_red) / val_orig * 100;
    end
    
    fprintf('%-20s | %-10.3f | %-10.3f | %-10.2f%%\n', labels{i}, val_orig, val_red, err);
end

% Проверка главного условия (ошибка не более 10%)
if (abs(info.SettlingTime - info_red.SettlingTime)/info.SettlingTime < 0.1) && ...
   (abs(info.Overshoot - info_red.Overshoot) < 10) % для % берем абсолютную разницу или относительную
    disp('Вывод: Качество приближения ВЫСОКОЕ. Ошибка не превышает 10%.');
else
    disp('Вывод: Качество приближения НИЗКОЕ. Требуется другой метод упрощения.');
end