Artigos de Treinamento Octave
Esta página orienta quem tiver interesse em aprender a usar o octave.
- Alternativa para o Mathlabpor Marcelo Martins
O Octave é uma linguagem de programação de alto nível e um ambiente de desenvolvimento numérico, projetado para realizar cálculos numéricos e análises científicas. Ele fornece uma interface fácil de usar para a manipulação de matrizes, implementação de algoritmos, criação de gráficos e solução de problemas numéricos em geral.Características do Octave:
- Linguagem de programação: O Octave possui uma linguagem de programação própria, que permite aos usuários escreverem scripts e programas para realizar operações numéricas, implementar algoritmos e automatizar tarefas.
- Matrizes e cálculos numéricos: O Octave é especialmente adequado para trabalhar com matrizes e realizar cálculos numéricos. Ele suporta operações matriciais, álgebra linear, manipulação de vetores e escalares, além de funções matemáticas avançadas.
- Funções embutidas: O Octave possui uma ampla gama de funções embutidas para realizar cálculos matemáticos, estatísticos, trigonométricos, lógicos e outros tipos de operações numéricas.
- Gráficos e visualização: O Octave oferece recursos para criar gráficos e visualizar dados. Ele suporta plotagem de gráficos 2D e 3D, diagramas de dispersão, histogramas e outras formas de visualização de dados.
- Extensibilidade: O Octave permite estender sua funcionalidade por meio de pacotes e bibliotecas. Existem diversos pacotes disponíveis que fornecem recursos adicionais para áreas específicas, como processamento de sinais, controle, otimização, entre outros.
- Código aberto: O Octave é um software de código aberto, o que significa que o seu código-fonte está disponível gratuitamente para acesso, modificação e distribuição. Isso permite que a comunidade contribua para o seu desenvolvimento e oferece flexibilidade aos usuários.
Em resumo, o Octave é uma ferramenta poderosa para realizar cálculos numéricos, análises científicas e implementação de algoritmos, sendo uma alternativa popular ao MATLAB.
Ele é amplamente utilizado por pesquisadores, engenheiros, cientistas e estudantes em diversas áreas acadêmicas e industriais.
Baixando o Octave
O Octave pode ser baixado através do seguinte site:
Baixe o arquivo octave para a plataforma alvo, conforme figura abaixo:
Exemplo comparativo
Octave código
Fonte do projeto:
pkg load control Kp = 36; Kd = 0.2 * Kp; num4 = [0 0 5]; den4 = [1 4.42 4]; Gp4 = tf(num4, den4); PD = Kp + Kd * Gp4; Gp5 = PD * Gp4; num10 = [0 3.6 80]; den10 = [1 4.42 4]; G10 = tf(num10, den10); G_fechado = feedback(G10, 1); % Traçar o diagrama de Bode do sistema em malha fechada bode(G_fechado); grid on; % Traçar o passo de resposta ao impulso do sistema em malha fechada step(G_fechado); grid on;
Mathlab
Neste fragmento, podemos notar as semelhanças entre os códigos:
Agora iremos ver o código do projeto.
num1=[005]; den1=[1,4.42,4]; Gp= tf(num1,den1); ft1 = feedback(Gp,1); step(ft1); num2=[36]; den2=[1]; Gp2= tf(num2,den2); Gp3 = series(Gp,Gp2); ft2 = feedback(Gp3,1); step(ft2); %% %% Kp = 36; Kd= 0,2 * Kp; num4=[005]; den4=[1,4.42,4]; Gp4= tf(num4,den4); %PD = Kp+ Kd * Gp4b ; %Gp5 = PD * Gp4; num10=[0,3.6,80]; den10=[1,4.42,4]; G10= tf(num10,den10); G_fechado= feedback(G10,1); % G_fechado = feedback(Gp5,1); step(G_fechado) %% s=tf('s'); num6=[1]; den6=[1,2]; uGp6=tf(num6,den6); num7=[1]; den7=[1,2]; mGp7=tf(num7,den7); G8=series(uGp6,mGp7); ft9=feedback(G8,1); impulse(ft9); %% %% s=tf('s'); num6=[1]; a=200; den6=[1,a]; uGp6=tf(num6,den6); num7=[1]; den7=[1,2]; mGp7=tf(num7,den7); G8=series(uGp6,mGp7); G9= Kp*G8; ft9=feedback(G9,1); impulse(ft9);
- Octave – Criando gráficos do segundo graupor Marcelo Martins
Iremo hoje, usar o octave para definir e criar gráficos do segundo grau.
Para isso iremos utilizar o exemplo abaixo:
% Gerar gráfico de Função do Segundo Grau % X^2 + 2X + 10 % 2X^2 +2X^1 + 10X^0 x = -10:0.1:10; y = 2*x.^2 - 5*x - 100; plot(x, y); xlabel('x'); ylabel('f(x)'); title('Gráfico da função f(x) = x^2 + 2x + 10'); grid on;
Em gráficos do segundo grau, temos os valores de Y em função do X, sendo assim primeiramente atribuimos o x. O X recebe uma faixa de valores, ou seja, valores que serão apresentados ao Y, começando do -10 até o valor 10, pulando de 0.1 em 0.1.
Para isso usamos a seguinte sintaxe:
x = valor_inicial: pulo : valor_final
Onde:
- valor_inicial é o primeiro valor a ser atribuido a X, no nosso caso -10;
- pulo é o valor que será acrescido de contagem a contagem até chegar ao valor final, exemplo: -10.0, -9.99, -9.98, 9.98…,9.98, 9.99, 10.00 , no nosso caso o pulo será 0.1.
- valor _final é o valor que se quer chegar para terminar a contagem, no nosso caso 10
- Octave – Primeiro contatopor Marcelo Martins
Comentário
o Comentário é o % seguido do texto.
Conforme o exemplo:
% Isso é um comentário
Declaração de variável
x = 14; resultado = x + 2; resultado2 = x ^2 ; resultado3 = (x ^2)/ (x*2)
As variáveis podem ser declaradas livremente no octave, conforme apresentado no código acima.
Trabalhando com vetor
Trabalhar com vetor é tão simples como manipular variáveis, para isso, basta declarar os elementos entre chaves [ ]
vt = [10,20,30] resultado4 = vt*2; vt2 = [1,2,3] resultado5 = vt + vt2; resultado6 = vt .* vt2; disp(resultado6); printf("O Resultado: %d",resultado6);
Podemos ver, no exemplo acima, que temos a variável vt, que tem 3 elementos, 10,20 e 30, armazenados.
Desta forma sempre que falarmos em vt, estaremos trabalhando com os valores [10,20,30]. Até que este seja modificado.
Ao declarar resultado4, fazemos a operação matemática de multiplicação por 2, ficando [20,40,60 como resultado na variável resultado4.
Comparando valores
Agora iremos usar o valor armazenado na variável para tomar uma decisão. Para isso usamos o comando if, conforme nosso exemplo.
x = 14; printf("\n\n"); if (x == 12) printf("O valor bateu\n"); else printf("O valor nao bateu\n"); end; printf("\n\n"); if (x < 12) printf("O valor é menor que 12\n"); else printf("O valor é maior ou igual a 12\n"); end;
Neste exemplo testamos o valor de x, verificando se este atende a condição onde == é valor igual ao definido, < (menor que o definido).
Atendendo o primeiro print será mostrado. Caso contrário, ele mostrará o print atribuído após o else.
O Else pode ser omitido, não tendo então exceção. Apenas condição de atendimento ao teste if.
- Octave – Função de transferênciapor Marcelo Martins
Pelo wiki: “Função de transferência é a representação matemática da relação entre a entrada e a saída de um sistema físico.”
Desta forma podemos simular equipamentos físicos através de funções matemáticas, simulando seus resultados.
De forma geral existem 2 tipo de simulação.
Sistema Malha Abertos – São sistemas que apresentam apenas uma entrada – > Com sua respectiva saída.
Já um sistema de malha fechada, possui feedback, sendo definido pela wiki como:
“Também chamado de controle retroativo (realimentação ou feedback) necessita de informações da saída do controlador através de elementos sensores ou transdutores, compara o sinal da saída com o set-point(referência) e corrige a saída caso a mesma esteja desviando-se dos parâmetros programados.”
Entendendo como funciona o sistema de malha aberta no OCTAVE:
Para entender o sistema de malha aberta , com uso da função de transferência, montei este vídeo para voces.
Podemos inicialmente verificar, que faz-se necessário o uso da lib control, pois o octave precisa desta lib para utilizar o sistema de transferencia.
Para isso usamos o comando:
pkg load control
Em seguida precisamos criar a função de transferência atribuindo o numerador num01 e denominador den01. Em criando a função de transferência, que será utilizada para injetar os valores de entrada.
Logo atribuimos a função tf(num,den) criando a variavel S01, que armazena a função de transferencia.
Agora por fim, atuaremos passando os valores de entrada, através do t, e plotando no gráfico, conforme a função step.
O resultado final fica conforme apresentado a seguir:
% Carrega o pacote da função de transferencia. pkg load control % 1 % ------------- % S^2 +2S + 10 % num01 % den01 %num01= [0,0,1]; num01 = [1]; den01= [1,2,10]; % Cria a funçao de transferencia S01= tf(num01,den01); disp(S01); %Atribui um vetor de tempo t= 0:0.1:10; %Resposta ao degrau da função de transferencia step(S01,t); xlabel('Tempo'); ylabel('Saida (v)'); title('Resposta da Função de transferencia');
- Octave – Sistema de transferência Malha fechadapor Marcelo Martins
No vídeo anterior, apresentamos uma pequena apresentação de um sistema de malha aberta.
Agora iremos apresentar um exemplo de malha fechada.
Conforme o wiki:
“Também chamado de controle retroativo (realimentação ou feedback) necessita de informações da saída do controlador através de elementos sensores ou transdutores, compara o sinal da saída com o set-point(referência) e corrige a saída caso a mesma esteja desviando-se dos parâmetros programados.”
O vídeo de treinamento deste material pode ser visto aqui.
Primeiramente, temos que carregar a função control, através do comando:
pkg load control
Em seguida criamos o num01 e den01, da planta.
Em seguida criamos o num02 e den02 da função de controle.
Por fim atribuimos a função de feedback, através da união de ambas as funções:
sys01= feedback(tf01,tf02);
Lembrando que a função feedback , aceita mais um parâmetro, que é o sinal de realimentação.
“Se
sign
for omitido ou definido como+1
, indica que o sinal de realimentação é positivo (realimentação negativa). Sesign
for definido como-1
, indica realimentação positiva.”%Apresentação do sistema de malha fechada pkg load control %Sistema de transferencia da planta. num01 = [1]; den01 = [1,2,10]; %tf01 - Sistema da Planta %tf01=tf([1],[1,2,10]) tf01=tf(num01,den01); num02=[2]; den02=[1]; % Função de controle tf02=tf(num02,den02); % Construir o sistema de malha fechada sys01= feedback(tf01,tf02); disp(sys01); step(sys01); xlabel('tempo'); ylabel('saida v'); title('Sistema malha fechada');
Resultado da função de malha fechada
- Octave – Considerações finaispor Marcelo Martins
Recomendações
Quem tiver interesse em continuar o treinamento de octave, pode adicionar o canal que eu recomendo:
https://www.youtube.com/channel/UCfu1un2W4wxpdjYekpfo4zQ
Meus vídeos e canal no Youtube
https://www.youtube.com/@marcelomaurin/videos
GITHUB do projeto