%% Лабораторная работа: Упрощение линейных систем
% Вариант №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