Você está na página 1de 170

Promovendo a educação profissional, científica e tecnológica

Técnicas de Programação
(SUP.0980)

Instituto Federal do Maranhão – Campus MCT

Prof. Rodrigo Albuquerque


Técnicas de
programação

Informações iniciais

➢ A disciplina obedecerá, rigorosamente, o regimento pedagógico do


IFMA;

➢ Assiduidade, mesmo que remota, é condição indispensável;

➢ Cada horário terá uma duração máxima entre 30 e 35 minutos;

➢ É imprescindível a instalação do software SCILAB ou MATLAB


(licenciado);

➢ Avaliação: 5 provas discursivas (desenvolvimento de código e/ou


algoritmo para a solução de uma situação-problema) e trabalhos para
complemento da nota (atividades assíncronas);

1°Prova – 16/10 2°Prova – 18/11 3°Prova – 21/12


Reposição – 23/12 Final – 28/12
•2
Técnicas de
programação

Sumário
1. Breve introdução aos softwares SCILAB e MATLAB;
2. Declaração de matrizes e vetores;
3. Funções matemáticas básicas;
4. Principais operadores;
5. Estruturas de decisão condicional e de repetição;
6. Estruturas de controle e de seleção através de flags;
7. Criação de Functions dedicadas;
8. Programação recursiva;
9. Exemplos gerais;
10.Exemplos a serem resolvidos;
11.Desenvolvimento de códigos e algoritmos para aplicações em engenharia
elétrica
➢ Processamento digital de sinal;
➢ Cálculo de grandezas elétricas;
➢ Representação fasorial e a Transformada Discreta de Fourier (TDF);
➢ Regressão linear;
➢ Componentes simétricas. •3
Técnicas de
programação

•4
Técnicas de
programação

SCILAB

O Scilab é um software de computação numérica de código aberto (Licença GPL), baseado em


manipulações matriciais, que vem sendo utilizado por uma comunidade crescente. Segundo
seu fabricante, mais de 100.000 downloads são realizados por mês.

Fonte: www.scilab.org
•5
Técnicas de
programação

SCILAB

Principais janelas

Fonte: www.scilab.org •6
Técnicas de
programação

SCILAB

Editor de texto

•7
Técnicas de
programação

MATLAB
Matlab (Matrix Laboratory) é um software de computação numérica que permite, dentre suas
várias funcionalidades, manipulações matriciais, plotagem gráfica de funções e dados,
implementação de códigos e algoritmos e criação de interfaces gráficas.

Fonte: www.mathworks.com •8
Técnicas de
programação

MATLAB

Principais janelas

•9
Técnicas de
programação

MATLAB/SIMULINK
Sistema Eólico e Fotovoltaico Híbrido

Fonte: www.mathworks.com

• 10
Técnicas de
programação

MATLAB/SIMULINK
Sistema Eólico e Fotovoltaico Híbrido

Fonte: www.mathworks.com

• 11
Técnicas de
programação

MATLAB/SIMULINK
Modelagem de veículo elétrico híbrido (HEV)

Fonte: www.mathworks.com
• 12
Técnicas de
programação

MATLAB/SIMULINK
Simulação V2G (Vehicle to Grid)

Fonte: www.mathworks.com
• 13
Técnicas de
programação

SCILAB e MATLAB

• 14
Técnicas de
programação

• 15
Técnicas de
programação

Introdução

➢ O desenvolvimento de códigos computacionais e algoritmos


iterativos pode ser facilitado se o usuário conhecer sintaxes de
linguagem e comandos baseados em operações matriciais e suas
extensões. Portanto, o usuário deve dominar conceitos matriciais
básicos, definições, operações, relações, propriedades e aplicações.

➢ Na sua forma mais simples, uma matriz é um conjunto de números ou


elementos arranjados em linhas horizontais e colunas verticais. Cada
linha ou coluna de uma matriz pode ser chamada de vetor.

➢ Uma matriz com m linhas e n colunas é denotada como sendo m×n,


cuja representação indica seu tamanho ou dimensão.

➢ Os elementos de uma matriz são indexados. O objetivo da indexação


é facilitar a identificação de cada elemento por meio de subscritos.
• 16
Técnicas de
programação

Introdução
➢ Quando m=n (número de linhas igual ao de colunas), a matriz é
denominada como sendo quadrada. É de suma importância salientar
que esse tipo de matriz é frequentemente usada no desenvolvimento
de códigos e/ou algoritmos para modelagem de sistemas físicos
representados por um conjunto de n equações simultâneas, com n
variáveis desconhecidas.

➢ Em suma, um sistema de equações lineares simultâneas pode ser


expresso usando a notação matricial, sendo empregada a álgebra
matricial na sua solução.

Existe outra razão para se estudar matrizes no âmbito da programação?

• 17
Técnicas de
programação

Introdução
➢ Quando m=n (número de linhas igual ao de colunas), a matriz é
denominada como sendo quadrada. É de suma importância salientar
que esse tipo de matriz é frequentemente usada no desenvolvimento
de códigos e/ou algoritmos para modelagem de sistemas físicos
representados por um conjunto de n equações simultâneas, com n
variáveis desconhecidas.

➢ Em suma, um sistema de equações lineares simultâneas pode ser


expresso usando a notação matricial, sendo empregada a álgebra
matricial na sua solução.

Existe outra razão para se estudar matrizes no âmbito da programação?


Sim, e a resposta para esse questionamento é simples, haja vista que dados são
frequentemente organizados em tabelas ou banco de dados, onde os elementos
podem ser facilmente identificados por um ou mais subscritos, tornando a matriz
uma forma natural de organizar, apresentar ou representar dados e suas relações.

• 18
Técnicas de
programação

Declaração clássica
➢ A declaração de matrizes e vetores no Console do SCILAB ou no
Command Window do MATLAB deve ser feita através do emprego de
colchetes:

−→ 𝐴 = 1 2 3 4
𝐴= 1234

−→ 𝐵 = 1 2; 3 4
1 2
𝐵=
3 4
−→ 𝐶 = 5 9; 1 7
5 9
𝐶=
1 7
• 19
Técnicas de
programação

Declaração clássica
➢ A declaração de matrizes e vetores no Console do SCILAB ou no
Command Window do MATLAB deve ser feita através do emprego de
colchetes:

−→ 𝐴 = 1 2 3 4 Subscritos

𝐴= 1234 𝐴(1,1) = 1 𝐴(1,2) = 2 𝐴(1,3) = 3 𝐴(1,4) = 4

−→ 𝐵 = 1 2; 3 4
1 2
𝐵= 𝐵(1,1) = 1 𝐵(1,2) = 2 𝐴(2,1) = 3 𝐵(2,2) = 4
3 4
−→ 𝐶 = 5 9; 1 7
5 9
𝐶= 𝐶(1,1) = 5 𝐶(1,2) = 9 𝐶(2,1) = 1 𝐶(2,2) = 7
1 7
• 20
Técnicas de
programação

Declaração clássica
➢ A declaração de matrizes e vetores no Console do SCILAB ou no
Command Window do MATLAB deve ser feita através do emprego de
colchetes:

−→ 𝐴 = 1 2 3 4 Subscritos

𝐴= 1234 𝐴(1,1) = 1 𝐴(1,2) = 2 𝐴(1,3) = 3 𝐴(1,4) = 4

−→ 𝐵 = 1 2; 3 4
1 2
𝐵= 𝐵(1,1) = 1 𝐵(1,2) = 2 𝐴(2,1) = 3 𝐵(2,2) = 4
3 4
Ponto e vírgula (;) determina
−→ 𝐶 = 5 9; 1 7 as linhas de uma matriz

5 9
𝐶= 𝐶(1,1) = 5 𝐶(1,2) = 9 𝐶(2,1) = 1 𝐶(2,2) = 7
1 7
• 21
Técnicas de
programação

Declaração clássica

−→ 𝐴 = 7 8 1 ;
−→ 𝐵 = 3 5 9 ;
−→ 𝐶 = 2 4 6 ;
−→ 𝐷 = 𝐶 𝐵 𝐴
𝐷 = 246359781
−→ 𝐸 = 𝐴 𝐵 𝐶
𝐸 = 781359246
−→ 𝐹 = 𝐴; 𝐵; 𝐶
7 8 1
𝐹= 3 5 9
2 4 6 • 22
Técnicas de
programação

Declaração clássica
Subscritos
−→ 𝐴 = 7 8 1 ;
𝐷(1,1) = 2 𝐷(1,2) = 4 𝐷(1,3) = 6
−→ 𝐵 = 3 5 9 ;
𝐷(1,4) = 3 𝐷(1,5) = 5 𝐷(1,6) = 9
−→ 𝐶 = 2 4 6 ; 𝐷(1,7) = 7 𝐷(1,8) = 8 𝐷(1,9) = 1
−→ 𝐷 = 𝐶 𝐵 𝐴
𝐸(1,1) = 7 𝐸(1,2) = 8 𝐸(1,3) = 1
𝐷 = 246359781
𝐸(1,4) = 3 𝐸(1,5) = 5 𝐸(1,6) = 9
−→ 𝐸 = 𝐴 𝐵 𝐶
𝐸(1,7) = 2 𝐸(1,8) = 4 𝐸(1,9) = 6
𝐸 = 781359246
−→ 𝐹 = 𝐴; 𝐵; 𝐶 𝐹(1,1) = 7 𝐹(1,2) = 8 𝐹(1,3) = 1
7 8 1 𝐹(2,1) = 3 𝐹(2,2) = 5 𝐹(2,3) = 9
𝐹= 3 5 9 𝐹(3,1) = 2 𝐹(3,2) = 4 𝐹(3,3) = 6
2 4 6 • 23
Técnicas de
programação Declaração de vetores
linearmente espaçados

➢ Pode-se declarar vetores linearmente espaçados de duas formas:

1) Declaração convencional
−→ 𝐴 = 1: 1: 10
Vetor linearmente espaçado de 1 unidade
𝐴 = 1 2 3 4 5 6 7 8 9 10 no intervalo fechado de 1 a 10

−→ 𝐵 = 1: 0.5: 5
Vetor
Vetorlinearmente
linearmenteespaçado
espaçadodede0.50,5 no
𝐵 = 1 1.5 2 2.5 3 3.5 4 4.5 5 no intervalo fechado do
de de
1 a 15.a 5

−→ 𝐶 = 3: −0.1: 2
Vetor linearmente espaçado de -0.1
𝐶 = 3 2.9 2.8 2.7 2.6 2.5 2.4 2.3 2.2 2.1 2 no intervalo fechado de 3 a 2
2) Declaração usando a função linspace
Vetor com 11 elementos linearmente
−→ 𝐷 = 𝑙𝑖𝑛𝑠𝑝𝑎𝑐𝑒(1,2,11) espaçados no intervalo
fechado de 1 a 2
𝐷 = 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2
• 24
Técnicas de
programação

Funções matriciais clássicas

Funções usadas para extrair informações e/ou criar matrizes e


vetores específicos.

Função Retorno
Retorna um vetor linha cujos elementos representam a
size(A) dimensão da matriz genérica A (idem para vetor)
det(A) Retorna o determinante de um matriz quadrada genérica A

length(A) Retorna o comprimento de um vetor genérico A


Retorna uma matriz de elementos unitários de dimensão
ones(m,n) mxn (idem para vetor)
Retorna uma matriz de elementos nulos de dimensão mxn
zeros(m,n) (idem para vetor)
eye(m,m) Retorna uma matriz identidade de dimensão mxm
Retorna uma matriz de elementos aleatórios com
rand(m,n) dimensão mxn

• 25
Técnicas de
programação

Funções matriciais clássicas

Funções usadas para extrair informações e/ou criar matrizes e


vetores específicos.

Função Retorno
inv(A) Retorna a matriz inversa da matriz quadrada genérica A
Retorna a matriz transposta da matriz genérica A
A’ (idem para vetor)
Retorna a soma dos elementos da diagonal principal de
trace(A) uma matriz quadrada genérica A
lu(A) Retorna a fatorização LU de uma matriz genérica A
Retorna a decompisção de Cholesky de uma matriz
chol(A) genérica A
Retorna a decomposição triangular ortogonal de uma
qr(A) matriz genérica A
Retorna a decomposição em valores singulares de uma
svd(A) matriz genérica A

• 26
Técnicas de
programação

• 27
Técnicas de
programação

Funções clássicas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


exp exponencial exp(2) 7.3890561
log logaritmo natural log(0.5) -0.6931472
log2 logaritmo base 2 log2(4) 2
logaritmo base
log10 10
log10(1000) 3

sqrt Raiz quadrada sqrt(121) 11


^ potência 10^2 100

• 28
Técnicas de
programação

Funções trigonométricas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


sin seno (radiano) sin(2*pi/3) 0.8660254
sind seno (grau) sind(45) 0.7071067
cos cosseno (radiano) cos(pi) -1
cosd cosseno (grau) cosd(120) -0.5
tan tangente (radiano) tan(pi/10) 0.3249197
tand tangente (grau) tand(70) 2.7474774
seno cardinal
sinc (radiano)
sinc(pi/2) 0.6366198

• 29
Técnicas de
programação

Funções trigonométricas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


secante
sec (radiano)
sec(pi/5) 1.236068

secante
secd (grau)
secd(20) 1.0641778

cossecante
csc (radiano)
cos(pi/9) 2.9238044

cossecante
cscd (grau)
cosd(10) 5.7587705

cotangente
cotg (radiano)
cotg(pi/25) 7.9158151

cotangente
cotd (grau)
cotd(30) 1.7320508

• 30
Técnicas de
programação

Funções trigonométricas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


arco-seno
asin (radiano)
asin(pi/30) 0.1049121

asind arco-seno (grau) asind(0.5) 30


arco-cosseno
acos (radiano)
acos(pi/18) 1.3953649

arco-cosseno
acosd (graus)
acosd(-0.5) 120

Arco-tangente
atan (radiano)
atan(pi/45) 0.0697001

Arco-tangente
atand (grau)
atand(1) 45

• 31
Técnicas de
programação

Funções trigonométricas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


sinh seno hiperbólico sinh(pi) 11.548739
cosh cosseno hiperbólico cosh(pi/3) 1.6002869
tanh tangente hiperbólica tanh(pi) 0.9962721
cotangente
coth hiperbólica
coth(pi) 1.0037419

sech secante hiperbólica sech(pi/30) 0.9945418


cossecante
csch hiperbólica
csch(pi/45) 14.312316

• 32
Técnicas de
programação

Funções trigonométricas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


arco-seno
asinh hiperbólico
asinh(pi) 1.8622957

arco-cosseno
acosh hiperbólico
acosh(pi) 1.8115263

arco-tangente
atanh hiperbólico
atanh(pi) 0.329 + 1.570i

arco-cotangente
acoth hiperbólico
acoth(pi) 0.3297653

Arco-secante
asech hiperbólico
asech(pi) 1.2468502i

Arco-cossecante
acsch hiperbólico
acsch(pi) 0.3131659

• 33
Técnicas de
programação

Funções complexas

Funções para cálculos matemáticos simples e complexos envolvendo


quantidades reais, complexas, vetores e matrizes.

Função Descrição Exemplo Retorno


x=3+2i,
abs Magnitude
abs(x)
3.6055513

Parte z=20+8i,
imag imaginária imag(z)
8

x=4+3i,
real Parte real
real(x)
4
MATLAB
ângulo y=8-5i,
angle (radiano) angle(y)
-0.5586

Ângulo
SCILAB
atan(imag(x),real(x)) x=0+5i 1.5707963
(radiano)

• 34
Técnicas de
programação

• 35
Técnicas de
programação

Operadores aritméticos clássicos

Operadores utilizados em cálculos matemáticos simples e complexos


envolvendo quantidades reais, complexas, vetores e matrizes.

Operador Descrição Exemplo Retorno


+ Soma A=3, B=2, A+B 5
- Subtração A=-3, B=2, A-B -5
* Multiplicação A=-3, B=2, A*B -6
Divisão à
\ A=2, B=6, A\B 3
esquerda
/ Divisão à direita A=5, B=2, A/B 2,5
^ Exponenciação A=3, A^2 9

• 36
Técnicas de
programação

Operadores aritméticos clássicos

2 5 7 −5 1 −1
𝐴= 1 6 3 𝐵 = −2 2 5 𝐴 + 𝐵 =?
6 7 2 −7 2 −1

4 9 4 1 2 2
𝐴= 8 6 5 𝐵= 8 5 4 𝐴 − 𝐵 =?
7 9 2 2 2 1

1 2 3 9 8 7
𝐴= 4 5 6 𝐵= 6 5 4 𝐴 ∗ 𝐵 =?
7 8 9 3 2 1

• 37
Técnicas de
programação

Operadores aritméticos clássicos

2 5 7 −5 1 −1 −3 6 6
𝐴= 1 6 3 𝐵 = −2 2 5 𝐴 + 𝐵 → −1 8 8
6 7 2 −7 2 −1 −1 9 1

4 9 4 1 2 2 3 7 2
𝐴= 8 6 5 𝐵= 8 5 4 𝐴−𝐵 → 0 1 1
7 9 2 2 2 1 5 7 1

1 2 3 9 8 7 30 24 18
𝐴= 4 5 6 𝐵= 6 5 4 𝐴 ∗ 𝐵 → 84 69 54
7 8 9 3 2 1 138 114 90

• 38
Técnicas de
programação

Operadores aritméticos clássicos

2 5 7 5 1 1
𝐴= 1 6 3 𝐵= 2 2 5 𝐴\𝐵 = 𝐴−1 ∗ 𝐵 =?
6 7 2 7 2 1

2 5 7 5 1 1
𝐴= 1 6 3 𝐵= 2 2 5 𝐴/𝐵 = 𝐴 ∗ 𝐵 −1 =?
6 7 2 7 2 1

9 8 7
𝐴= 6 8 4 𝐴2 = 𝐴 ∗ 𝐴 =?
3 2 6

• 39
Técnicas de
programação

Operadores aritméticos clássicos

2 5 7 5 1 1 1,106 −0,106 −1,127


𝐴= 1 6 3 𝐵= 2 2 5 𝐴\𝐵 = 𝐴−1 ∗ 𝐵 → −0,078 0,411 1,226
6 7 2 7 2 1 0,453 −0,120 −0,411

2 5 7 5 1 1 −4,647 1,705 3,117


𝐴= 1 6 3 𝐵= 2 2 5 𝐴/𝐵 = 𝐴 ∗ 𝐵−1 → −9,411 1,176 6,529
6 7 2 7 2 1 −9,588 0,823 7,470

9 8 7 150 150 137


𝐴= 6 8 4 𝐴^2 = 𝐴 ∗ 𝐴 → 114 120 98
3 2 6 57 52 65

• 40
Técnicas de
programação

Operadores aritméticos especiais


Operadores utilizados em cálculos matemáticos simples e complexos
envolvendo vetores e matrizes.

Operador Descrição
Multiplicação
.*
ponto-a-ponto
Divisão à esquerda
.\
ponto-a-ponto
Divisão à direita
./
ponto-a-ponto
Exponenciação
.^
ponto-a-ponto
Transposição

matricial

• 41
Técnicas de
programação

Operadores aritméticos especiais

2 5 7 −5 1 −1
𝐴= 1 6 3 𝐵 = −2 2 5 𝐴.∗ 𝐵 =?
6 7 2 −7 2 −1

4 3 4 4 9 2
𝐴= 8 2 5 𝐵= 8 5 5 𝐴. \𝐵 =?
7 9 2 14 18 4

9 8 21 1 8 7
𝐴= 6 5 8 𝐵= 6 5 4 𝐴./𝐵?
9 8 9 3 2 1

• 42
Técnicas de
programação

Operadores aritméticos especiais

2 5 7 −5 1 −1 −10 5 −7
𝐴= 1 6 3 𝐵 = −2 2 5 𝐴.∗ 𝐵 → −2 12 15
6 7 2 −7 2 −1 −42 14 −2

4 3 4 4 9 2 1 3 0,5
𝐴= 8 2 5 𝐵= 8 5 5 𝐴. \𝐵 → 1 2,5 1
7 9 2 14 18 4 2 2 2

9 8 21 1 8 7 9 1 3
𝐴= 6 5 8 𝐵= 6 5 4 𝐴./𝐵 → 1 1 2
9 8 9 3 2 1 3 4 9

• 43
Técnicas de
programação

Operadores aritméticos especiais

2 5 7
𝐴= 1 6 3 𝐴. ^2 =?
6 7 2

1 −3 −2
𝐵= 2 4 2 𝐵. ^3 =?
1 3 3

2 5 7
𝐶= 1 6 3 𝐶 ′ =?
6 7 2

1 −3 −2
𝐷= 2 4 2 𝐷 ′ =?
1 3 3
• 44
Técnicas de
programação

Operadores aritméticos especiais

2 5 7 4 25 49
𝐴= 1 6 3 𝐴. ^2 → 1 36 9
6 7 2 36 49 4

1 −3 −2 1 −27 −8
𝐵= 2 4 2 𝐵. ^3 → 8 64 8
1 3 3 1 27 27

2 5 7 2 1 6
𝐶= 1 6 3 𝐶′ → 5 6 7
6 7 2 7 3 2

1 −3 −2 1 2 1
𝐷= 2 4 2 𝐷′ → −3 4 3
1 3 3 −2 2 3
• 45
Técnicas de
programação

Operadores relacionais
Realiza a comparação entre dois ou mais objetos (variáveis) entre
si. Esses operadores habilitam as seguintes comparações: menor,
maior, menor ou igual, maior ou igual, igual e não igual.

Operador Descrição Exemplo Retorno lógico


< Menor que A=1, B=2, A>B 0 ou F (false)
> Maior que A=1, B=2, A<B 1 ou T (true)
<= Menor ou igual a A=1, B=2, A<=B 1 ou T (true)
>= Maior ou igual a A=2, B=2, A>=B 1 ou T (true)
== Igual a A=2, B=1, A==B 0 ou F (false)
~= ou <> Não igual a A=1, B=1, A~=B 0 ou F (false)
Igualdade A=[1 2], B=[1 2] 1 ou T (true)
isequal t=isequal(A,B)
matricial

• 46
Técnicas de
programação

Operadores relacionais

1 2 3 9 8 7 1 1 1
𝐴= 4 5 6 𝐵= 6 5 4 𝐴<𝐵→ 1 0 0
7 8 9 3 2 1 0 0 0

1 2 3 9 8 7 0 0 0
𝐴= 4 5 6 𝐵= 6 5 4 𝐴>𝐵→ 0 0 1
7 8 9 3 2 1 1 1 1

1 2 3 9 8 7 1 1 1
𝐴= 4 5 6 𝐵= 6 5 4 𝐴 <= 𝐵 → 1 1 0
7 8 9 3 2 1 0 0 0

• 47
Técnicas de
programação

Operadores relacionais

1 2 3 9 8 7 0 0 0
𝐴= 4 5 6 𝐵= 6 5 4 𝐴 >= 𝐵 → 0 1 1
7 8 9 3 2 1 1 1 1

1 2 3 9 8 7 0 0 0
𝐴= 4 5 6 𝐵= 6 5 4 𝐴 == 𝐵 → 0 1 0
7 8 9 3 2 1 0 0 0

1 2 3 9 8 7 1 1 1
𝐴= 4 5 6 𝐵= 6 5 4 𝐴~ = 𝐵 → 1 0 1
7 8 9 3 2 1 1 1 1

• 48
Técnicas de
programação

Operadores relacionais

1 2 3 9 8 7
𝐴= 4 5 6 𝐵= 6 5 4 t=isequal(𝐴, 𝐵 ) 0
7 8 9 3 2 1

1 2 3 1 2 3
𝐴= 4 5 6 𝐵= 4 5 6 t=isequal(𝐴, 𝐵) 1
7 8 9 7 8 9

9 8 7 9 8 7
𝐴= 6 5 4 𝐵= 6 5 4 t=isequal(𝐴, 𝐵) 0
3 2 1.1 3 2 1

• 49
Técnicas de
programação

Operadores lógicos
Realiza operações lógicas AND, OR e NOT. Os operadores lógicos são
predominantemente usados em laços de estruturas condicionais.

Operador Descrição Exemplo Retorno


x=1, y=4
| OR 1 ou T (true)
x>5 | y>2
x=1, y=4
& AND 0 ou F (false)
x>5 & y>2
x=1, y=4
~ NOT 1 ou T (true)
~(x==y)

AND OR Not

x y Saída x y Saída x Saída


0 0 0 0 0 0
0 1
0 1 0 0 1 1
1 0 0 1 0 1 1 0

1 1 1 1 1 1

• 50
Técnicas de
programação

Exemplos gerais

Exemplo básico 1: Código para computar o valor resultante da função


0,5
1 2
𝑦 𝑥 = 10000 − 4 + 𝑥 3 − para um dado valor de entrada da variável x.
𝑥2

x=input('Digite o valor da variável de entrada =');


y=10000-(4 + x^3 - (1/(x^2))^2)^0.5;

Exemplo básico 2: Código para computar o valor resultante da função


2
10 −2
𝑦 𝑥 = 15 − 𝑥 2 ÷ 5 × para um dado valor de entrada da variável x.
𝑥2

x=input('Digite o valor da variável de entrada =');


y=(15 - x^2)/((5*((10/(x^2))^-2))^2);

• 51
Técnicas de
programação

Exemplos gerais

Exemplo básico 1: Código para computar o valor resultante da função


0,5
1 2
𝑦 𝑥 = 10000 − 4 + 𝑥 3 − para um dado valor de entrada da variável x.
𝑥2

x=input('Digite o valor da variável de entrada =');


y=10000-(4 + x^3 - (1/(x^2))^2)^0.5;

ExemploAbásico
função2:
input permite
Código para ao usuáriooentrar
computar com valores
valor resultante da função
no Console do Scilab
10 −2
ou
2 no Command Window do Matlab.
𝑦 𝑥 = 15 − 𝑥 2 ÷ 5 × para um dado valor de entrada da variável x.
𝑥2

x=input('Digite o valor da variável de entrada =');


y=(15 - x^2)/((5*((10/(x^2))^-2))^2);

• 52
Técnicas de
programação

Exemplos gerais

Exemplo básico 1: Código para computar o valor resultante da função


0,5
1 2
𝑦 𝑥 = 10000 − 4 + 𝑥 3 − para um dado valor de entrada da variável x.
𝑥2

x=input('Digite o valor da variável de entrada =');


y=10000-(4 + x^3 - (1/(x^2))^2)^0.5;

Exemplo básico 2: Código para computar o valor resultante da função


2
10 −2
𝑦 𝑥 = 15 − 𝑥 2 ÷ 5 × para um dado valor de entrada da variável x.
𝑥2

x=input('Digite o valor da variável de entrada =');


y=(15 - x^2)/((5*((10/(x^2))^-2))^2);

• 53
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que gera uma tabela equivalente de temperatura
em grau Celsius (°C), Fahrenheit (°F), e Kelvin (K), na faixa entre 0 °C e 100
°C, linearmente espaçada de 5 °C.

Celsius = 0:5:100;
Fahrenheit = 1.8*Celsius+32;
Kelvin = Celsius+273.15;
disp('***********************')
disp('Tabela de temperaturas')
disp('***********************')
A= ['Celsius Fahrenh Kelvin'];
B = [Celsius' Fahrenheit' Kelvin'];
disp(A), disp(B)
disp('***********************')

• 54
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que gera uma tabela equivalente de temperatura
em grau Celsius (°C), Fahrenheit (°F), e Kelvin (K), na faixa entre 0 °C e 100
°C, linearmente espaçada de 5 °C.

Celsius = 0:5:100;
Fahrenheit = 1.8*Celsius+32;
Kelvin = Celsius+273.15;
A função disp mostra caracteres ou valores de
disp('***********************')
variáveis no Console do Scilab
disp('Tabela ou no Command Window do Matlab
de temperaturas')
disp('***********************')
A= ['Celsius Fahrenh Kelvin'];
B = [Celsius' Fahrenheit' Kelvin'];
disp(A), disp(B)
disp('***********************')

• 55
Técnicas de
programação

Exemplos gerais
sinh(𝑥)
Exemplo básico 4: Código que verifica a igualdade tanh 𝑥 = para 20
valores lineramente espaçados no interval de 0 ≤ 𝑥 ≤ 2𝜋. cosh(𝑥)

x = linspace(0,2*pi,20);
y1 = tanh(x);
y2 = sinh(x)./cosh(x);
disp('********Resultados************')
disp(' x tanh(x) sinh(x)/cosh(x)');
disp('********************************')
A=[x' y1' y2'];
disp(A)
disp('********************************')

• 56
Técnicas de
programação

Exemplos gerais

Exemplo básico 5: Código para computar e plotar os gráficos das funções


seno e cosseno em um ciclo completo de 0 ≤ 𝑥 ≤ 2𝜋, linearmente espaçado de
0,001 radiano.

x=0:0.001:2*pi;
f1=sin(x);
f2=cos(x);
plot(x,f1,x,f2)

• 57
Técnicas de
programação

Exemplos gerais

Exemplo básico 6: Código para computar e plotar os gráficos das funções


seno e cosseno em um ciclo completo de 0 ≤ 𝑥 ≤ 360° , linearmente espaçado de
0,1 graus.

x=0:0.1:360;
f1=sind(x);
f2=cosd(x);
plot(x,f1,x,f2)

• 58
Técnicas de
programação

Exemplos gerais

Exemplo básico 7: Código para computar e plotar, em um período


completo, duas formas de onda senoidais - corrente elétrica (i) e tensão (v) -,
operando em 60 Hz com defasamento entre si de 12,5o.

f=60;
T=1/f;
t=0:0.0001:T;
i=sin(2*pi*f*t + pi/18);
v=sin(2*pi*f*t + pi/8);
plot(t,i,t,v)

• 59
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

1) Seja as seguintes matrizes


10 52 77 55 0 10
𝐴 = 10 23 31 𝐵 = 99 0 81
70 80 66 30 0 61
escreva um código que retorne:
a) As matrizes A e B.
b) C=A+B
c) D=A-B
d) A multiplicação entre A e B, com resultado armazenado em E.
e) A multiplicação, ponto-a-ponto, entre A e B, com resultado armazenado em F.
f) A divisão entre A e B, com resultado armazenado em G.
g) A adição entre a primeira coluna de A e terceira coluna de B.
h) A subtração entre a segunda linha de A e a primeira linha de B.
i) Os determinantes de A e B.
j) Se possível, as matrizes inversas de A e B. • 61
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

2) Seja as seguintes matrizes


21 −27 55 −11 23 17 10 55 5
𝐴 = 25 −64 59 𝐵 = −33 72 62 𝐶 = 51 67 1
88 −20 36 −12 44 33 65 32 2
escreva um código que retorne:
a) D=A-1xBxC
b) E=CxAxB-1
c) F=(AxBxCT)T
d) G=(AxBT)-1
e) H=AxC-1xB
f) I=(A-1xB-1xC-1)T
g) J=0,5x(ATxB-1xCT)
h) A multiplicação ponto-a-ponto entre as diagonais das matrizes, com resultado
armazenado em P. Computar a soma dos elementos de P.
• 62
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

3) Avalie as seguintes expressões algébricas usando uma calculadora e escreva um


código para confirmação dos resultados:
𝐴 = 1,3 𝐵 = 2,2 𝐶 = 1,7 𝐷 = 3 𝐸 = 2,6
2 𝐴×𝐵×𝐶 4
a) 𝑋 = (𝐴 + 𝐵 + 𝐶) +
𝐶−𝐷−𝐸
𝐷−𝐸 2
b) 𝑌=𝐶× 𝐴−𝐵−𝐷
− 𝐷 × (𝐵 + 𝐸)

c) 𝑊 = (𝐴 × 𝐵 × 𝐶) ÷ (𝐶 × 𝐷 × 𝐸)
1
4
d) R=E× (𝐴 ÷ 𝐵) × (𝐷 ÷ 𝐸)

e) V = 𝐴𝐵 + 𝐶𝐷 + 𝐸 (𝐶×𝐴)

3
f) K= (𝐷 𝐴 +𝐴𝐶 ) ÷ (𝐴 × 𝐶 − 𝐵 × 𝐸)
• 63
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
4) Para um dado valor da variável x, avalie as seguintes expressões usando uma
calculadora e escreva um código para confirmação dos resultados:

a) 𝑓 𝑥 = 4 × ln(𝑥)

𝑥
b) 𝑓 𝑥 = (4 − 𝑥) × 𝑒

𝑥
c) 𝑓 𝑥 = 𝑠𝑖𝑛2 − cos 2𝑥
6

d) 𝑓 𝑥 = ln 𝑥 + log(2𝑥)

e) 𝑓 𝑥 = 10 × log(𝑒 𝑥 )

1 4𝑥 2
f) 𝑓 𝑥 = 𝑥3
× 0,25

g) 𝑓 𝑥 = 𝑒 2𝜋 3 𝑥
• 64
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

5) A taxa aproximada de crescimento populacional de um país é dada por:


𝑃 𝑛 = 230 × 𝑒 0,0065𝑛 (milhões)
sendo n o número de anos a partir de 1985.
Escreva um código que gere a tabela de crescimento populacional de 1985 a 2050,
linearmente espaçada de 1 ano.

6) A taxa de natalidade (TN) anual de um país é dada pela equação

𝑁 × 1000 ➢ N = número de nascimentos


𝑇𝑁 = ➢ P = população total
𝑃

sabendo que 𝑁 = 5,7 × 𝑒 −0,015𝑛 (milhões), escreva um código que gere a tabela da
taxa de natalidade (em permilagem) com base no crescimento populacional de 1985
a 2050, obtido no exercício anterior.

• 65
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

7) Sabendo que a relação de Euler é dada por:


𝑒 𝑗𝑥 = cos 𝑥 + 𝑗𝑠𝑒𝑛(𝑥)

Escreva um código que gere resultados em graus assumindo o intervalo fechado de


0 ≤ 𝑥 ≤ 360°, linearmente espaçado de 10 graus.

8) Escreva um código que avalie as seguintes igualdades

𝑒 𝑥 − 𝑒 −𝑥 𝑒 𝑥 + 𝑒 −𝑥
𝑠𝑖𝑛ℎ 𝑥 = 𝑐𝑜𝑠ℎ 𝑥 =
2 2
no intervalo fechado de 0 ≤ 𝑥 ≤ 2𝜋, com 20 valores linearmente espaçados.

9) Escreva um código que retorne o resultado da função

𝑓 𝑥 = 𝑠𝑖𝑛ℎ2 𝑥 − 𝑐𝑜𝑠ℎ2 𝑥
no intervalo fechado de 0 ≤ 𝑥 ≤ 2𝜋, com 30 valores linearmente espaçados.
• 66
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

10) Escreva um código generalizado que resolva equações quadráticas da forma


𝑎𝑥 2 + 𝑏𝑥 + 𝑐 = 0
11) Escreva um código generalizado que retorne o valor da hipotenusa, H, de um
triângulo retângulo de catetos M e N.
12) Escreva um código generalizado que retorne o diâmetro, o comprimento e a
área interna de uma circunferência de raio R.
13) Escreva um código generalizado que retorne o número de segundos, minutos e
horas para uma dada quantidade de dias.
14) Escreva um código generalizado que retorne a distância entre dois pontos, em
termos de suas coordenadas no plano cartesiano, assim como o coeficiente angular
(m) da reta que os atravessa

2 2
𝑦2 − 𝑦1
𝑑𝑖𝑠𝑡â𝑛𝑐𝑖𝑎 = 𝑥1 − 𝑥2 + 𝑦1 − 𝑦2 𝑚=
𝑥2 − 𝑥1
15) Escreva um código generalizado que converta um vetor de seis dígitos de tempo
(hh/mm/ss) para minutos.
• 67
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

16) Uma importante ferramenta usada no meio financeiro é a amortização de


empréstimos. A tabela PRICE é frequentemente empregada por fornecer parcelas
fixas. Sabendo que o cálculo empregado é baseado na equação

1+𝑖 𝑛
×𝑖 ➢ Valor = valor total do empréstimo
𝑃𝑎𝑟𝑐𝑒𝑙𝑎 = 𝑉𝑎𝑙𝑜𝑟 × ➢ n = número de meses
1+𝑖 𝑛−1
➢ i = taxa de juros

escreva um código que retorne a parcela fixa para 4, 6, 8, 10, 12, 14, 16, 18, 20, 22
e 24 meses assumindo uma taxa de juros de 4% ao mês para um empréstimo de
R$ 100.000,00.

17) Repita o exemplo anterior assumindo o mesmo período de meses, porém, com
uma taxa de juros de 5,5% ao mês para um empréstimo de R$ 500.000,00.

• 68
Técnicas de
programação

• 69
Técnicas de
programação

Estrutura de decisão condicional


if-elseif-else: Executar instruções se a condição for verdadeira.

Sintaxe
✓ O bloco if expressão, instrução, end avalia uma
expressão e executa um grupo de instruções
if expressão
quando a expressão é verdadeira.
instrução ✓ Uma expressão é verdadeira quando seu
elseif expressão resultado não é vazio e contém elementos não-
instrução nulos (lógico ou real).
else ✓ Caso contrário, a expressão é falsa.
instrução ✓ Os blocos elseif e else são opcionais. A instrução
end é executada somente se as expressões prévias do
bloco if ...end são falsas.
✓ Um bloco if pode conter múltiplos blocos elseif.

• 70
Técnicas de
programação

Estrutura de decisão condicional

Fluxograma

Verdadeira
Condição? Sintaxe

if condição
Bloco
instrução
verdadeiro end

• 71
Técnicas de
programação

Estrutura de decisão condicional

Fluxograma

Sintaxe
Falsa Verdadeira
Condição?
if condição
instrução
else
Bloco Bloco
falso verdadeiro instrução
end

• 72
Técnicas de
programação

Estrutura de decisão condicional


if condição 1 Fluxograma
Bloco1
elseif condição 2
Bloco2 Falsa Verdadeira
Condição 1?
elseif condição 3
Bloco3
else
Falsa Verdadeira Bloco1
Bloco4 Condição 2?
end
Bloco2
Falsa Verdadeira
Condição 3?

Bloco4 Bloco3

• 73
Técnicas de
programação

Exemplos gerais
Exemplo básico 1: Código para computar a raiz quadrada, a exponencial, o
logaritmo (base 10) e o logaritmo natural do produto entre duas variáveis de
entrada se, e somente se, o valor resultante da multiplicação for um número real
positivo no intervalo aberto de 0 a 10.

x=input('Digite o valor da variável de entrada 1 =');


y=input('Digite o valor da variável de entrada 2 =');
k=x*y;
if 0<k<10
raiz=sqrt(k);
exponencial=exp(k);
logComum=log10(k);
logNatural=log(k);
end

• 74
Técnicas de
programação

Exemplos gerais
Exemplo básico 2: Código para comparar as dimensões (mxn) de duas
matrizes, A e B. Caso possuam a mesma dimensão, as matrizes C e D serão
criadas com dimensões (mx2n) e (2mxn), respectivamente.

A = ones(2,3);
B = rand(2,3);
if size(A)==size(B)
C = [A B];
D = [A;B];
else
disp('A e B não possuem a mesma dimensão. ')
C = [];
D = [];
end

• 75
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código para avaliar se o valor da variável x está abaixo,
dentro ou acima do intervalo fechado de 2 a 6.

x = 10; //Variável
minVal = 2; //Valor mínimo especificado
maxVal = 6; //Valor máximo especificado
if (x >= minVal) & (x <= maxVal)
disp('Variável dentro do limite especificado. ')
elseif (x > maxVal)
disp('Variável acima do valor máximo especificado.')
else
disp('Variável abaixo do valor mínimo especificado. ')
end

• 76
Técnicas de
programação

Exemplos gerais
Exemplo básico 4: Código para avaliar as relações condicionais de magnitude
entre 3 variáveis de entrada.

A=input('Digite o valor da variável A =');


B=input('Digite o valor da variável B =');
C=input('Digite o valor da variável C =');
if (A < B)
A=A+1;
disp(A)
elseif (A==B) | (C>=A)
B=A*C/2;
disp(B)
else
C=C+5;
disp(C)
end
• 77
Técnicas de
programação

Estrutura de decisão condicional


switch-case-otherwise: Avaliar a expressão do switch e executar a
instrução do case correspondente. Caso contrário, executa-se o otherwise.
Sintaxe

switch expressão
case valor1 ✓ A expressão do switch é avaliada e o controle é
instrução passado para o case.
case valor2 ✓ Cada case é avaliado, e aquele que tiver seu valor
instrução associado à expressão do switch terá sua instrução
... executada.
✓ Caso contrário, o otherwise executará sua
otherwise
instrução.
instrução
end
• 78
Técnicas de
programação

Estrutura de decisão condicional


Fluxograma

switch Teste expressão


Teste case Valor1
expressão Bloco1
case Valor2
Bloco2
case Valor3
Valor1 Valor2 Valor3
Bloco3
Bloco1 Bloco2 Bloco3 Bloco4 otherwise
Bloco4
end

• 79
Técnicas de
programação

Exemplos gerais
Exemplo básico 1: Código para avaliar se o número digitado pelo usuário é igual
a -1, 0 ou 1.

x = input('Digite um número: ');


switch x
case -1
disp('um negativo')
case 0
disp('zero')
case 1
disp('um positivo')
otherwise
disp('O valor digitado é diferente de -1, 0 e 1')
end

• 80
Técnicas de
programação

Exemplos gerais
Exemplo básico 2: Código que avalia o quadrante do ângulo (em graus) digitado
pelo usuário (0 a 360°), de modo a computar uma dada função trigonométrica.

y=input('Digite 1 para seno, 2 para cosseno ou 3 para tangente: ')


x=input('Digite um ângulo, em graus, a ser calculado pela função escolhida: ')
switch y
case 1
y = sind(x);
disp(y)
case 2
y = cosd(x);
disp(y)
case 3
y = tand(x);
disp(y)
otherwise
error('Nenhuma função definida')
end
• 81
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que retorna um vetor de 5, 10 ou 15 elementos que
se encontra em uma estrutura function.

function x=vetor(num)
vetor5=[1 2 3 4 5];
Scilab
vetor10=[1 2 3 4 5 6 7 8 9 10];
vetor15=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
switch num
case 5
x = vetor5;
case 10
x=vetor10;
case 15
x=vetor15;
end
endfunction

num=5;
x=vetor(num);
• 82
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que retorna um vetor de 5, 10 ou 15 elementos que
se encontra em uma estrutura function.

function x=vetor(num)
vetor5=[1 2 3 4 5];
Scilab
vetor10=[1 2 3 4 5 6 7 8 9 10];
vetor15=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
A declaração de uma function
switch numé uma poderosa ferramenta de programação,
pois, uma function pode case
ser 5chamada quantas vezes for necessário por um
x = vetor5;
código ou algoritmo. É case
possível
10
até mesmo utilizá-la para, por exemplo,
computar de modo recursivo o valor de uma variável. Várias estruturas
x=vetor10;
functions podem estar presentes
case 15 em um mesmo código ou algoritmo.
x=vetor15;
end
endfunction

num=5;
x=vetor(num);
• 83
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que retorna um vetor de 5, 10 ou 15 elementos que
se encontra em uma estrutura function.

function x=vetor(num)
vetor5=[1 2 3 4 5];
Scilab
vetor10=[1 2 3 4 5 6 7 8 9 10];
vetor15=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
switch num
case 5
No SCILAB a declaração de uma function é realizada no mesmo
x = vetor5;
arquivo do códigocase
ou10 algoritmo que está sendo desenvolvido.
x=vetor10;
case 15
x=vetor15;
end
endfunction

num=5;
x=vetor(num);
• 84
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que retorna um vetor de 5, 10 ou 15 elementos que
se encontra em uma estrutura function.

Arquivo main.m Arquivo vetor.m

Matlab function x=vetor(num)


vetor5=[1 2 3 4 5];
Matlab
vetor10=[1 2 3 4 5 6 7 8 9 10];
vetor15=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
switch num
num=5;
case 5
x=vetor(num)
x = vetor5;
case 10
x=vetor10;
case 15
x=vetor15;
end

• 85
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código que retorna um vetor de 5, 10 ou 15 elementos que
se encontra em uma estrutura function.

Arquivo main.m Arquivo vetor.m

Matlab function x=vetor(num)


vetor5=[1 2 3 4 5];
Matlab
No MATLAB uma function deve ser declaradavetor10=[1
em um 2arquivo
3 4 5 6 7 8separado
9 10]; (vetor.m)
vetor15=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15];
e ela é chamada pelo arquivo principal (main.m). É importante salientar que o
switch num
nomenum=5;
do arquivo associado à function deve ter o case
mesmo
5 nome atribuído à function.
x=vetor(num)
Adicionalmente, ambos os arquivos devem estar dentro do mesmo diretório.
x = vetor5;
case 10
x=vetor10;
case 15
x=vetor15;
end

• 86
Técnicas de
programação

Estrutura de repetição
while-end (laço while): Executar um bloco de instruções se a expressão
(condição) for verdadeira. Após a execução do bloco de instruções, a
condição é avaliada novamente. Se ela ainda for verdadeira, o bloco é
executado novamente. Este processo se repete continuamente até que a
condição seja falsa.
Fluxograma
Sintaxe

while expressão Condição Falsa Sair


instrução while do loop
end Verdadeira

Grupo de
instruções

• 87
Técnicas de
programação

Estrutura de repetição
while-end (laço while): Executar um bloco de instruções se a expressão
(condição) for verdadeira. Após a execução do bloco de instruções, a
condição é avaliada novamente. Se ela ainda for verdadeira, o bloco é
executado novamente. Este processo se repete continuamente até que a
condição seja falsa.
Fluxograma
Sintaxe

while expressão Condição Falsa Sair


instrução while do loop
end Verdadeira

Grupo de
instruções

• 88
Técnicas de
programação

Exemplos gerais
Exemplo básico 1: Código para Exemplo básico 2: Código para
computar a quantidade de anos para computar a sequência
que um investimento de R$ 10.000,00 1 1 1 1 1 1 1 1
chegue a R$100.000,00 de rendimento, 𝐶= 1
assumindo uma taxa de 10% de 2 3 4 5 6 7 8 9
aumento por ano.

p = 10000;
anos 𝐴 = 𝜋𝑟 2
= 0;
n = 1;
while n<10
while p < 100000
C(n) =1/n;
anos = anos + 1;
n = n+1;
p = p*(1 + 0.10);
end
end
disp(C')
disp(anos)

• 89
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código genérico para computar o fatorial de um número
inteiro não-negativo.

x=input('Digite um número inteiro não-negativo: ')


f=x;
while x > 1
x = x-1;
f = f*x;
end
disp('fatorial = ')
disp(f)

• 90
Técnicas de
programação

Exemplos gerais
Exemplo básico 4: Código genérico para computar o fatorial de um número
inteiro não-negativo, porém, usando a declaração de uma function.

function x = fatorial(num)
if num<=1
x=1;
else
x = num .* fatorial(num-1) ;
end
endfunction
num=input('Digite um número inteiro não-negativo: ');
x=fatorial(num);
disp(‘fatorial: ')
disp(x)

• 91
Técnicas de
programação

Exemplos gerais
Exemplo básico 4: Código genérico para computar o fatorial de um número
inteiro não-negativo, porém, usando a declaração de uma function.

function x = fatorial(num)
if num<=1
x=1;
else
Atente que a function está se “auto-chamando”.
x = num .* fatorial(num-1) ;
Intrinsecamente, pode-se inferir que ela está desenvolvendo um loop while.
end
endfunction
num=input('Digite um número inteiro não-negativo: ');
x=fatorial(num);
disp(‘fatorial: ')
disp(x)

• 92
Técnicas de
programação

Exemplos gerais
Exemplo básico 5: Código para gerar dois contadores: um decrescente de 10 a
1 e outro crescente de 1 a 10. Os valores de cada contador são armazenados em
vetores com elementos inicialmente nulos.

contador1 = 11;
contador2 = 0;
n=1;
a=zeros(1,10);
b=zeros(1,10);
while n<11
contador1 = contador1 - 1;
a(n)=contador1;
contador2 = contador2 + 1;
b(n)=contador2;
n=n+1
end
disp(a)
disp(b)
• 93
Técnicas de
programação

Estrutura de repetição
for-end (laço for): Executar um bloco de instruções em uma quantidade
específica de vezes.
Fluxograma
Sintaxe
Inicialização
da variável
for variável=expressão
instrução Condição
Falsa
Sair do loop
end Verdadeira

Grupo de instruções

incremento ou
decremento

• 94
Técnicas de
programação

Estrutura de repetição
for-for-end-end (laços for): Executar um bloco de instruções do laço for
interno em uma quantidade específica de vezes, na medida em que a
variável do laço for externo é incrementada ou decrementada.

Sintaxe for variável=expressão


for variável=expressão
for variável=expressão
for variável=expressão
instrução
instrução
end
end
end

end

• 95
Técnicas de
programação

Estrutura de repetição
for-for-end-end (laços for): Executar um bloco de instruções do laço for
interno em uma quantidade específica de vezes, na medida em que a
variável do laço for externo é incrementada ou decrementada.

Sintaxe for variável=expressão


for variável=expressão
O primeiro valor da variável do laço for externo é
for variável=expressão
avaliado. A instrução é executada
for variável=expressão
para cada valor da variável do laço for interno. Findando o laço for interno, o valor da
instrução
variável do laço for externo é incrementado (ou decrementado) e o processo se repete
até que seja avaliado o último valor da variável
instrução
do laço for externo.
end
end
end

end

• 96
Técnicas de
programação

Estrutura de repetição
for-for-end-end (laços for): Executar um bloco de instruções do laço for
interno em uma quantidade específica de vezes, na medida em que a
variável do laço for externo é incrementada ou decrementada.

Sintaxe for variável=expressão


for variável=expressão
for variável=expressão
for variável=expressão
Vários laços For podem estar contidos em um laço For principal!
instrução
instrução
end
end
end

end

• 97
Técnicas de
programação

Exemplos gerais
Exemplo básico 1: Código para computar sequencialmente as funções seno, cosseno,
tangente e secante, assumindo ângulos na faixa de 0o a 360o, linearmente espaçados de 1o.

y1 = zeros(1,360);
y2 =y1;
y3 =y1;
y4 =y1;
for n = 0:1:360
y1(n+1) = sind(n);
y2(n+1) = cosd(n);
y3(n+1) = tand(n);
y4(n+1) = secd(n);
end

• 98
Técnicas de
programação

Exemplos gerais
Exemplo básico 1: Código para computar sequencialmente as funções seno, cosseno,
tangente e secante, assumindo ângulos na faixa de 0o a 360o, linearmente espaçados de 1o.

y1 = zeros(1,360);
y2 =y1;
y3 =y1; dos vetores de armazenamento dos resultados de um laço for
Em geral, a dimensão
pode ser especificada
y4 =y1; antecipadamente. Para tanto, basta criar um vetor composto
com elementos nulos tendo a dimensão desejada. Os elementos inicialmente
for n = 0:1:360
nulos serão substituídos (sobrescritos) sequencialmente pelos resultados obtidos.
y1(n+1) =importante,
Essa técnica mostra-se sind(n); sobretudo, no desenvolvimento de algoritmos
associados
y2(n+1)a métodos numéricos que usam matrizes esparças.
= cosd(n);
y3(n+1) = tand(n);
y4(n+1) = secd(n);
end

• 99
Técnicas de
programação

Exemplos gerais
Exemplo básico 2: Código para computar a representação polar - magnitude e ângulo de
fase (em grau) - de números complexos originalmente obtidos na representação retangular,
cujas partes real e imaginária são dadas pelos elementos dos vetores x e y,
respectivamente.

x=[5 8 9 6 2];
y=[2 -1 -3 8 5];
z=zeros(1,5);
for n=1:1:5
z(1,n)=x(1,n) + y(1,n)*i;
end
disp('Magnitude')
disp(abs(z))
disp('Ângulo de fase (grau)')
disp(atan(imag(z),real(z))*180/pi)

• 100
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código para computar os seguintes somatórios:
10 10 10 10

𝑊 = ෍ 𝑥2 𝑋 = ෍ ln(𝑥) 𝑌 = ෍ log(𝑥) 𝑍=෍ 𝑥


𝑥=1 𝑥=1 𝑥=1 𝑥=1

W=0;
X=0;
Y=0;
Z=0;
for x = 1:1:10
W=W + x^2;
X=X + log(x);
Y=Y + log10(x);
Z=Z + sqrt(x);
end
disp([W X Y Z]')
• 101
Técnicas de
programação

Exemplos gerais
5 6

Exemplo básico 4: Código para computar o seguinte somatório: 𝐾 = ෍ ෍ (𝑚 + 𝑛)


𝑚=1 𝑛=1

Etapas do cálculo
m=1
𝑓1 = 1 + 1 + 1 + 2 + 1 + 3 + 1 + 4 + 1 + 5 + (1 + 6)
K = 0; m=2
for m = 1:1:5 𝑓2 = 2 + 1 + 2 + 2 + 2 + 3 + 2 + 4 + 2 + 5 + (2 + 6)
for n = 1:1:6
m=3
K= K+(m+n);
end 𝑓3 = 3 + 1 + 3 + 2 + 3 + 3 + 3 + 4 + 3 + 5 + (3 + 6)
end m=4
disp(f) 𝑓4 = 4 + 1 + 4 + 2 + 4 + 3 + 4 + 4 + 4 + 5 + (4 + 6)
m=5
𝑓5 = 5 + 1 + 5 + 2 + 5 + 3 + 5 + 4 + 5 + 5 + (5 + 6)
Resultado
𝐾 = 𝑓1 + 𝑓2 + 𝑓3 + 𝑓4 + 𝑓5
• 102
Técnicas de
programação

Exemplos gerais
Exemplo básico 5: Código que gera uma matriz randômica de dimensão 5x5 com elementos
no intervalo [0 1). Elementos cujo valor é menor ou igual a 0,5 são armazenados na matriz A,
caso contrário, são armazenados na matriz B.

x=rand(5,5,'uniforme')
A=zeros(5,5);
B=zeros(5,5);
for m = 1:1:5
for n=1:1:5
if x(m,n)<=0.5
A(m,n)=x(m,n);
else
B(m,n)=x(m,n);
end
end
end
disp(x); disp(A);disp(B)

• 103
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
1) Escreva um código, usando estrutura de repetição, para computar os somatórios:
10
1
a) 𝑄=෍ 3
𝑥−2
𝑥=1

125
5×3 𝑥
c) 𝑅=෍
0,5
𝑥=1

10 20
𝑛
e) 𝑆 = ෍ ෍ 𝑙𝑛
𝑚
𝑚=1 𝑛=1

5 15 25
log(𝑖) × log(𝑚)
g) 𝑊=෍෍ ෍
𝑛
𝑖=1 𝑚=1 𝑛=1 • 105
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
2) Escreva um código, usando estrutura de repetição, para computar os somatórios:
360°
1
a) 𝐴= ෍
°
cos(2𝜃)
𝜃=0

180°
cos 𝜃 + sin 𝜃
c) 𝐵= ෍
°
2
𝜃=0

3𝜋 𝜋
2 2
e) 𝑆 = ෍ ෍ sin(𝛼) × cos(𝛽)
𝛼=0 𝛽=0

5 15 25
sec(𝑖) × cos 𝜃
g) 𝑊 = ෍ ෍ ෍
tan(𝑛)
𝑖=1 𝑚=1 𝑛=1 • 106
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
3) Dado o vetor linearmente espaçado
𝑋 = 0 1 2 3 4 5 6 … 47 48 49 50

escreva um código que compute a soma dos elementos pares e ímpares usando as seguintes
equações:
50

𝑆𝑜𝑚𝑎𝑝𝑎𝑟 = ෍ 𝑋(𝑛 × 2)
𝑛=0
50

𝑆𝑜𝑚𝑎í𝑚𝑝𝑎𝑟 = ෍ 𝑋( 𝑛 × 2 + 1)
𝑛=0

4) Repita o Exercício 3 assumindo o vetor

𝑋 = 100 99 98 97 … 6 5 4 3 2 1 0
• 107
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Relembrando:
𝑛
Limite: Convergência para um ponto.
෍ 𝑧 𝑖 = 1 + 𝑧 + 𝑧 2 + ⋯ + 𝑧 𝑛−1
Derivada: Taxa
𝑖=0
de variação (média ou instantânea).
Integral: Cálculo de área.

• 108
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
5) A seguinte equação define uma série geométrica:
𝑛

෍ 𝑧 𝑖 = 1 + 𝑧 + 𝑧 2 + ⋯ + 𝑧 𝑛−1
𝑖=0

escreva um código que mostre que a série é convergente no intervalo -1<z<1, e divergente caso
contrário.

6) Escreva códigos para avaliar se as seguintes séries são convergentes ou divergentes:


∞ ∞ ∞ ∞
1 1 ln(𝑛) 𝑒𝑥
𝑋=෍ 2 𝑌=෍ 𝑍=෍ 𝐾=෍
𝑛 𝑛 𝑛 (𝑥 + 1)
𝑛=1 𝑛=1 𝑛=1 𝑥=1

∞ ∞ ∞ ∞
log(𝑛) 1 −1 𝑛−2 −1 𝑛
𝑊=෍ 𝑇=෍ 𝑛 𝑉=෍ 𝐿=෍
𝑛3 2 −1 𝑛 4𝑛
𝑛=1 𝑛=1 𝑛=1 𝑥=1

• 109
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
7) Escreva um código para avaliar a equação:
𝐾
1 1 1
𝑌 = 1+ + 2+ 3 𝐾 = 10, 20, 30, … , 990, 1000
𝐾 𝐾 𝐾

8) Escreva um código que retorne o número resultante x dado pela série:


1 1 1 1 1
𝑥 =4 1− + − + − ⋯ Obs.: a série deve ter 100 elementos.
3 5 7 9 11

9) O número irracional e pode ser definido pela equação:


1 𝑛
𝑒= 1 +𝑛 , n tendendo ao infinito.

Para qual valor o número e converge assumindo n variando de 1 a 10.000?

• 110
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
10) Escreva um código para computar o valor da função exponencial de um dado número real x
usando a seguinte série:
𝑘
𝑥 𝑛
𝑒𝑥 = ෍
𝑛!
𝑛=0

11) Com base no exercício anterior, escreva um código para mostrar que as seguintes igualdades
são válidas:
𝑒 𝑥 − 𝑒 −𝑥
sinh(𝑥) =
2

𝑒 𝑥 + 𝑒 −𝑥
cosh(𝑥) =
2

sinh 𝑥 𝑒 𝑥 − 𝑒 −𝑥
tanh 𝑥 = = 𝑥
cosh 𝑥 𝑒 + 𝑒 −𝑥
• 111
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
12) Com base no Princípio da Indução Finita, escreva um código para provar que:
𝑘
σ𝑘𝑛=1 𝑛2 ≡ 12 + 22 + 32 + ⋯ + 𝑘 2 = 𝑘 + 1 2𝑘 + 1 , 𝑘 ∈ ℕ.
6

13) Sabendo que a Série de Maclaurin expressa as funções seno e cosseno da seguinte forma
𝜃3 𝜃5 𝜃7 𝜃2 𝜃4 𝜃6
sen θ = θ − + − +⋯ cos θ = 1 − + − +⋯
3! 5! 7! 2! 4! 6!

escreva um código para provar o Teorema de Euler Obs: 𝜽 em radianos.


𝑒 ±𝑖𝜃 = cos 𝜃 ± 𝑖. 𝑠𝑒𝑛(𝜃)

14) Com base no exercício anterior, escreva um código para validar o Teorema de Moivre:

cos 𝜃 + 𝑖. 𝑠𝑒𝑛(𝜃) 𝑛 = cos(𝑛𝛼 + 𝑖. 𝑠𝑒𝑛 𝑛𝛼 , n ∈ ℤ.

• 112
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
15) Escreva um código que gere duas matrizes aleatórias – A e B de dimensão 5x5 – e compute
os seguintes valores:

a) O somatório dos elementos da diagonal principal.


b) O somatório dos elementos das colunas pares.
c) O somatório dos elementos das colunas ímpares.
d) A exponencial dos resultados dos items a), b) e c).

16) Escreva um código que gere três matrizes aleatórias - A, B e C de dimensão 11x11 – e
compute os seguintes valores:

a) O somatório dos elementos da diagonal principal.


b) O somatório dos elementos das colunas pares.
c) O somatório dos elementos das colunas ímpares.
d) O logaritmo natural dos resultados dos items a), b) e c).
• 113
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
17) Dadas duas matrizes aleatórias, uma de dimensão 14x14 e outra de dimensão 30x30, escreva
um código, usando o conceito de function, para selecionar individualmente qualquer uma delas.

18) Escreva um código, usando o conceito de function, para computar o resultado do polinômio:
𝑃 𝑥 = 𝑥 5 + 8𝑥 4 − 2𝑥 3 + 5𝑥 + 17

19) Escreva um código, usando o conceito de function, para computar a variância (var) e o desvio
padrão (dp) de um vetor aleatório V de n elementos, sabendo que:

𝑛
𝑉 𝑥 − 𝑉ത 2
𝑣𝑎𝑟 = ෍
𝑛−1
𝑥=1
𝑉ത valor médio
𝑛 1
𝑉 𝑥 − 𝑉ത 2 2
𝑑𝑝 = ෍
𝑛−1
𝑥=1
• 114
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
20) A resistência equivalente Req_s de um circuito elétrico formado por n resistores conectados em
série é dada por
𝑛

𝑅𝑒𝑞_𝑠 = ෍ 𝑅𝑖
𝑖=1

onde Ri’s representam os resistores em série.


A resistência equivalente Req_p de um circuito elétrico formado por n resistores conectados em
paralelo é dada por
𝑛
1
𝑅𝑒𝑞_𝑝 = 1൘෍
𝑅𝑖
𝑖=1

onde Ri’s representam os resistores conectados em paralelo.


Escreva um código que compute a resistência equivalente, série e paralelo, de um circuito elétrico
formado por cinco resistores com os seguintes valores:
𝑅1 = 10 Ω, 𝑅2 = 12 Ω, 𝑅3 = 14 Ω, 𝑅4 = 30 Ω, 𝑅5 = 40 Ω
• 115
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
16 primeiros números decimais, binários, octais e hexadecimais
Decimal (Base 10) Binário (Base 2) Octal (Base 8) Hexadecimal (Base 16)
Conversão
numérica 0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 111 17 F
• 116
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
Conversão das bases 2, 8 e 16 para a base 10

Conversão binário => decimal


11012 = 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 = 1310
1101.1012 = 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20 + 1 × 2−1 +0 × 2−2 + 1 × 2−3 = 13,62510

Conversão octal => decimal


5408 = 5 × 82 + 4 × 81 + 0 × 80 = 35210

540.6 = 5 × 82 + 4 × 81 + 0 × 80 + 6 × 8−1 352,7510


Conversão hexadecimal => decimal
𝐷𝐵016 = 𝐷 × 162 + 𝐵 × 161 + 0 × 160 = 13 × 162 + 11 × 161 + 0 × 160 = 350410

𝐷𝐵0. 𝐴16 = 𝐷 × 162 + 𝐵 × 161 + 0 × 160 + 𝐴 × 16−1 = 13 × 162 + 11 × 161 + 0 × 160 + 10 × 16−1

= 3504,62510
• 117
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão da base 10 para as bases 2, 8 e 16

Um número decimal inteiro pode ser convertido para qualquer outra base quando sua parte inteira
é dividida repetidamente pela base desejada até que o quociente seja menor que 1. O primeiro
resto obtido torna-se o dígito menos significativo e o último resto torna-se o dígito mais significativo.

Um número decimal fracionário pode ser convertido para qualquer outra base quando ele é
multiplicado repetidamente pela base desejada até que a parte fracionária seja igual a 0.
Porém, nem sempre essa condição é realizável, pois, pode haver conversões sem fim.

Um número decimal misto (inteiro e fracionário) pode ser convertido para qualquer outra base
realizando-se as duas etapas supracitadas e, por fim, combinando-as.

• 118
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => binário

3910 = 1001112

Divisão Quociente Resto


39/2 19 1 (𝐿𝑆𝐵)
19/2 9 1
9/2 4 1
4/2 2 0
2/2 1 0
1/2 0 1 (𝑀𝑆𝐵)
LSB (Least Significant Bit): Bit menos significativo.
MSB (Most Significant Bit): Bit mais significativo.
• 119
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => binário

0,3965410 = 0,01100 …2

Multiplicação Resultado Bit+valor


0,39654 × 2 0,79308 0 𝑀𝑆𝐵 + 0,79308
0,79308 × 2 1,58616 1 + 0,58616
0,58616 × 2 1,17232 1 + 0,17232
0,17232 × 2 0,34464 0 + 0,34464
0,34464 × 2 0,68928 0 + 0,68928
... ... ...
LSB (Least Significant Bit): Bit menos significativo.
MSB (Most Significant Bit): Bit mais significativo.
• 120
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => binário

0,3965410 = 0,01100 …2

Multiplicação Resultado Bit+valor


0,39654 × 2 0,79308 0 𝑀𝑆𝐵 + 0,79308
0,79308 × 2 1,58616 1 + 0,58616
0,58616 × 2 1,17232 1 + 0,17232
0,17232 × 2 0,34464 0 + 0,34464
0,34464 × 2 0,68928 0 + 0,68928
... ... ...
LSB (Least Significant Bit): Bit menos significativo.
MSB (Most Significant Bit): Bit mais significativo.
• 121
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => binário

0,8437510 = 0,110112

Multiplicação Resultado Bit+Valor


0,84375 × 2 1,6875 1 (𝑀𝑆𝐵) + 0,6875
0,6875 × 2 1,375 1 + 0,375
0,375 × 2 0,75 0 + 0,75
0,75 × 2 1,5 1 + 0,5
0,5 × 2 1,0 1 (𝐿𝑆𝐵) + 0,0

LSB (Least Significant Bit): Bit menos significativo.


MSB (Most Significant Bit): Bit mais significativo.
• 122
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => binário

0,8437510 = 0,110112

Multiplicação Resultado Bit+Valor


0,84375 × 2 1,6875 1 (𝑀𝑆𝐵) + 0,6875
0,6875 × 2 1,375 1 + 0,375
0,375 × 2 0,75 0 + 0,75
0,75 × 2 1,5 1 + 0,5
0,5 × 2 1,0 1 (𝐿𝑆𝐵) + 0,0

LSB (Least Significant Bit): Bit menos significativo.


MSB (Most Significant Bit): Bit mais significativo.
• 123
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => binário

39,8437510 = 10011,110112

3910 = 1001112

0,8437510 = 0,110112

39,8437510 = 100111,110112

• 124
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => octal

345,15810 = 531,12 …8
Parte inteira

Divisão Quociente Resto


345/8 43 1 (𝐿𝑆𝐵)
43/8 5 3
5/8 0 5 (𝑀𝑆𝐵)
Parte fracionária
Multiplicação Resultado Octal+valor
0,158 × 8 1,264 1 𝑀𝑆𝐵 + 0,264
0,264 × 8 2,112 2 + 0,112
… … …
• 125
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

Conversão decimal => hexadecimal

389,12510 = 185,216
Parte inteira

Divisão Quociente Resto


389/16 24 5 (𝐿𝑆𝐵)
24/16 1 8
1/16 0 1 (𝑀𝑆𝐵)

Parte fracionária

Multiplicação Resultado Octal+valor


0,125 × 16 2 2 𝑀𝑆𝐵 + 0,0

• 126
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

21) Escreva um código generalizado que permita ao usuário:


1. Escolher o tipo de conversão numérica;
2. Digitar o número desejado para a conversão.

Posteriormente, o código deve computar e mostrar o resultado da


conversão escolhida.

• 127
Técnicas de
programação

• 128
Técnicas de
programação Cálculo de grandezas elétricas:
Geração de ondas alternadas senoidais

Gerador
Seno
elétrico

Projeção do rotor do gerador sobre o eixo imaginário

Cosseno

• 129
Técnicas de
programação Cálculo de grandezas elétricas:
Geração de ondas alternadas senoidais

• 130
Técnicas de
programação Cálculo de grandezas elétricas:
Valores característicos das ondas senoidais

• 131
Técnicas de
programação Cálculo de grandezas elétricas:
Fase e suas relações

• 132
Técnicas de
programação Cálculo de grandezas elétricas:
Fase e suas relações

• 133
Técnicas de
programação Cálculo de grandezas elétricas:
Fase e suas relações

• 134
Técnicas de
programação Cálculo de grandezas elétricas:
Fase e suas relações

• 135
Técnicas de
programação Cálculo de grandezas elétricas:
Valor RMS

• 136
Técnicas de
programação Cálculo de grandezas elétricas:
Valor RMS

• 137
Técnicas de
programação Cálculo de grandezas elétricas:
Valor RMS

• 138
Técnicas de
programação Cálculo de grandezas elétricas:
Valor RMS

• 139
Técnicas de
programação Cálculo de grandezas elétricas:
Valor RMS

Amostragem de um sinal genérico de tensão

• Qual o período do sinal?


• Qual a frequência do sinal?
• Qual a amplitude do sinal?
• Qual o valor de pico-a-pico do sinal?
• Quantas amostras foram extraídas
do sinal?
• Qual forma de onda representa o sinal
no domínio do tempo contínuo?
• Qual forma de onda representa o sinal
no domínio do tempo discrete?

• 140
Técnicas de
programação Cálculo de grandezas elétricas:
Valor RMS

Amostragem de um sinal genérico de corrente

• Qual o período do sinal?


• Qual a frequência do sinal?
• Qual a amplitude do sinal?
• Qual o valor de pico-a-pico do sinal?
• Quantas amostras foram extraídas
do sinal?
• Qual forma de onda representa o sinal
no domínio do tempo contínuo?
• Qual forma de onda representa o sinal
no domínio do tempo discreto?

• 141
Técnicas de
programação

Exemplos gerais
Exemplo básico 1: Código para extrair amostras de um sinal genérico no domínio do tempo
contínuo.

Matlab
f=60; %Frequência do sinal
N=12; %Número de amostras
t=0:0.00001:1/f; %Tempo no domínio do tempo contínuo
tsamp=linspace(0,(1/f),N+1); %Tempo no domínio do tempo discreto

y=sin(2*pi*f*t); %Sinal no domínio do tempo contínuo


ysamp=sin(2*pi*f*tsamp); %Sinal no domínio do tempo discreto
plot(t,y)
hold on
stem(tsamp,ysamp)

• 142
Técnicas de
programação

Exemplos gerais
Exemplo básico 2: Código para extrair amostras de um sinal genérico no domínio do tempo
contínuo.

Scilab

Desenvolver!

• 143
Técnicas de
programação

Exemplos gerais
Exemplo básico 3: Código para calcular o valor RMS de um sinal genérico no domínio do
tempo contínuo.
Matlab
f=60; %Frequência do sinal
N=24; %Número de amostras
t=0:0.00001:1/f; %Tempo no domínio do tempo contínuo
tsamp=linspace(0,(1/f),N+1); %Tempo no domínio do tempo discreto

y=sin(2*pi*f*t); %Sinal no domínio do tempo contínuo


ysamp=sin(2*pi*f*tsamp); %Sinal no domínio do tempo discreto

n=0;
for k=1:N
n=n+(ysamp(k)^2);
end
yrms=sqrt((1/N)*n);

• 144
Técnicas de
programação

Exemplos gerais
Exemplo básico 4: Código para calcular o valor RMS de um sinal genérico no domínio do
tempo contínuo.
Scilab

Desenvolver!

• 145
Técnicas de
programação Cálculo de grandezas elétricas:
Potência monofásica - definições

• 146
Técnicas de
programação Cálculo de grandezas elétricas:
Medição clássica de energia e potência elétrica

Tensãoéchantillonnée
Tension amostrada
3

2
Energia
1

N −1
0
E =  (V n I n) Os sinais de tensão e corrente
-1 n =0 devem estar sincronizados.

-2

-3
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016
Potências
Corrente amostrada
Courant échantillonné N −1
P =  (V n I n) N
3

2
n =0
1
N −1
S = VRMS  I RMS
V n
1
=
2
0
VRMS
-1
N n =0
Q = S 2 − P2
N −1

 I n
-2
1
=
2
I RMS
-3
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016
N n =0 pf = P S
Tempo
inicial • 147
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 148
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 149
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 150
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 151
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 152
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 153
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 154
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

• 155
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

➢ A Transformada Discreta de Fourier (TDF) é um poderoso método usado


calcular fasores a partir das amostras extraídas de um sinal senoidal e/ou
cossenoidal x(t).

➢ A TDF é uma das ferramentas matemáticas mais usadas no processamento


digital de sinal. Em essência, o objetivo da TDF é computar o fasor associado à
componente fundamental do sinal, porém, ela também pode ser usada para
computar os fasores associados às componentes harmônicas eventualmente
presentes no sinal.

2 N −1   2kn   2kn 
X r − jX i =  n 
x cos
N n =0   N 
 − j sin 
 N



• 156
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

➢ A Transformada Discreta de Fourier (TDF) é um poderoso método usado


calcular fasores a partir das amostras extraídas de um sinal senoidal e/ou
cossenoidal x(t).

➢ A TDF é uma das ferramentas matemáticas mais usadas no processamento


digital de sinal. Em essência, o objetivo da TDF é computar o fasor associado à
componente fundamental do sinal, porém, ela também pode ser usada para
computar os fasores associados às componentes harmônicas eventualmente
presentes no sinal.

2 N −1   2kn   2kn 
X r − jX i =  n 
x cos
N n =0   N 
 − j sin 
 N


k=0 (componente DC)
k=1 (componente fundamental)
k=2 (harmônica de segunda ordem)
k=3 (harmônica de terceira ordem)
...

• 157
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

➢ A Transformada Discreta de Fourier (TDF) é um poderoso método usado


calcular fasores a partir das amostras extraídas de um sinal senoidal e/ou
cossenoidal x(t).

➢ A TDF é uma das ferramentas matemáticas mais usadas no processamento


digital de sinal. Em essência, o objetivo da TDF é computar o fasor associado à
componente fundamental do sinal, porém, ela também pode ser usada para
computar os fasores associados às componentes harmônicas eventualmente
presentes no sinal.

2 N −1   2kn   2kn 
X r − jX i =  n 
x cos
N n =0   N 
 − j sin 
 N


k=0 (componente DC)
k=1 (componente fundamental)
k=2 (harmônica de segunda ordem)
k=3 (harmônica de terceira ordem)
...

• 158
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

➢ Sinal de 60 Hz sendo amostrado em 720 Hz (12 x 60 Hz)

• 159
Técnicas de
programação Representação fasorial e a Transformada
Discreta de Fourier (TDF)

➢ Sinal de 61 Hz sendo amostrado em 720 Hz (12 x 60 Hz) Efeito Leakage

• 160
Técnicas de
programação

Exemplos gerais

Exemplo básico 5: Considere o sinal x(t) formado por uma componente DC, a
componente fundamental de 60 Hz, a segunda harmônica de 120 Hz e a quinta
harmônica de 300 Hz

𝜋 𝜋
𝑥 𝑡 = 0,5 + cos 120𝜋𝑡 + + 0,2cos 240𝜋𝑡 + + 0,3cos 600𝜋𝑡
4 8

A frequência de amostragem do sinal é 1440 Hz, ou seja, 24 amostras são obtidas no


intervalo de tempo de 16,66 ms, que corresponde a um período do sinal em 60 Hz.
O código a seguir computa o fasor associado à componente fundamental do sinal x(t).

• 161
Técnicas de
programação

Exemplos gerais

Matlab
f=60; %Frequência fundamental do sinal
N=24; %Número de amostras por período
t=0:0.00001:1/f; %Tempo no domínio do tempo contínuo
tsamp=linspace(0,(1/f),N+1); %Tempo no domínio do tempo discreto

%Sinal no domínio do tempo contínuo


y=0.5 + cos(120*pi*t + pi/4) + 0.2*cos(240*pi*t + pi/8) + 0.3*cos(600*pi*t);
%Sinal no domínio do tempo discreto
ysamp=0.5 + cos(120*pi*tsamp + pi/4) + 0.2*cos(240*pi*tsamp + pi/8) + 0.3*cos(600*pi*tsamp);
k=1;
x=0;
for n=1:N
x = x + ysamp(n)*(cos(2*pi*k*(n-1)/N) - 1i*sin(2*pi*k*(n-1)/N));
end
xfasor=(sqrt(2)/N)*x;

• 162
Técnicas de
programação

Exemplos gerais

Matlab
f=60; %Frequência fundamental do sinal
N=24; %Número de amostras
t=0:0.00001:1/f; %Tempo no domínio do tempo contínuo
tsamp=linspace(0,(1/f),N+1); %Tempo no domínio do tempo discreto

%Sinal no domínio do tempo contínuo


y=0.5 + cos(120*pi*t + pi/4) + 0.2*cos(240*pi*t + pi/8) + 0.3*cos(600*pi*t);
%Sinal no domínio do tempo contínuo
ysamp=0.5 + cos(120*pi*tsamp + pi/4) + 0.2*cos(240*pi*tsamp + pi/8) + 0.3*cos(600*pi*tsamp);
k=1;
x=0;
for n=1:N
x = x + ysamp(n)*(cos(2*pi*k*(n-1)/N) - 1i*sin(2*pi*k*(n-1)/N));
end
xfasor=(sqrt(2)/N)*x;

• 163
Técnicas de
programação

Exemplos gerais

Scilab

Desenvolver!

• 164
Técnicas de
programação Cálculo de grandezas elétricas:
Medição de energia e potência elétrica via TDF

Tensãoéchantillonnée
Tension amostrada
3
Equação geral
( k = 1)
2

2 N −1  2kn 
1
Xr =  xn cos N 
N n =0
0

2 N −1  2kn 
Xi =  n  N 
-1

x sin
-2
N n =0
-3
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016

Corrente amostrada
Courant échantillonné Energia e potência
3

P = (Vr  I r ) + (Vi  I i )
2

1 S = P + jQ

Q = (Vi  I r ) − (Vr  I i )
0

-1
S = P2 + Q2
-2

-3
E = P N pf = P S
0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016

Tempo
inicial • 165
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!
1) Considere o sinal x(t) operando em 60 Hz
𝜋
𝑥 𝑡 = 100. cos 120𝜋𝑡 +
4

sendo amostrado a uma taxa de 12 amostras por ciclo (período), ou seja, na frequência de
amostragem de 720 Hz. Escreva um código para computar as 36 primeiras amostras do sinal.

2) Considere o sinal x(t) operando em 60.5 Hz


𝜋
𝑥 𝑡 = 100. cos 120𝜋𝑡 +
4

sendo amostrado a uma taxa de 12 amostras por ciclo (período), ou seja, na frequência de
amostragem de 720 Hz. Escreva um código para computar as 36 primeiras amostras do sinal

• 167
Técnicas de
programação
Exercícios... A prática leva à
experiência que conduz ao conhecimento!

4) Com base nos arquivos volt_1 e current_1, escreva um código para computar os valores RMS
de tensão e corrente, as potências ativa, reativa e aparente, assim como o fator de potência,
assumindo que os sinais de tensão e corrente estejam em regime permanente durante 1 minuto.
(Método clássico)

5) Com base nos arquivos volt_2 e current_2, escreva um código para computar os valores RMS
de tensão e corrente, as potências ativa, reativa, aparente e complexa, assim como o fator de
potência, assumindo que os sinais de tensão e corrente estejam em regime permanente durante 5
minutos. (Método TDF)

6) Com base nos arquivos volt_3 e current_3, escreva um código, usando a estrutura function,
para computar os valores RMS de tensão e corrente, as potências ativa, reativa, aparente e
complexa, assim como o fator de potência, assumindo que os sinais de tensão e corrente estejam
em regime permanente para qualquer intervalo de análise. (Método TDF)

• 168
Técnicas de
programação

Atividades assíncronas extras!

✓ Regressão Linear (arquivo linear_regression)

✓ Componentes simétricas (arquivo symmetrical_components)

• 169
Técnicas de
programação

Referências

Básicas
1. Material didático criado pelo prof. Rodrigo Albuquerque.
2. Notas técnicas fornecidas pelos fabricantes dos softwares SCILAB (www.scilab.org) e MATLAB (www.mathworks.com).
3. M. Kalechman, Practical Matlab Basics for Engineers. New York, CRC Press, 2009.
4. J. Leis, Digital Signal Processing Using Matlab for Students and Researches, Wiley, 2011.

Complementares
5. A. Phadke & J. Thorp, Synchronized Phasor Measurements and Their Applications, Springer, 2008.
6. G. D’Antona & A. Ferrero, Digital Signal Processing for Measurement Systems: Theory and Applications, Springer,
2006.
7. Massachusetts Institute of Technology (MIT), Linear Regression (disponível
online: http://www.mit.edu/~6.s085/notes/lecture3.pdf).
8. R. Charnet, C. Freire, E. Charnet e H. Bonvino, Análise de Modelos de Regressão Linear com Aplicações. São Paulo,
Editora da UNICAMP, 2ª Ed., 2008.

• 170

Você também pode gostar