Isto não é macOS! Ubuntu 24.04 LTS (Linux 7.0.0-31-generic), Gnome 46.0, Octave 11.3.0 x86_64, Typora (editor markdown)
Respostas Temporais de Sistemas LinearesRelações plano-s vs respostas ao degrauPólos DominantesExemplo 1Exemplo 2Exemplo 3Observações Finais
Aula de 08/09/2026
Objetivos:
Simulando alguns sistemas...
Este sistema segue a forma genérica:
Note que nesta expressão os termos em
Podemo calcular o valor fina de saída de um sistema em regime permanente. aplicando
onde neste caso,
(
O que implica:
E resulta em:
ou, resumindo, uma saída que tende para 1 em regime permanente (para entrada degrau unitário).
Voltando ao sistema sob interesse:
Realizando os comandos no Octave/Matlab:
>> G=tf(9,[1 2 9])/bin/perl5.30: bad interpreter: No such file or directoryerror: 'tf' undefined near line 1, column 3>> pkg load control % Ops... foi esquecido de carregar pacote control>> G=tf(9,[1 2 9])
Transfer function 'G' from input 'u1' to output ...
9 y1: ------------- s^2 + 2 s + 9
Continuous-time model.>> zpk(G)
Transfer function 'ans' from input 'u1' to output ...
9 y1: ------------- s^2 + 2 s + 9
Continuous-time model.>> pole(G)ans =
-1.0000 + 2.8284i -1.0000 - 2.8284i
>>Note o par de pólos complexos conjugados:
Obtendo o mapeamento de pólos e zeros (que não existem neste caso) no plano-s e obtendo siua resposta ao degrau:
>> pzmap(G)>> xlim([-2 0.5]) % força mostrar o eixo jw>> legend off>> legend('G(s)', 'Location', 'southeast'); % forçando legenda numa rewgião mais propícia no gráfico>> figure; step(G)

Podemos obter mais informações sobre a resposta ao degrau aplicando o comando stepinfo():
>> stepinfo(G)ans =
scalar structure containing the fields:
RaiseTime = [](0x0) RiseTime = 0.4626 TransientTime = 3.7007 SettlingTime = 3.7007H SettlingMin = 0.8918 SettlingMax = 1.3291 Overshoot = 32.915 Undershoot = 0 Peak = 1.3291 PeakTime = 1.1000 StaticGain = 1 InitialJump = 0
>>
Objetivo geral: a idéia agora é enteder a predominância de certos pólos na resposta temporal de um sistema.
A idéia é começar uma associação mental/visual entre pólos no plano-e e suas respostas temporais, para ao final compreender porque certos pólos podem ser "negligenciados" na resposta de um sistema.
Vamos verificar o que ocorre quando:
Para tanto, no Octave/Matlab fazemos:
>> clear % recomeçando tudo do zero>> close all % fechando janelas gráficas>> polos_2a=[-1+4i, -1-4i]polos_2a =
-1 + 4i -1 - 4i
>> poli_2a=poly(polos_2a) % cria polinômio correspondente às raízes informadaspoli_2a =
1 2 17
>> H2a=tf(17,poli_2a) % Criando a tf com ganho DC unitário
Transfer function 'H2a' from input 'u1' to output ...
17 y1: -------------- s^2 + 2 s + 17
Continuous-time model.>> step(H2a) % comprovando a resposta ao degrau>> h = findobj(gca, "type", "line"); % "handler"" para figura>> set(h, "linewidth", 1.5); % muda a espessura após o desenho>> print("fig1.png", "-dpng", "-r150"); % salva figura com resulução melhorTemos a figura:

Continuando, agora montamos o sistema de 3a-ordem, acrescentando o pólo real em 8*17 no numerador):
>> H3a=tf(8*17,poly([-8, -1+4i, -1-4i]))
Transfer function 'H3a' from input 'u1' to output ...
136 y1: ------------------------- s^3 + 10 s^2 + 33 s + 136
Continuous-time model.>> zpk(H3a)
Transfer function 'ans' from input 'u1' to output ...
136 y1: ------------------------- s^3 + 10 s^2 + 33 s + 136
Continuous-time model.>> pole(H3a)ans =
-8 + 0i -1 + 4i -1 - 4i
>> figure; step(H2a, H3a)>> xlim([0 6]) % definindo outro "range" para periódo de tempo mostrado>> legend off % mudando legenda de lugar>> legend('H2a(s)', 'H3a','Location', 'southeast')>> h = findobj(gca, "type", "line"); % encontra o(s) objeto(s) de linha>> set(h, "linewidth", 1.5); % aplica nova espessura nas linhas>> print("fig2.png", "-dpng", "-r150"); % salva imagem
Note que:

Obs.: o últumo gráfico foi criado com:
>> figure; subplot(121); pzmap(H3a);>> legend off; title('plano-s: H3a(s)')>> subplot(122); pzmap(H2a)>> legend off; title('plano-s: H2a(s)')>> xlim([-11 1]) % para mesmo range do gr>> print("fig2b.png", "-dpng", "-r150");
Vamos variar um pouco o sistema anterior, mantendo os par de pólos complexos conjugados (
Teremos então:
Vamos ver o que ocorre, levantando os gráficos para entender o que ocorre agora:
>> H4=tf(17,poly([-1, -1-4i, -1+4i]))
Transfer function 'H4' from input 'u1' to output ...
17 y1: ----------------------- s^3 + 3 s^2 + 19 s + 17
Continuous-time model.>> pole(H4)ans =
-1 + 4i -1 - 4i -1 + 0i
>> figure; pzmap(H4)>> xlim([-2 1]) % adequar melhor a região mostrada e incluir eixo jw>> legend off>> title('Pole-Zero Map: H4(s)')>> print("fig3b.png", "-dpng", "-r150");O mapa dos pólos e zeros no plano-s fica:

Note o "alinhamento" os pólos no mesmo ponto na parte real do plano-s.
Verificando como fica a resposta ao degrau:
>> figure; step(H2a, H4)>> xlim([0 6])>> legend off>> legend('H2a(s)', 'H4(s)','Location', 'southeast')>> h = findobj(gca, "type", "line"); % encontra o(s) objeto(s) de linha>> set(h, "linewidth", 1.5); % aplica a espessuraÉ gerada uma figura como a mostraba abaixo que corresponde à resposta ao degrau para este outro sistema de 3a-ordem:

Conclusão:
Agora vamos "mover" mais uma vez o pólo real em relação ao par de pólos complexos conjugados. A idéia e localizar este pólo real bem mais próximo do eixo
xxxxxxxxxx>> H5=tf(17*0.1,poly([-0.1, -1-4i, -1+4i]))
Transfer function 'H5' from input 'u1' to output ...
1.7 y1: ---------------------------- s^3 + 2.1 s^2 + 17.2 s + 1.7
Continuous-time model.>> figure; pzmap(H5)É gerada a figura:

Vamos ver o que ocorre com a resposta ao degrau deste sistema (sempre comparando com a resposta do sistema de 2a-ordem baseada apenas nos ṕolos complexos):
xxxxxxxxxx>> figure; step(H2a, H5)>> xlim([0 60])
Conclusão:
A localização do(s) pólo(s) no plano-s pode fazer uma grande diferença na resposta ao degrau de um sistema, mas geralmente os pólos que não dominam na resposta também possuem um baixao fator de impacto na resposta causado pelo baixo valor do seu "ganho" ou valor do resíduo associado a determinado pólo.
Lembre que:
Podemos tentar determinar analiticamente esta resposta usando o Octave:
xxxxxxxxxx>> U=tf(1,[1 0]) % ingressando tf da entrada degrau unitário
Transfer function 'U' from input 'u1' to output ...
1 y1: - s
Continuous-time model.octave:21> Y_H5 = U*H5 % calulando Y(s)
Transfer function 'Y_H5' from input 'u1' to output ...
1.7 y1: -------------------------------- s^4 + 2.1 s^3 + 17.2 s^2 + 1.7 s
Continuous-time model.>> pole(H5) % confirmando a posição dos pólosans =
-1.0000 + 4.0000i -1.0000 - 4.0000i -0.1000 + 0i
>> num=H5.num{1} % extraindo polinômio do numerador de H5(s)num =
0 0 0 1.7000
>> den=H5.den{1} % extraindo polinômio do denominador de H5(s)den =
1.0000 2.1000 17.2000 1.7000
>> [r, p, k, e] = residue (num, den) % resultado da expansão em frações parciaisr =
-0.050565 + 0.011377i -0.050565 - 0.011377i 0.101130 + 0.000000i
p =
-1.0000 + 4.0000i -1.0000 - 4.0000i -0.1000 + 0i
k = [](0x0)e =
1 1 1
>>A última parte do cálculo pode ser traduzida para:
onde o módulo e angulo dos resíduos da parte complexa podem ser calculados desta forma:
xxxxxxxxxx>> abs(-0.050565 + 0.011377i)ans = 0.051829>> rad2deg(angle(-0.050565 + 0.011377i))ans = 167.32>>A tranformada inversa de Laplace sobre a expressão
xxxxxxxxxx>> pkg load symbolic % a função ilaplace() só trabalha sobre variáveis simbólicas>> syms s t>> n = sym(num(1)) * s^(length(num)-1);warning: passing floating-point values to sym is dangerous, see "help sym"warning: called from double_to_sym_heuristic at line 50 column 7 sym at line 384 column 11
>> d = sym(den(1)) * s^(length(den)-1);>> for i = 2:length(num) n = n + sym(num(i)) * s^(length(num)-i);end>> for i = 2:length(den) d = d + sym(den(i)) * s^(length(den)-i);endwarning: passing floating-point values to sym is dangerous, see "help sym"warning: called from double_to_sym_heuristic at line 50 column 7 sym at line 384 column 11
warning: passing floating-point values to sym is dangerous, see "help sym"warning: called from double_to_sym_heuristic at line 50 column 7 sym at line 384 column 11
warning: passing floating-point values to sym is dangerous, see "help sym"warning: called from double_to_sym_heuristic at line 50 column 7 sym at line 384 column 11
>> % Agora n e d são variáveis simbólicas (parecem strings)>> nn = (sym)
17 ── 10
>> dd = (sym)
2 3 21⋅s 86⋅s 17 s + ───── + ──── + ── 10 5 10
>> F = n / d % versão simbólica de Y(s)F = (sym)
17 ─────────────────────────── ⎛ 2 ⎞ ⎜ 3 21⋅s 86⋅s 17⎟ 10⋅⎜s + ───── + ──── + ──⎟ ⎝ 10 5 10⎠
>> f = ilaplace(F, s, t) % corresponde a y(t)f = (sym)
⎛ -t -t ⎞ -t ⎜ 45⋅ℯ ⋅sin(4⋅t) 100⋅ℯ ⋅cos(4⋅t)⎟ ─── 17⋅⎜- ─────────────── - ────────────────⎟⋅θ(t) 10 ⎝ 3362 1681 ⎠ 170⋅ℯ ⋅θ(t) ────────────────────────────────────────────── + ───────────── 10 1681
>>Note que o Octave não aplica relação de Euler sobre a parte associada com o
Mas repare que o pólo em
xxxxxxxxxx>> 170/1681ans = 0.1011Lembrando da Relação de Euler:
onde
Obs.: use atan2(b,a) para obter ângulo no quadrante correto.
E considerando que o fator
onde:
Aplicado neste caso, teremos algo como:
resultando em:
xxxxxxxxxx>> A=45/3362A = 0.013385>> B=100/1681B = 0.059488>> R=sqrt(A^2+B^2)R = 0.060976>> phi=atan2(B,A) % em rad !phi = 1.3495>> rad2deg(phi) % valor em grausans = 77.320>> K=R*17/10 % valor final da "ponderação" para os pólos complexosK = 0.1037ou finalmente:
ou uma expressão completa como:
Transformando a equação anterior num gráfico, obtemos:

E fica mais fácil perceber como os pólos complexos não dominam na resposta deste sistema.
O gráfico anterior foi obtido com os comandos:
xxxxxxxxxx>> figure; ezplot('0.1037*exp(-t)*sin(4*t+1.3495)', [0 10])>> hold on; % para sobrepor novo comando grsáfico sobre janela anterior>> ezplot('0.10113*exp(-0.1*t)', [0 10])>> h = findobj(gca, "type", "line"); % encontra o(s) objeto(s) das linhas>> set(h(1), "linewidth", 1.5); % aumenta espessura linha 1>> set(h(2), "linewidth", 1.5); % aumenta espessura linha 2>> ylim([-0.05 0.11]) % melhorando amplitudes da região mostrada>> grid>> legend('s=-1', 's=-1+j4')>> title('y(t)')>> print("fig6.png", "-dpng", "-r150");Fim.
Fernando Passold, em 08/09/2026