Photo by Rafael Peier (rIJvU5vDTzI)

Uso do Octave


Instalação do Octave

O Octave pode ser obtido à partir de: ver://octave.org/download.html.

No Windows, o arquivo de instalação ocupa 364 MB na versão 7.2.0. Porém, depois de instalado (descompactado), e acrescentado os pacotes que necessitaremos para trabalhar na área de controle, o Octave passa a ocupar aproximadamente 2,17 GBytes.

🥱 Obs.: A instalação do Octave for Windows versão 11.3.0 (~555 MB) pode exigir um período de tempo considerável para sua instalação (49 minutos, 💤, mas já vêm acompanhado de uma série de pacotes, entre eles: control, signal e a=symbolic que são os que vamos necessitar.

No Linux/Ubuntu, a versão snap do Octave 7.2.0 uma vez instalado (sem nenhum pacote extra) ocupa aproximadamente 345 Mbytes. Mas, diferente da versão para Windows, no Linux/Ubuntu, cada pacote (comandos/funções) extras deve se instalado à mão conforme se mostra à seguir e então, o espaço ocupado em disco aumenta. A instalação no Ubuntu é muito mais rápida que no Windows (menos de 5 minutos).

Segue um janela de comandos comum do Octave:

Octave_running.png

 

Opção de Uso Online

Existe a opção de usar uma versão online do Octave à partir de: https://octave-online.net

A versão on-line já traz instalados e ativados vários pacotes:

 

Informações extras sobre o Octave: https://wiki.octave.org/Using_Octave

 

Primeiro Teste

Vamos tentar imprimir um simples gráfico:

Se não houve erros de digitação, uma janela gráfica como a mostrada abaixo deve ter sido gerada:

curva_1_teste.png

Pacotes pkg (comandos extras)

De forma a ampliar as possibilidades de uso do Octave com a área de Controle Automático, se sugere a instalação de algumas ferramentas extras, chamadas de "pacotes".

Os "pacotes" no caso do Octave, são equivalentes aos "toolboxes" no caso do Matlab.

 

Para listar pacotes já instalados

Para listar pacotes já instalados, usar o comando pkg list ou ver:

Repare que eventualmente alguns pacote já estão instalados (neste caso, Octave for Windows versão 11.3.0). Entre eles o "control".

Ou (no caso da versão online):

 

Pacotes Interessantes para nosso caso de uso

No nosso caso estamos interessados nos pacotes:

E pode ser interessante instalar também os pacotes:

Para instalar pacotes

Para descobrir que pacotes estão disponíveis (e versão dos mesmos):

Obs.: a listagem acima é resultado do Octave sendo executado no Windows.

Se for necessário instalar pacotes (caso do Linux), use o comando:

>> pkg install -verbose -forge <package_name>

A opção -verbose mostra o andamento da instalação do pacote (útil para pacotes grandes, principalmente: o control). A opção -forge carrega diretamente do repositório internet da Octave (obviamente exige conexão à internet).

Por exemplo:

Se você deseja instalar pacotes e acompanhar o processo de download e instalação, use a opção -verbose, mas isto pode gerar longas mensagens:

Por exemplo:

Note que provavelmente serão instaladas várias bibliotecas de apoio ao pacote.

 

Pacotes mínimos para área de Controle & Sistemas Lineares

Os pacotes mínimos necessários para a área de Controle Automático Clássico aparecem listados abaixo:

 

Novidades no pacote Control

Alguns destaques:

Atualizando pacotes já instalados

De vez em quando pode ser interessante atualizar os pacotes já instalados. Para tanto, simplesmente execute:

>> pkg update

Obs.: usar a opção "global" apenas se deseja aplicar alterações à todos os usuários e se tiver permissão (estiver executando o Octave como) de administrador para acessar/alterar arquivos de instalação, senão ocorrerão erros!

 

Mais informações sobre pacotes

Informações adicionais sobre pacotes:

Informações específicas sobre o pacote control este pacote podem ser encontradas em:

Segue lista das funções mais utilizadas:

 

Ops... Carregar pacotes antes...

Obs.: ANTES de chamar qualquer função associado a um pacote, você deve "carregar" este pacote executando comandos como:

 

Exemplos de Uso

Exemplo 1: Gráfico de uma função

Suponha que se queira gerar o gráfico de uma onda senoidal:

Janela gráfica criada:

octave-online-line-9

Exemplo 2: Gráfico de uma Onda

Suponha que se queira gerar o gráfico de uma onda senoidal de 5 Vpp, oscilando à 440 Hz, mostrando 1,5 ciclos do sinal.

Neste caso, temos que criar mais vetores e realizar alguns cálculos para gerar vetores (variáveis) contendo os dados para mostrar 1,5 ciclos deste sinal específico.

Resultado gráfico:

onda_440Hz

 

Exemplo 3: Gráfico de uma senóide amortecida

Suponha que resposta de um sistema sub-amortecido siga a equação:

Os 5 primeiros segundos do gráfico desta função fica:

Saída gráfica gerada:

seno_amortecido

Note que as seguintes equações foram usadas:

ζ=ln(%OS/100)π2+ln2(%OS/100), fator amortecimento;

s=σ±jwd, pólo complexo;

σ=wnζ, parte real;

wd=wn1ζ2, parte imaginária;

y(t)=1eζwnt(cos(wn1ζ2t)+ζ1ζ2sin(wn1ζ2t)), resposta temporal

 

Exemplo 4: Multiplicação de matrizes vs elemento-à-elemento

Note que no Ocatve qualquer variável é uma matriz, mesmo que seja de dimensões 1 x 1. Isto implica cuidado ao multiplicar variáveis que são vetores/matrizes.

Por exemplo:

Note: na linha de comando 9, o Octave entendeu que você tentou realizar:

Percebe-se que as dimensões internas das matrizes envolvidas não coincidem e então o erro.

Quando for necessário realizar operações elemento-à-elemento entre vetores, preceder o operador (* ou /) com o caracter . como mostrado na linha de comando 9 acima.

Ou você poderia tentar realizar:

Note que acrescentar o caracter sufixo ' a uma variável que é uma matriz, significa realizar a transposta da mesma. Neste caso:

 

Exemplo 5: Ingressando funções transferência

Segue exemplo de ingresso de uma "transfer function" (função transferência):

objeto tf, exemplo de uso:

Exemplo2:

Note: a função tf2zp() (disponível no pacote signal) permite obter um resultado simular ao que seria obtido usando a função zpk() do MATLAB

 

Exemplo 6: Expansão em Frações Parciais

Seja a seguinte função transferência:

G(s)=4s+62s3+10s2+16s+8eq. (1)

Esta função foi gerada à partir da eq. diferencial:

2d3ydt3+10d2ydt2+16dydt+8y=4dudt+6u

A expansão em frações parciais de (1), rende:

Resultado da expanção:

G(s)=4s+62s3+10s2+16s+8=1(s+2)+1(s+2)1(s+1)

Lembrando da tabela de transformadas de Laplace:

f(t)F(s)
eat1sa

Temos então que:

g(t)=e2t+e2t+1et

 

Exemplo 7: Projeto de um Controlador Proporcional

Seja uma planta como:

G(s)=40(s+1)(s+4)(s+10)

O projeto de um controlador Proporcional com sobressinal máximo de 10% poderia ser desenvolvido como:

O que deve ter gerado o seguinte gráfico:

step_MA_exenmplo1.png

Temos que fechar a malha definindo um ganho para o controlador, evitando o sobressinal máximo desejado, então:

exenmplo1_RL.png

Mas podemos traçar uma reta axial que parte da origem do plano-s. Conhecendo-se o valor do ζ podemos determinar o ângulo α, ver figura a seguir:

polos_MF_2a_ordem.png

A figura anterior mostra polos de um sistema de 2a-ordem, do tipo:

Y(s)R(s)=K(s+p1)(s+p2)=K(ωn2s2+2ζωs+ωn2)

com polos em: s=σ±jωd, onde:

σ=ωnζ=ωncos(α);
ωd=ωn1ζ2=ωnsin(α);
ζ=cos(α);
sin(α)=1ζ2.

então: α=arccos(ζ)

Podemos "automatizar" este cálculo e incluir os comandos para imprimir a reta correspondente a valores constantes de ζ, criando uma nova função, neste caso, chamada de sgrid2(), cujo código aparece em seguinda:

O resultado da aplicação da mesma na figura anterior gera:

rlocus_sgrid2_1.png

Podemos usar o comando >> legend off para sumir com o quadro que aparece junto a figura.

rlocus() ou rlocusx()

O Ocatve não possui uma função chamada rlocfind() como no caso do MATLAB, mas possui uma função similar: rlocusx().

No caso deste exemplo, resultaria em algo como:

O que acaba gerando uma figura como a mostrada à seguir:

rlocusx_teste1.png

Mas note no exemplo anterior, que não foi possível imprimir uma linha guia para valores constantes de ζ.

Note que rlocuxx() entretanto traz outras opções. Uma vez ingressado este comando, a janela gráfica entra em modo interativo aceitando os seguintes comandos (https://octave.sourceforge.io/control/function/rlocusx.html ou https://gnu-octave.github.io/pkg-control/rlocusx.html):

TeclaResultado
clique-esquerdomostra valor do ganho, polos de MF, ζ e ωn
s"step" = Resposta ao degrau unitário para ganho no ponto escolhido
b"bode" = Diagrama de Bode
m"margin" = Diagrama de Bode com margens de estabilidade (ganho e fase)
a"all" = Plota os 4 gŕaficos anteriores
c"clear" = limpa todas as anotações já feitas
d"delete" = apaga todas as figuras abertas
x"eXit" = sair do modo interativo

Por exemplo, apontando mais de uma posição no RL, podemos obter uma figura como:

rlocusx_exe1_2.png

O diagrama de bode com as margens de ganho e de fase são mostradas na próxima figura:

bode_exe1.png

E a resposta à entrada degrau unitário para o ponto escolhido (K=3,5) fica:

step_exe1.png

E clicamos "x" para sair do modo interativo e voltar para a janela de comandos do Octave.

A única limitação é que no RL mostrado, não aparece nenhuma linha guia referente a valores constantes de ζ, o que dificulta um pouco a sintonia do controlador. Faltaria "combinar" a função rlocusx() com sgrid2()...

Mas podemos tentar descobrir o ponto no RL com ζ=0.5912:

rlocusx_exe1_zoom.png

Encontramos um ganho aproximado de K=1,97 (ζ=0,6).

Fechando a malha com K=1,95 vamos obter:

E a seguinte figura é gerada:

step_exe1_K_1_95.png

Percebemos um grande erro de regime permanente, e()=33,9:

Por curiosidade, usando este controlador e limitando o erro à 10%, teríamos que usar outro valor de ganho:

Lembrando da Teoria do Erro:

eStep()=lims0sE(s)=11+lims0FTMA(s)=11+Kp

onde Kp=constante do erro estático de posição.

Neste caso, e()=10%=0,1, então Kp deveria assumir o valor:

0,1=11+KpKp=10,10,1=9

Calculando a constante Kp para esta planta:

lims0FTMA(s)=lims0K40(s+1)(s+4)(s+10)=40K(1)(4)(10)=K

Então K=Kp=9. Testando:

E obtemos a resposta:

exe_1_step_K_9.png

Faltaria obter informações sobre as características de resposta do sitema (função stepinfo() no MATLAB).


Outras funções do Octave

Da álgebra de Diagrama em Blocos:

Fim.


Fernando Passold 16/03/2024; atualizado em 02/08/2026.