SlideShare uma empresa Scribd logo
Curso de GNU Octave / Matlab e
Aplicações para Engenheiros
Tiago Oliveira Weber
13 de março de 2018
1 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
TODO Introdução
Apresentação do Professor
Prof. Dr. Tiago Oliveira Weber
Formação
Formado em Engenharia Elétrica na Universidade Federal de
Santa Maria (UFSM)
Doutor em Microeletrônica pela Universidade de São Paulo
(USP)
Contato
E-mail: tiago.weber@ufsc.br
2 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
TODO Introdução
Palavras Iniciais
Fazer tarefas complexas sem necessitar muitas linhas de código;
Fazer protótipos iniciais sem se preocupar com detalhes de
implementação de baixo nível;
3 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
TODO Introdução
Conteúdo do Curso
Parte 1
Conhecendo o GNU Octave e o Matlab
Manipulando dados
Condicionais e Laços
Gerando Gráficos
Utilizando Funções de Interação com Usuário
Criando Funções
Fazendo Depuração
4 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
TODO Introdução
Conteúdo do Curso
Parte 2
Solucionando problemas matemáticos e de engenharia
Interagindo com programas externos e códigos em C++
Programas que deve estar instalado:
GNU Octave (preferencialmente) ou Matlab.
5 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Conhecendo o GNU Octave e o Ma-
tlab
MATLAB (MAtrix LABoratory)
É uma linguagem de programação de alto nivel com foco
principal em cálculo com matrizes, processamento de sinais e
elaboração de gráficos;
Proprietário
GNU Octave
É uma linguagem de programação altamente compatível com o
MATLAB;
É open-source disponível sob a licença GNU General Public
License (GPL);
6 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Algumas coisas que veremos
7 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Algumas coisas que veremos
8 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Algumas coisas que veremos
9 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Diferenças entre GNU Octave e Ma-
tlab
A maior parte das sintaxes que funcionam no Matlab, funcionam
também no Octave; O contrário nem sempre é verdade. Ex.:
Octave suporta auto-incremento e operadores atributivos:
i++; ++i; i+=1;. . .
Operador de negação no Octave pode ser ’~’ ou ’!’.
No MATLAB, apenas ’~’.
toolboxes do Matlab Vs pacotes do Octave;
Simulink (Matlab)
10 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
A Interface
Abrindo o GNU Octave
em modo gráfico em linha de comando
octave octave --no-gui
Abrindo o Matlab
em modo gráfico em linha de comando
matlab matlab -nojvm
matlab -nodesktop
11 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Utilizando a Interface
A partir de agora, trataremos mais diretamente o GNU Octave. No
entanto, no Matlab a interface é similar.
12 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Utilizando a Interface
utilizando o GNU Octave como calculadora
13 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
Utilizando a Interface
utilizando o GNU Octave como linguagem de programação
usando o editor
criando e executando scripts / pastas onde o GNU Octave busca os
scripts
14 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Conhecendo o GNU Octave e o Matlab
O comando mais importante
helpUso: help nome do comando
15 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados
16 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (operações com
variáveis)
Código
a = 5;
b = 5;
ans = a+b;
Resposta
10
17 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (somando vetores
ou matrizes)
Código
a = [2 3];
b = [5 3];
ans = a+b;
Resposta
7 6
18 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (multiplicando
matrizes)
Número de linhas da matriz A deve ser igual ao número de colunas
da matriz B.
Código
a = [2 3];
b = [3; 4];
ans = a*b;
Dica: a função size() retorna o tamanho do vetor ou matriz em linhas e
colunas.
Resposta
18
19 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (multiplicação ele-
mento a elemento)
As duas matrizes devem ter as mesmas dimensões.
Código
a = [2 3];
b = [3 4];
ans = a.*b;
Resposta
6 12
20 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (usando índices)
Acessando valor dentro de vetor ou matriz
Código
a = [2 3];
ans = a(1);
Resposta
2
Código
a = [2 3 ; 4 5];
ans = a(2 ,1);
Resposta
4
21 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (concatenando
vetores)
Código
a = [2 3];
b = [4 5];
ans = [a, b]
Resposta
2 3 4 5
22 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (concatenando
vetores)
Código
a = [2 3];
b = [4 5];
ans = [a; b]
Resposta
2 3
4 5
23 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (concatenando
vetores)
Exercício de Fixação
A partir das matrizes A = [1 2], B = [3 4], C = [5 6] e D = [7
8], crie a matriz [1 2 3 4; 5 6 7 8]
24 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (concatenando
strings)
Concatenando strings
Código
nome1 = ’abra ’;
nome2 = ’cadabra ’;
ans = [nome1 nome2 ];
Resposta
abracadabra
25 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (criando vetores)
Vetor de zeros
Código
ans = zeros (1 ,5);
Resposta
0 0 0 0 0
26 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (criando vetores)
Vetor de um‘s
Código
ans = ones (1 ,5);
Resposta
1 1 1 1 1
27 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (criando vetores)
Criar vetor a partir de valor inicial, passo, valor final
Código
ans = 1:2:10
Resposta
1 3 5 7 9
28 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (filtrando vetor)
Código
a = 1:2:10
ans = a(a >4)
Resposta
5 7 9
29 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (filtrando vetor)
Exercício de fixação
Crie um vetor cujo primeiro valor é 5 e que vai com passo de
0.34 até 10; Filtre para mostrar apenas os valores maiores que 7
e menores que 8.
Dica:
Operador Descrição
< menor
> maior
== igualdade
& E lógico
| OU lógico
30 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (ruído)
Vetor de ruído com distribuição uniforme entre 0 e 1
Código
ans = rand (5 ,1);
Resposta
0.9466231830112574
0.3971954845587051
0.3881668003776672
0.8331643428961854
0.8487496743216061
31 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Manipulando dados
Manipulando dados (ruído gaussiano)
Vetor de ruído com distribuição gaussiana com média 10 e desvio
padrão 1
Código
ans = 10+ randn (5 ,1);
Resposta
8.686011430552387
9.906951377379334
10.27421716044483
9.831624396829206
12.07251223204489
32 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Condicionais e Laços
Condicional (if)
Código
a = 5;
if (a>3)
b = ’Iei!’;
else
b = ’Wow!’;
end
ans = b;
Resposta
Iei!
33 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Condicionais e Laços
Condicional (switch)
Código
yesno = "yes"
switch yesno
case {"yes" "y"}
value = 1;
case {"no" "n"}
value = 0;
otherwise
value = -1;
endswitch
ans = value;
Resposta
1
34 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Condicionais e Laços
Loop (for)
Código
for a=1:5
x(a) = a.^2;
end
ans = x;
Resposta
1 4 9 16 25
35 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Condicionais e Laços
Loop (for)
Código
a = [2 4 6 2 5]
for i=1: length(a)
x(i) = a(i).^2;
end
ans = x;
Resposta
4 16 36 4 25
36 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Condicionais e Laços
Loop (while)
Código
i = 1;
while (i <6)
x(i) = i.^2;
i=i+1;
end
ans = x;
Resposta
1 4 9 16 25
37 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos
Gerando Gráficos
38 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos
Gerando Gráficos
Código
t = 0:0.01:1;
y = sin (2* pi*t);
plot(t,y)
Resposta
39 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos
Gerando Gráficos
Código
t = 0:0.01:1;
y = sin (2* pi*t);
plot(t,y,’*r’)
xlabel(’tempo ’);
ylabel(’tensao ’);
Resposta
40 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos
Gerando Gráficos (histograma)
Código
y = 10+ randn (1 ,10000);
hist(y)
Resposta
41 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos Aperfeiçoados
Gerando Gráficos Aperfeiçoados
(preâmbulo)
Código
x = -0.6:0.01:0.6
y = (x.^2) .*(1+0.6* rand(1, length(x)));
plot(x,y,’.’)
xlabel(’X’);
ylabel(’Y’);
legend(’dados␣amostrados ’)
42 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos Aperfeiçoados
Gerando Gráficos Aperfeiçoados
(preâmbulo)
Resposta
43 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos Aperfeiçoados
Gerando Gráficos Aperfeiçoados
(preâmbulo 2)
Código
x = -0.6:0.01:0.6
y = (x.^2) .*(1+0.6* rand(1, length(x)));
p = polyfit(x,y ,2); % faz o fitting da curva para
polinômio de segunda ordem
xp = -0.7:0.001:0.7;
plot(x,y,’.’,
xp ,polyval(p,xp));
xlabel(’X’);
ylabel(’Y’);
legend(’dados␣ amostrados ’)
44 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos Aperfeiçoados
Gerando Gráficos Aperfeiçoados
(preâmbulo 2)
Resposta
45 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos Aperfeiçoados
Gerando Gráficos Aperfeiçoados
Código
x = -0.6:0.01:0.6
y = (x.^2) .*(1+0.6* rand(1, length(x)));
p = polyfit(x,y ,2);
xp = -0.7:0.001:0.7;
plot(x,y,’.’,’markersize ’,5, ’color ’ ,[0, 0, 1],
xp ,polyval(p,xp),’linewidth ’,2,’color ’,’red ’)
grid minor;
xlabel(’X␣(m)’,’fontsize ’ ,20);
ylabel(’Y␣(m)’,’fontsize ’ ,20);
lgd = legend(’dados␣amostrados ’,’curva␣ajustada ’,’
location ’,’north ’,’color ’,’white ’);
set(lgd ,"fontsize", 15);
set (gca , "fontsize", 15)
46 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Gerando Gráficos Aperfeiçoados
Gerando Gráficos Aperfeiçoados
Resposta
47 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Criando Funções
Criando Funções
Exemplo de Código de Função
function [retval1 , retval2] = product_and_sum (input1 ,
input2)
retval1 = input1 .* input2;
retval2 = input1+input2;
end
48 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Utilizando Funções de Interação com Usuário e com Arquivos
Utilizando Funções de Interação com
Usuário e com Arquivos (Imprimindo
resultados na tela)
Código
a = 10;
fprintf (1, ’O␣projeto␣está␣funcionando ␣há␣%d␣anos!’,a);
Resultado
O projeto está funcionando há 10 anos
49 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Utilizando Funções de Interação com Usuário e com Arquivos
Imprimindo resultados em um arquivo
Código
fid=fopen(’arquivo.txt’);
a = 10;
fprintf(fid , ’O␣projeto␣está␣ funcionando␣há␣%d␣anos!’,a);
fclose(fid);
50 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Utilizando Funções de Interação com Usuário e com Arquivos
Solicitando informações do usuário
Código
distancia = input("Qual␣a␣distância␣em␣metros?");
continuar = yes_or_no("Deseja␣continuar?");
opcao = menu("título","opcao1","opcao2");
51 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Fazendo Depuração
Fazendo Depuração
Comando Descrição
keyboard quando colocado no código, permite acesso ao terminal e pausa execução
dbstep executa o comando da linha atual e vai para a próxima
dbcont executa o código até encontrar um breakpoint
dbstop sai do modo debug
dbup sobe um nível na árvore enquanto no modo debug
dbdown desce um nível na árvore enquanto no modo debug
debug_on_error(1) entra no modo debug automaticamente quando encontra erro
debug_on_warning(1) entra no modo debug automaticamente quando encontra warning
52 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Exercícios
Exercício 1
Utilize a função "randperm"como base para escolher aleatoriamente
um índice de um vetor. Use o help para descobrir como usar o
comando.
Exemplo:
Digamos que o vetor a = [1 2 4 5 10];
A cada iteração do seu comando/função, queremos que ele re-
torne aleatoriamente 1 dos itens contidos neste vetor a.
53 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Exercícios
Exercício 2
Escreva em um arquivo de texto: "Hello World. Today is "e
preencha com a data de hoje através do comando "date".
Exemplo:
"Hello World. Today is 14-Mar-2018!"
54 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Exercícios
Exercício 3
Crie os seguintes vetores:
A = [100,99,98, . . . , 2, 1];
B = [0,
1
99
,
2
99
, . . . 1]
OBS.: será interessante utilizar os operador ":"na construção deles
55 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Exercícios
Exercício 4
Plote um gráfico de uma onda senoidal de 0 até 4 milisegundos,
com frequência de 1 kHz e amplitude 5. Se a freqûencia estiver
certa, você deverá ver 4 periódos completos da onda. Faça o eixo
horizontal mostrar o tempo em milisegundos.
56 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Exercícios
Exercício 5
Faça um script que:
pergunte ao usuário:
Frequência;
Amplitude;
Offset;
plote o gráfico da onda resultante de forma que o eixo horizontal
mostre o tempo (e não o número de iterações) para 4 períodos da
onda.
57 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Solucionando problemas matemáticos
e de engenharia
Parte 2
58 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Encontrando zeros de polinômios
p(x) = x3
+ 2x2
+ x − 10
Código
c = [1, 2, -8, 2];
ans = roots (c)
Resultado
-4.080604400570926
1.809785920127422
0.2708184804435069
59 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Encontrando zeros de polinômios
p(x) = x3
+ 2x2
+ x − 10
Código
c = [1, 2, -8, 2];
roots_c = roots(c);
x= -5:0.01:3;
plot(x,polyval(c,x),’r’,’linewidth ’,2,
roots_c ,zeros (1 ,3),’ob’,’markersize ’ ,10)
grid on;
60 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Encontrando zeros de polinômios
Resultado
61 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Sistemas de Equações Li-
neares



2x + y + z = 180
x + 3y + 2z = 310
2x + y + 4z = 240
Colocar sistema de equações na forma A · x = b
Fazer a operação: x = A  b
62 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Sistemas de Equações Li-
neares



2x + y + z = 180
x + 3y + 2z = 310
2x + y + 4z = 240
Código
# Colocando na forma A*x = b,
A = [ 2 1 1;
1 3 2;
2 1 4]
b = [180; 310; 240];
ans = A  b; # equivalente a x = inv(A)*b
Resultado
42 % x
76 % y
20 % z
63 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Sistemas de Equações Li-
neares (exemplo 2)
a técnica A produz 9 peças por dia;
y = 9 · x;
a técnica B produz 12 peças por dia, mas demora 5 dias para iniciar
operações;
y = 12 · (x − 5)
Quanto tempo até a técnica B produzir mais peças que a 9?
64 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Sistemas de Equações Li-
neares (exemplo 2)
Técnica Peças/dia Atraso (dias) Equação Equação rearranjado
A 9 0 y = 9 · x −9 · x + y = 0
B 12 5 y = 12 · (x − 5) −12 + y = −60
Código
# Colocando na forma A*x = b,
A = [ -9, 1;
-12, 1];
b = [0; -60];
ans = A  b; # equivalente a x = inv(A)*b
Resultado
20 -> dias
180 -> peças
65 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
resolve equações na forma F(x) = 0
Uso: fsolve (fcn, x0)
Onde: fcn é uma função que deve aceitar um vetor com as
variáveis de entrada e retornar um vetor com os resultados de cada
equação x0 é o ponto inicial a ser testado (semente)
Exemplo:
{
y = ex
y = 4x
66 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
Visualizando o problema
x=0:0.01:1
plot(x,e.^x,
x,4*x)
grid minor;
Resultado
67 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
Forma 1: considere uma função única de resposta e minimize ela.
Código (função não-linear)
function y = fn(x)
a1 = e.^x;
a2 = 4*x;
y = abs(a1 -a2);
end
Código (Resolvendo)
ans = fsolve(@fn ,[0]);
Resultado
0.3574029558465378
68 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
Outra forma: considere as funções separadas, igualando elas a zero.
Código (função não-linear)
function f_to_minimize = fn2(x)
f_to_minimize (1) = e.^x(1) - x(2); % x(2) is our y
f_to_minimize (2) = 4*x(1) - x(2);
end
Código (Resolvendo)
ans = fsolve(@fn2 ,[0 ,0]);
Resultado
0.3574029292590725 1.42961171703629
69 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
(resistor e diodo)
Função não-linear baseada no circuito
function [y] = res_diode(x)
Vd=x(1); %x(1) é a tensão no diodo
Vsupply =5;
Id = 1.3e -15*(e^(Vd /0.026) -1); % corrente no diodo
Ir = (Vsupply -Vd)/1e3; %corrente no resistor (lei de ohm)
y = Id -Ir;
end
70 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
(resistor e diodo)
Código
ans = fsolve(@res_diode ,[0]);
Resultado
0.7492099696750156
71 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
(Topologia Bandgap)
72 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Resolvendo Equações Não-lineares
(Análise Bandgap)
73 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Algoritmos Genéticos
Pacote GA (Genetic Algorithm)
https://octave.sourceforge.io/ga/function/ga.html
Uso: [x,fval] = ga (fitnessfcn, nvars)
Uso: [x,fval] = ga (fitnessfcn, nvars, A, b, Aeq, beq,
LB, UB, nonlcon, options)
Onde:
fitnessfcn: função objetivo a minimizar
deve receber vetor com dimensão 1 por nvars;
deve retornar um valor escalar;
nvars: número de variáveis do problema
options: estrutura com os parâmetros da otimização (ver
gaoptimset)
74 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Algoritmos Genéticos
Função Custo Simples
function [y] = gafcn(x)
y = (x -5) .^2+200* sin (0.8* pi*x);
end
Plotando
x = -10:0.01:10;
plot(x,gafcn(x))
75 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Algoritmos Genéticos
Resolvendo com GA (sem mexer nas opções)
pkg load ga
ans = ga(@gafcn ,1)
Resultados
1.879939685790021
76 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Algoritmos Genéticos
Resolvendo com GA
pkg load ga
options = gaoptimset(’EliteCount ’,5,’Generations ’ ,10,’
PopulationSize ’ ,200,’CrossoverFraction ’ ,0.1); %
usualmente não utilizar CrossoverFraction tão baixo
LB = -10;
UB = 10;
ans = ga(@gafcn ,1 ,[] ,[] ,[] ,[] , LB , UB , [], options)
Resultados
4.375973901291995
77 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Simulated Annealing
Resolvendo com SA
pkg load optim
LB = -10;
UB = 10;
nt = 100; % número de reduções de temperatura
ns = 20; % iterações entre reduções
rt = 0.9; % fator de redução de temperatura
maxevals = 1000;
neps = 5;
functol = 1e -10;
paramtol = 1e -3;
verbosity = 1;
minarg = 1;
control = {LB ,UB ,nt ,ns ,rt ,maxevals ,neps ,functol ,paramtol ,
verbosity ,minarg}
ans = samin("gafcn" ,{1}, control)
78 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Simulated Annealing
Resultado
4.354602297872638
79 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle
Pacote "control"
Criar função de transferência:
s = tf(’função de transferência’)
Código
pkg load control
s = tf (’s’);
G = 1/(s+1); %modelo contínuo no tempo
80 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle
Código
pkg load control
num = [1];
den = [1 1];
s = tf(num ,den);
81 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle - Bode
Uso:
mostrar figura: bode (SYS)
retornar vetores: - [mag, pha, W] = bode(SYS)
Exemplo
pkg load control
num = [1];
den = [1 1];
s = tf(num ,den);
bode(s)
82 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle - Bode
Resultado
83 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle - Resposta ao Degrau
pkg load control
num = [1];
den = [1 1];
s = tf(num ,den);
step(s)
84 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle - Resposta ao Degrau
Resultado
85 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle - Resposta ao Impulso
Código
pkg load control
num = [1];
den = [1 1];
s = tf(num ,den);
impulse(s)
orgbabeleoe
86 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Solucionando problemas matemáticos e de engenharia
Controle - Resposta ao Impulso
Resultado
87 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Interagindo com programas externos e códigos em C++
system()
Utilizando o comando:
system(’nome do comando’)
é possível executar comandos de sistema externos ao Octave.
88 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Interagindo com programas externos e códigos em C++
Interagindo com programas em C++
baseado em https://octave.org/doc/v4.0.1/
Getting-Started-with-Oct_002dFiles.html
inclua a biblioteca «octave/oct.h>"no programa em C++
Código em C++
#include <octave/oct.h>
DEFUN_DLD (helloworld , args , nargout , "Hello␣World␣Help␣
String")
{
int nargin = args.length ();
octave_stdout << "Hello␣World␣has␣" << nargin << "␣
input␣arguments␣and␣" << nargout << "␣output␣
arguments .n";
return octave_value_list ();
}
89 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Interagindo com programas externos e códigos em C++
Interagindo com programas em C++
Compile o código utilizando "mkoctfile";
Compilação
mkoctfile helloworld.cc
90 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲
Interagindo com programas externos e códigos em C++
Interagindo com programas em C++
Como executar de dentro do Octave
a = helloworld (1,2,3);
91 / 91
Curso de GNU Octave / Matlab e Aplicações para Engenheiros
▲

Mais conteúdo relacionado

PDF
Soluções circuitos elétricos nilsson - 8ed (inglês)
PPT
Tabagismo
PDF
5ª ed introdução organização de computadores mario a. monteiro
PDF
Porque raiz 3 nos circuitos trifasicos
PPTX
Motores elétricos de ca
PDF
Aula 1 resultante de um sistema de forças
PDF
334028070 incropera-transferencia-de-calor-e-massa-7-edicao-apenas-respostas-...
PDF
Relatório colisões turma t5
Soluções circuitos elétricos nilsson - 8ed (inglês)
Tabagismo
5ª ed introdução organização de computadores mario a. monteiro
Porque raiz 3 nos circuitos trifasicos
Motores elétricos de ca
Aula 1 resultante de um sistema de forças
334028070 incropera-transferencia-de-calor-e-massa-7-edicao-apenas-respostas-...
Relatório colisões turma t5

Mais procurados (20)

PDF
Capítulo 5
PDF
Automacao hidraulica projetos_dimensiona_hr
PDF
Análise de circuitos elétricos teoria 2005
PDF
101545233 exercicios-resolvidos-de-sinais-e-sistemas
PDF
Introdução à mecânica dos fluidos 6ª ed. - robert w. fox; alan t. mc donald...
PDF
Exprsaõ logicas e tabela verdade exercicios
PPTX
GRAFCET.pptx
PDF
Mecânica vetorial para engenheiros (estática) 7ª edição beer
PDF
3 --retificadores
PDF
Tabela de defeitos e espectros
PDF
3. cálculo dos esforços em vigas
PDF
DET1 Simbologia Desenho Elétrico
PDF
Circuitos eletricos 1 - Circuitos Elétricos em Corrente Contínua
PDF
Tensão média e tensão eficaz
PPSX
Amplificador operacional
PPSX
Reações nucleares
PDF
Aula 24 trocadores-de-calor
PDF
#2 título e volume específico propriedades termodinâmica
PPTX
Arduino - iniciação à linguagem C (entradas analógica)
DOCX
Questoes resolvidas de termodinmica
Capítulo 5
Automacao hidraulica projetos_dimensiona_hr
Análise de circuitos elétricos teoria 2005
101545233 exercicios-resolvidos-de-sinais-e-sistemas
Introdução à mecânica dos fluidos 6ª ed. - robert w. fox; alan t. mc donald...
Exprsaõ logicas e tabela verdade exercicios
GRAFCET.pptx
Mecânica vetorial para engenheiros (estática) 7ª edição beer
3 --retificadores
Tabela de defeitos e espectros
3. cálculo dos esforços em vigas
DET1 Simbologia Desenho Elétrico
Circuitos eletricos 1 - Circuitos Elétricos em Corrente Contínua
Tensão média e tensão eficaz
Amplificador operacional
Reações nucleares
Aula 24 trocadores-de-calor
#2 título e volume específico propriedades termodinâmica
Arduino - iniciação à linguagem C (entradas analógica)
Questoes resolvidas de termodinmica
Anúncio

Semelhante a Course in GNU Octave / Matlab and Applications for Engineers (in Portuguese: "Curso de GNU Octave / Matlab e Aplicações para Engenheiros") (20)

PDF
Tutorial Octave Matlab
PDF
Curs omatlab52
PDF
Curso matlab
PDF
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
PDF
Programação para engenharia - aspectos teóricos e computacionais
PDF
Tutorial aed iii 005 - algoritmo de ordenação quicksort
PDF
Curso de Java #07 - Operadores (Parte 1)
PPT
Introdução à programação
PDF
Apostila matlab
PDF
Apostila 20 matlab
PDF
Paralelização de Algoritmo do Produto Escalar
PPTX
4-Introducao programacao-convertido.pptx
PDF
Aula6 programação
PDF
Apresentação Prof. Luis Fernando Martha e Rafael Rangel
PDF
Introdução ao Octave
PDF
Livro Métodos Numéricos: Exercícios Resolvidos
PDF
Cartilha de Octave para Matematica Computacional.pdf
PPTX
Introdução a Linguagem C.pptx [Reparado].pptx
PDF
Introdução à programação de computadores
ODT
Apostila clic2
Tutorial Octave Matlab
Curs omatlab52
Curso matlab
MC-102 — Aula 01 Introdução à Programação de Computadores.pdf
Programação para engenharia - aspectos teóricos e computacionais
Tutorial aed iii 005 - algoritmo de ordenação quicksort
Curso de Java #07 - Operadores (Parte 1)
Introdução à programação
Apostila matlab
Apostila 20 matlab
Paralelização de Algoritmo do Produto Escalar
4-Introducao programacao-convertido.pptx
Aula6 programação
Apresentação Prof. Luis Fernando Martha e Rafael Rangel
Introdução ao Octave
Livro Métodos Numéricos: Exercícios Resolvidos
Cartilha de Octave para Matematica Computacional.pdf
Introdução a Linguagem C.pptx [Reparado].pptx
Introdução à programação de computadores
Apostila clic2
Anúncio

Último (20)

PPTX
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
PDF
PROJETO DE PESQUISA PRONTO BIOMEDICINA 2025 ABNT.pdf
PPT
O gênero resumo O gênero resumo O gênero
PPTX
Apresentação de brainstorm geométrica colorida.pptx
PDF
Beige Dark Grey Vintage Victorian Project History Presentation_20250221_19084...
PDF
Aula 2 Normas Regulamentadoras (PARTE I).pdf
PPTX
Aula_Teorica_Estados limites de serviço no concreto armado.pptx
PPT
NR 18 Condições e Meio Ambiente de Trabalho na Indústria da Construção.ppt
PDF
ANTENA DIPOLO DOBRADO NOTA AULA 164 PROFESSOR ANGELO ANTONIO LEITHOLD.pdf
PPT
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
PPTX
Introdução à Agronomia - 5 fatos sobre a agronomia
PPT
1 - Introdução a disciplina ciencia o solo.ppt
PPT
Diagrama de fases de los aceros como material
PDF
TBSSMA_Tubarão_05_10_20 - SSMA.......pdf
PPTX
Aula_Semicondutortes_Diodos e LEDs_apresentação
PPTX
TR_Seguranca em Elevadores de Obras.pptx
PPTX
Aula 04 - Fisica teorica e experimental.pptx
PPT
Acidentes de trabalho e esposição riscovdfv
PDF
Projecto Fotovoltaico de um sistema de abastecimento de agua
PDF
Aula 12-13 e 14 - UC2 NR 23 Combate a Incêndios.pdf
Apresentação PF MACAVE no curso de mestrado em Ciencias florestais
PROJETO DE PESQUISA PRONTO BIOMEDICINA 2025 ABNT.pdf
O gênero resumo O gênero resumo O gênero
Apresentação de brainstorm geométrica colorida.pptx
Beige Dark Grey Vintage Victorian Project History Presentation_20250221_19084...
Aula 2 Normas Regulamentadoras (PARTE I).pdf
Aula_Teorica_Estados limites de serviço no concreto armado.pptx
NR 18 Condições e Meio Ambiente de Trabalho na Indústria da Construção.ppt
ANTENA DIPOLO DOBRADO NOTA AULA 164 PROFESSOR ANGELO ANTONIO LEITHOLD.pdf
DIFERENTES SINTOMAS E SINAIS DE PLANTAS.
Introdução à Agronomia - 5 fatos sobre a agronomia
1 - Introdução a disciplina ciencia o solo.ppt
Diagrama de fases de los aceros como material
TBSSMA_Tubarão_05_10_20 - SSMA.......pdf
Aula_Semicondutortes_Diodos e LEDs_apresentação
TR_Seguranca em Elevadores de Obras.pptx
Aula 04 - Fisica teorica e experimental.pptx
Acidentes de trabalho e esposição riscovdfv
Projecto Fotovoltaico de um sistema de abastecimento de agua
Aula 12-13 e 14 - UC2 NR 23 Combate a Incêndios.pdf

Course in GNU Octave / Matlab and Applications for Engineers (in Portuguese: "Curso de GNU Octave / Matlab e Aplicações para Engenheiros")

  • 1. Curso de GNU Octave / Matlab e Aplicações para Engenheiros Tiago Oliveira Weber 13 de março de 2018 1 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 2. TODO Introdução Apresentação do Professor Prof. Dr. Tiago Oliveira Weber Formação Formado em Engenharia Elétrica na Universidade Federal de Santa Maria (UFSM) Doutor em Microeletrônica pela Universidade de São Paulo (USP) Contato E-mail: tiago.weber@ufsc.br 2 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 3. TODO Introdução Palavras Iniciais Fazer tarefas complexas sem necessitar muitas linhas de código; Fazer protótipos iniciais sem se preocupar com detalhes de implementação de baixo nível; 3 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 4. TODO Introdução Conteúdo do Curso Parte 1 Conhecendo o GNU Octave e o Matlab Manipulando dados Condicionais e Laços Gerando Gráficos Utilizando Funções de Interação com Usuário Criando Funções Fazendo Depuração 4 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 5. TODO Introdução Conteúdo do Curso Parte 2 Solucionando problemas matemáticos e de engenharia Interagindo com programas externos e códigos em C++ Programas que deve estar instalado: GNU Octave (preferencialmente) ou Matlab. 5 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 6. Conhecendo o GNU Octave e o Matlab Conhecendo o GNU Octave e o Ma- tlab MATLAB (MAtrix LABoratory) É uma linguagem de programação de alto nivel com foco principal em cálculo com matrizes, processamento de sinais e elaboração de gráficos; Proprietário GNU Octave É uma linguagem de programação altamente compatível com o MATLAB; É open-source disponível sob a licença GNU General Public License (GPL); 6 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 7. Conhecendo o GNU Octave e o Matlab Algumas coisas que veremos 7 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 8. Conhecendo o GNU Octave e o Matlab Algumas coisas que veremos 8 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 9. Conhecendo o GNU Octave e o Matlab Algumas coisas que veremos 9 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 10. Conhecendo o GNU Octave e o Matlab Diferenças entre GNU Octave e Ma- tlab A maior parte das sintaxes que funcionam no Matlab, funcionam também no Octave; O contrário nem sempre é verdade. Ex.: Octave suporta auto-incremento e operadores atributivos: i++; ++i; i+=1;. . . Operador de negação no Octave pode ser ’~’ ou ’!’. No MATLAB, apenas ’~’. toolboxes do Matlab Vs pacotes do Octave; Simulink (Matlab) 10 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 11. Conhecendo o GNU Octave e o Matlab A Interface Abrindo o GNU Octave em modo gráfico em linha de comando octave octave --no-gui Abrindo o Matlab em modo gráfico em linha de comando matlab matlab -nojvm matlab -nodesktop 11 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 12. Conhecendo o GNU Octave e o Matlab Utilizando a Interface A partir de agora, trataremos mais diretamente o GNU Octave. No entanto, no Matlab a interface é similar. 12 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 13. Conhecendo o GNU Octave e o Matlab Utilizando a Interface utilizando o GNU Octave como calculadora 13 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 14. Conhecendo o GNU Octave e o Matlab Utilizando a Interface utilizando o GNU Octave como linguagem de programação usando o editor criando e executando scripts / pastas onde o GNU Octave busca os scripts 14 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 15. Conhecendo o GNU Octave e o Matlab O comando mais importante helpUso: help nome do comando 15 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 16. Manipulando dados Manipulando dados 16 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 17. Manipulando dados Manipulando dados (operações com variáveis) Código a = 5; b = 5; ans = a+b; Resposta 10 17 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 18. Manipulando dados Manipulando dados (somando vetores ou matrizes) Código a = [2 3]; b = [5 3]; ans = a+b; Resposta 7 6 18 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 19. Manipulando dados Manipulando dados (multiplicando matrizes) Número de linhas da matriz A deve ser igual ao número de colunas da matriz B. Código a = [2 3]; b = [3; 4]; ans = a*b; Dica: a função size() retorna o tamanho do vetor ou matriz em linhas e colunas. Resposta 18 19 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 20. Manipulando dados Manipulando dados (multiplicação ele- mento a elemento) As duas matrizes devem ter as mesmas dimensões. Código a = [2 3]; b = [3 4]; ans = a.*b; Resposta 6 12 20 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 21. Manipulando dados Manipulando dados (usando índices) Acessando valor dentro de vetor ou matriz Código a = [2 3]; ans = a(1); Resposta 2 Código a = [2 3 ; 4 5]; ans = a(2 ,1); Resposta 4 21 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 22. Manipulando dados Manipulando dados (concatenando vetores) Código a = [2 3]; b = [4 5]; ans = [a, b] Resposta 2 3 4 5 22 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 23. Manipulando dados Manipulando dados (concatenando vetores) Código a = [2 3]; b = [4 5]; ans = [a; b] Resposta 2 3 4 5 23 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 24. Manipulando dados Manipulando dados (concatenando vetores) Exercício de Fixação A partir das matrizes A = [1 2], B = [3 4], C = [5 6] e D = [7 8], crie a matriz [1 2 3 4; 5 6 7 8] 24 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 25. Manipulando dados Manipulando dados (concatenando strings) Concatenando strings Código nome1 = ’abra ’; nome2 = ’cadabra ’; ans = [nome1 nome2 ]; Resposta abracadabra 25 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 26. Manipulando dados Manipulando dados (criando vetores) Vetor de zeros Código ans = zeros (1 ,5); Resposta 0 0 0 0 0 26 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 27. Manipulando dados Manipulando dados (criando vetores) Vetor de um‘s Código ans = ones (1 ,5); Resposta 1 1 1 1 1 27 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 28. Manipulando dados Manipulando dados (criando vetores) Criar vetor a partir de valor inicial, passo, valor final Código ans = 1:2:10 Resposta 1 3 5 7 9 28 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 29. Manipulando dados Manipulando dados (filtrando vetor) Código a = 1:2:10 ans = a(a >4) Resposta 5 7 9 29 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 30. Manipulando dados Manipulando dados (filtrando vetor) Exercício de fixação Crie um vetor cujo primeiro valor é 5 e que vai com passo de 0.34 até 10; Filtre para mostrar apenas os valores maiores que 7 e menores que 8. Dica: Operador Descrição < menor > maior == igualdade & E lógico | OU lógico 30 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 31. Manipulando dados Manipulando dados (ruído) Vetor de ruído com distribuição uniforme entre 0 e 1 Código ans = rand (5 ,1); Resposta 0.9466231830112574 0.3971954845587051 0.3881668003776672 0.8331643428961854 0.8487496743216061 31 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 32. Manipulando dados Manipulando dados (ruído gaussiano) Vetor de ruído com distribuição gaussiana com média 10 e desvio padrão 1 Código ans = 10+ randn (5 ,1); Resposta 8.686011430552387 9.906951377379334 10.27421716044483 9.831624396829206 12.07251223204489 32 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 33. Condicionais e Laços Condicional (if) Código a = 5; if (a>3) b = ’Iei!’; else b = ’Wow!’; end ans = b; Resposta Iei! 33 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 34. Condicionais e Laços Condicional (switch) Código yesno = "yes" switch yesno case {"yes" "y"} value = 1; case {"no" "n"} value = 0; otherwise value = -1; endswitch ans = value; Resposta 1 34 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 35. Condicionais e Laços Loop (for) Código for a=1:5 x(a) = a.^2; end ans = x; Resposta 1 4 9 16 25 35 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 36. Condicionais e Laços Loop (for) Código a = [2 4 6 2 5] for i=1: length(a) x(i) = a(i).^2; end ans = x; Resposta 4 16 36 4 25 36 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 37. Condicionais e Laços Loop (while) Código i = 1; while (i <6) x(i) = i.^2; i=i+1; end ans = x; Resposta 1 4 9 16 25 37 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 38. Gerando Gráficos Gerando Gráficos 38 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 39. Gerando Gráficos Gerando Gráficos Código t = 0:0.01:1; y = sin (2* pi*t); plot(t,y) Resposta 39 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 40. Gerando Gráficos Gerando Gráficos Código t = 0:0.01:1; y = sin (2* pi*t); plot(t,y,’*r’) xlabel(’tempo ’); ylabel(’tensao ’); Resposta 40 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 41. Gerando Gráficos Gerando Gráficos (histograma) Código y = 10+ randn (1 ,10000); hist(y) Resposta 41 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 42. Gerando Gráficos Aperfeiçoados Gerando Gráficos Aperfeiçoados (preâmbulo) Código x = -0.6:0.01:0.6 y = (x.^2) .*(1+0.6* rand(1, length(x))); plot(x,y,’.’) xlabel(’X’); ylabel(’Y’); legend(’dados␣amostrados ’) 42 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 43. Gerando Gráficos Aperfeiçoados Gerando Gráficos Aperfeiçoados (preâmbulo) Resposta 43 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 44. Gerando Gráficos Aperfeiçoados Gerando Gráficos Aperfeiçoados (preâmbulo 2) Código x = -0.6:0.01:0.6 y = (x.^2) .*(1+0.6* rand(1, length(x))); p = polyfit(x,y ,2); % faz o fitting da curva para polinômio de segunda ordem xp = -0.7:0.001:0.7; plot(x,y,’.’, xp ,polyval(p,xp)); xlabel(’X’); ylabel(’Y’); legend(’dados␣ amostrados ’) 44 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 45. Gerando Gráficos Aperfeiçoados Gerando Gráficos Aperfeiçoados (preâmbulo 2) Resposta 45 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 46. Gerando Gráficos Aperfeiçoados Gerando Gráficos Aperfeiçoados Código x = -0.6:0.01:0.6 y = (x.^2) .*(1+0.6* rand(1, length(x))); p = polyfit(x,y ,2); xp = -0.7:0.001:0.7; plot(x,y,’.’,’markersize ’,5, ’color ’ ,[0, 0, 1], xp ,polyval(p,xp),’linewidth ’,2,’color ’,’red ’) grid minor; xlabel(’X␣(m)’,’fontsize ’ ,20); ylabel(’Y␣(m)’,’fontsize ’ ,20); lgd = legend(’dados␣amostrados ’,’curva␣ajustada ’,’ location ’,’north ’,’color ’,’white ’); set(lgd ,"fontsize", 15); set (gca , "fontsize", 15) 46 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 47. Gerando Gráficos Aperfeiçoados Gerando Gráficos Aperfeiçoados Resposta 47 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 48. Criando Funções Criando Funções Exemplo de Código de Função function [retval1 , retval2] = product_and_sum (input1 , input2) retval1 = input1 .* input2; retval2 = input1+input2; end 48 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 49. Utilizando Funções de Interação com Usuário e com Arquivos Utilizando Funções de Interação com Usuário e com Arquivos (Imprimindo resultados na tela) Código a = 10; fprintf (1, ’O␣projeto␣está␣funcionando ␣há␣%d␣anos!’,a); Resultado O projeto está funcionando há 10 anos 49 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 50. Utilizando Funções de Interação com Usuário e com Arquivos Imprimindo resultados em um arquivo Código fid=fopen(’arquivo.txt’); a = 10; fprintf(fid , ’O␣projeto␣está␣ funcionando␣há␣%d␣anos!’,a); fclose(fid); 50 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 51. Utilizando Funções de Interação com Usuário e com Arquivos Solicitando informações do usuário Código distancia = input("Qual␣a␣distância␣em␣metros?"); continuar = yes_or_no("Deseja␣continuar?"); opcao = menu("título","opcao1","opcao2"); 51 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 52. Fazendo Depuração Fazendo Depuração Comando Descrição keyboard quando colocado no código, permite acesso ao terminal e pausa execução dbstep executa o comando da linha atual e vai para a próxima dbcont executa o código até encontrar um breakpoint dbstop sai do modo debug dbup sobe um nível na árvore enquanto no modo debug dbdown desce um nível na árvore enquanto no modo debug debug_on_error(1) entra no modo debug automaticamente quando encontra erro debug_on_warning(1) entra no modo debug automaticamente quando encontra warning 52 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 53. Exercícios Exercício 1 Utilize a função "randperm"como base para escolher aleatoriamente um índice de um vetor. Use o help para descobrir como usar o comando. Exemplo: Digamos que o vetor a = [1 2 4 5 10]; A cada iteração do seu comando/função, queremos que ele re- torne aleatoriamente 1 dos itens contidos neste vetor a. 53 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 54. Exercícios Exercício 2 Escreva em um arquivo de texto: "Hello World. Today is "e preencha com a data de hoje através do comando "date". Exemplo: "Hello World. Today is 14-Mar-2018!" 54 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 55. Exercícios Exercício 3 Crie os seguintes vetores: A = [100,99,98, . . . , 2, 1]; B = [0, 1 99 , 2 99 , . . . 1] OBS.: será interessante utilizar os operador ":"na construção deles 55 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 56. Exercícios Exercício 4 Plote um gráfico de uma onda senoidal de 0 até 4 milisegundos, com frequência de 1 kHz e amplitude 5. Se a freqûencia estiver certa, você deverá ver 4 periódos completos da onda. Faça o eixo horizontal mostrar o tempo em milisegundos. 56 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 57. Exercícios Exercício 5 Faça um script que: pergunte ao usuário: Frequência; Amplitude; Offset; plote o gráfico da onda resultante de forma que o eixo horizontal mostre o tempo (e não o número de iterações) para 4 períodos da onda. 57 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 58. Solucionando problemas matemáticos e de engenharia Solucionando problemas matemáticos e de engenharia Parte 2 58 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 59. Solucionando problemas matemáticos e de engenharia Encontrando zeros de polinômios p(x) = x3 + 2x2 + x − 10 Código c = [1, 2, -8, 2]; ans = roots (c) Resultado -4.080604400570926 1.809785920127422 0.2708184804435069 59 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 60. Solucionando problemas matemáticos e de engenharia Encontrando zeros de polinômios p(x) = x3 + 2x2 + x − 10 Código c = [1, 2, -8, 2]; roots_c = roots(c); x= -5:0.01:3; plot(x,polyval(c,x),’r’,’linewidth ’,2, roots_c ,zeros (1 ,3),’ob’,’markersize ’ ,10) grid on; 60 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 61. Solucionando problemas matemáticos e de engenharia Encontrando zeros de polinômios Resultado 61 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 62. Solucionando problemas matemáticos e de engenharia Resolvendo Sistemas de Equações Li- neares    2x + y + z = 180 x + 3y + 2z = 310 2x + y + 4z = 240 Colocar sistema de equações na forma A · x = b Fazer a operação: x = A b 62 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 63. Solucionando problemas matemáticos e de engenharia Resolvendo Sistemas de Equações Li- neares    2x + y + z = 180 x + 3y + 2z = 310 2x + y + 4z = 240 Código # Colocando na forma A*x = b, A = [ 2 1 1; 1 3 2; 2 1 4] b = [180; 310; 240]; ans = A b; # equivalente a x = inv(A)*b Resultado 42 % x 76 % y 20 % z 63 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 64. Solucionando problemas matemáticos e de engenharia Resolvendo Sistemas de Equações Li- neares (exemplo 2) a técnica A produz 9 peças por dia; y = 9 · x; a técnica B produz 12 peças por dia, mas demora 5 dias para iniciar operações; y = 12 · (x − 5) Quanto tempo até a técnica B produzir mais peças que a 9? 64 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 65. Solucionando problemas matemáticos e de engenharia Resolvendo Sistemas de Equações Li- neares (exemplo 2) Técnica Peças/dia Atraso (dias) Equação Equação rearranjado A 9 0 y = 9 · x −9 · x + y = 0 B 12 5 y = 12 · (x − 5) −12 + y = −60 Código # Colocando na forma A*x = b, A = [ -9, 1; -12, 1]; b = [0; -60]; ans = A b; # equivalente a x = inv(A)*b Resultado 20 -> dias 180 -> peças 65 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 66. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares resolve equações na forma F(x) = 0 Uso: fsolve (fcn, x0) Onde: fcn é uma função que deve aceitar um vetor com as variáveis de entrada e retornar um vetor com os resultados de cada equação x0 é o ponto inicial a ser testado (semente) Exemplo: { y = ex y = 4x 66 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 67. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares Visualizando o problema x=0:0.01:1 plot(x,e.^x, x,4*x) grid minor; Resultado 67 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 68. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares Forma 1: considere uma função única de resposta e minimize ela. Código (função não-linear) function y = fn(x) a1 = e.^x; a2 = 4*x; y = abs(a1 -a2); end Código (Resolvendo) ans = fsolve(@fn ,[0]); Resultado 0.3574029558465378 68 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 69. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares Outra forma: considere as funções separadas, igualando elas a zero. Código (função não-linear) function f_to_minimize = fn2(x) f_to_minimize (1) = e.^x(1) - x(2); % x(2) is our y f_to_minimize (2) = 4*x(1) - x(2); end Código (Resolvendo) ans = fsolve(@fn2 ,[0 ,0]); Resultado 0.3574029292590725 1.42961171703629 69 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 70. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares (resistor e diodo) Função não-linear baseada no circuito function [y] = res_diode(x) Vd=x(1); %x(1) é a tensão no diodo Vsupply =5; Id = 1.3e -15*(e^(Vd /0.026) -1); % corrente no diodo Ir = (Vsupply -Vd)/1e3; %corrente no resistor (lei de ohm) y = Id -Ir; end 70 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 71. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares (resistor e diodo) Código ans = fsolve(@res_diode ,[0]); Resultado 0.7492099696750156 71 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 72. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares (Topologia Bandgap) 72 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 73. Solucionando problemas matemáticos e de engenharia Resolvendo Equações Não-lineares (Análise Bandgap) 73 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 74. Solucionando problemas matemáticos e de engenharia Algoritmos Genéticos Pacote GA (Genetic Algorithm) https://octave.sourceforge.io/ga/function/ga.html Uso: [x,fval] = ga (fitnessfcn, nvars) Uso: [x,fval] = ga (fitnessfcn, nvars, A, b, Aeq, beq, LB, UB, nonlcon, options) Onde: fitnessfcn: função objetivo a minimizar deve receber vetor com dimensão 1 por nvars; deve retornar um valor escalar; nvars: número de variáveis do problema options: estrutura com os parâmetros da otimização (ver gaoptimset) 74 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 75. Solucionando problemas matemáticos e de engenharia Algoritmos Genéticos Função Custo Simples function [y] = gafcn(x) y = (x -5) .^2+200* sin (0.8* pi*x); end Plotando x = -10:0.01:10; plot(x,gafcn(x)) 75 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 76. Solucionando problemas matemáticos e de engenharia Algoritmos Genéticos Resolvendo com GA (sem mexer nas opções) pkg load ga ans = ga(@gafcn ,1) Resultados 1.879939685790021 76 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 77. Solucionando problemas matemáticos e de engenharia Algoritmos Genéticos Resolvendo com GA pkg load ga options = gaoptimset(’EliteCount ’,5,’Generations ’ ,10,’ PopulationSize ’ ,200,’CrossoverFraction ’ ,0.1); % usualmente não utilizar CrossoverFraction tão baixo LB = -10; UB = 10; ans = ga(@gafcn ,1 ,[] ,[] ,[] ,[] , LB , UB , [], options) Resultados 4.375973901291995 77 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 78. Solucionando problemas matemáticos e de engenharia Simulated Annealing Resolvendo com SA pkg load optim LB = -10; UB = 10; nt = 100; % número de reduções de temperatura ns = 20; % iterações entre reduções rt = 0.9; % fator de redução de temperatura maxevals = 1000; neps = 5; functol = 1e -10; paramtol = 1e -3; verbosity = 1; minarg = 1; control = {LB ,UB ,nt ,ns ,rt ,maxevals ,neps ,functol ,paramtol , verbosity ,minarg} ans = samin("gafcn" ,{1}, control) 78 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 79. Solucionando problemas matemáticos e de engenharia Simulated Annealing Resultado 4.354602297872638 79 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 80. Solucionando problemas matemáticos e de engenharia Controle Pacote "control" Criar função de transferência: s = tf(’função de transferência’) Código pkg load control s = tf (’s’); G = 1/(s+1); %modelo contínuo no tempo 80 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 81. Solucionando problemas matemáticos e de engenharia Controle Código pkg load control num = [1]; den = [1 1]; s = tf(num ,den); 81 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 82. Solucionando problemas matemáticos e de engenharia Controle - Bode Uso: mostrar figura: bode (SYS) retornar vetores: - [mag, pha, W] = bode(SYS) Exemplo pkg load control num = [1]; den = [1 1]; s = tf(num ,den); bode(s) 82 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 83. Solucionando problemas matemáticos e de engenharia Controle - Bode Resultado 83 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 84. Solucionando problemas matemáticos e de engenharia Controle - Resposta ao Degrau pkg load control num = [1]; den = [1 1]; s = tf(num ,den); step(s) 84 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 85. Solucionando problemas matemáticos e de engenharia Controle - Resposta ao Degrau Resultado 85 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 86. Solucionando problemas matemáticos e de engenharia Controle - Resposta ao Impulso Código pkg load control num = [1]; den = [1 1]; s = tf(num ,den); impulse(s) orgbabeleoe 86 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 87. Solucionando problemas matemáticos e de engenharia Controle - Resposta ao Impulso Resultado 87 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 88. Interagindo com programas externos e códigos em C++ system() Utilizando o comando: system(’nome do comando’) é possível executar comandos de sistema externos ao Octave. 88 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 89. Interagindo com programas externos e códigos em C++ Interagindo com programas em C++ baseado em https://octave.org/doc/v4.0.1/ Getting-Started-with-Oct_002dFiles.html inclua a biblioteca «octave/oct.h>"no programa em C++ Código em C++ #include <octave/oct.h> DEFUN_DLD (helloworld , args , nargout , "Hello␣World␣Help␣ String") { int nargin = args.length (); octave_stdout << "Hello␣World␣has␣" << nargin << "␣ input␣arguments␣and␣" << nargout << "␣output␣ arguments .n"; return octave_value_list (); } 89 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 90. Interagindo com programas externos e códigos em C++ Interagindo com programas em C++ Compile o código utilizando "mkoctfile"; Compilação mkoctfile helloworld.cc 90 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲
  • 91. Interagindo com programas externos e códigos em C++ Interagindo com programas em C++ Como executar de dentro do Octave a = helloworld (1,2,3); 91 / 91 Curso de GNU Octave / Matlab e Aplicações para Engenheiros ▲