%% Лабораторная работа: Упрощение линейных систем
% Вариант №13
clear; clc; close all;
%% 1. Определение исходной системы
s = tf('s');
num = [800 2400 1600];
den = [1 9 33 55 36];
W = tf(num, den);
% Нормализация (приведение свободного члена знаменателя к 1)
K = 1600/36;
W_norm = W / K; % Нормализованная ПФ
%% 2. Упрощение модели до 3-го порядка
% Используем встроенную функцию balred (сбалансированное сокращение порядка)
% Это наиболее точный современный метод в MATLAB, эквивалентный целям методички
W_red = balred(W, 3);
fprintf('Исходная система W(s):\n');
display(W);
fprintf('Упрощенная система W_red(s):\n');
display(W_red);
%% 3. Построение переходных процессов в разомкнутой системе
figure('Name', 'Разомкнутая система');
step(W, 'b', W_red, 'r--');
grid on;
legend('Исходная', 'Упрощенная');
title('Переходный процесс разомкнутой системы');
%% 4. Построение переходных процессов в замкнутой системе
W_cl = feedback(W, 1);
W_red_cl = feedback(W_red, 1);
figure('Name', 'Замкнутая система');
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('Показатель | Исходная | Упрощенная | Ошибка (%%)\n');
fprintf('-----------------------------------------------------\n');
metrics = {'SettlingTime', 'Overshoot', 'RiseTime'};
names = {'Время рег. (с)', 'Перерегул. (%%)', 'Время нарастания'};
for i = 1:length(metrics)
val = info.(metrics{i});
val_red = info_red.(metrics{i});
err = abs(val - val_red) / val * 100;
fprintf('%-16s | %8.3f | %10.3f | %8.2f%%\n', names{i}, val, val_red, err);
end