Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 Apresentação 5
1.1 Solução de Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1.1 Enunciado do Problema . . . . . . . . . . . . . . . . . . . . . . 5
1.1.2 Descrição Entrada/Saída . . . . . . . . . . . . . . . . . . . . . 5
1.1.3 Exemplo Manual . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.1.4 Solução MATLAB . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.5 Testando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Apresentação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.2.1 Ambiente de Trabalho . . . . . . . . . . . . . . . . . . . . . . . 10
1.2.2 Editor de Linhas de Comando . . . . . . . . . . . . . . . . . . . 10
2 Introdução 13
2.1 Introdução a Matrizes Simples . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Elementos de Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Declaração de Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4 Informações sobre a Área de Trabalho . . . . . . . . . . . . . . . . . . 17
2.5 Números e Expressões Aritméticas . . . . . . . . . . . . . . . . . . . . . 17
2.6 Números e Matrizes Complexas . . . . . . . . . . . . . . . . . . . . . . 18
2.7 Formatação de Saída . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.8 Utilização do comando help . . . . . . . . . . . . . . . . . . . . . . . . 20
2.9 Utilização do comando lookfor . . . . . . . . . . . . . . . . . . . . . . . 21
2.10 Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2
3.5.1 Matriz Diagonal ou Diagonal de uma Matriz . . . . . . . . . . . 30
3.5.2 Matrizes Triangulares . . . . . . . . . . . . . . . . . . . . . . . 31
3.5.3 Redimensionamento de Matrizes . . . . . . . . . . . . . . . . . . 31
3.5.4 Rotação dos Elementos da Matriz . . . . . . . . . . . . . . . . 32
4 Funções 33
4.1 Funções Escalares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Funções Vetoriais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.3 Funções Matriciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 Polinômios 35
6 Análise Polinomial 37
6.1 Avaliação do polinômio . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.2 Comando polyval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.3 Operações Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.3.1 Soma e subtração . . . . . . . . . . . . . . . . . . . . . . . . . 38
6.3.2 Multiplicação . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.3.3 Divisão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.4 Raízes de polinômios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
7 Gráficos 42
7.1 Gráficos X-Y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
7.1.1 Acessórios para os Gráficos . . . . . . . . . . . . . . . . . . . . 44
7.1.2 Números Complexos . . . . . . . . . . . . . . . . . . . . . . . . 46
7.2 Gráficos Polares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.3 Gráficos 3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8 Programação 51
8.1 Arquivo.m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.2 Operadores Lógicos e Relacionais . . . . . . . . . . . . . . . . . . . . . 51
8.2.1 Operadores Relacionais . . . . . . . . . . . . . . . . . . . . . . 52
8.2.2 Operadores Lógicos . . . . . . . . . . . . . . . . . . . . . . . . 52
8.3 Comandos For, While e If . . . . . . . . . . . . . . . . . . . . . . . . . 53
8.3.1 Ciclo For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
8.3.2 Comando If . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.3.3 Ciclo While . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.4 Declarando Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
3
10 Cálculo 61
10.1 Zeros de Funções . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
10.2 Minimização de Funções . . . . . . . . . . . . . . . . . . . . . . . . . . 61
10.3 Limites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
10.4 Limites à esquerda e à direita . . . . . . . . . . . . . . . . . . . . . . . 63
10.5 Integração . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
10.5.1 Solução Simbólica . . . . . . . . . . . . . . . . . . . . . . . . . 63
10.5.2 Solução Numérica . . . . . . . . . . . . . . . . . . . . . . . . . 64
10.6 Diferenciação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
10.6.1 Derivação por expressões de diferenças . . . . . . . . . . . . . . 68
10.6.2 Comando diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
10.6.3 Derivadas de ordem superior . . . . . . . . . . . . . . . . . . . . 70
10.6.4 Derivadas Trigonométricas: . . . . . . . . . . . . . . . . . . . . 71
11 Ajuste de Curvas 72
11.1 Ajuste de Curvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
11.2 Interpolação Unidimensional . . . . . . . . . . . . . . . . . . . . . . . . 73
12 Transformadas 76
12.1 Funções Degrau e Impulso . . . . . . . . . . . . . . . . . . . . . . . . . 76
12.2 Transformada de Laplace . . . . . . . . . . . . . . . . . . . . . . . . . 77
12.3 Transformada de Fourier . . . . . . . . . . . . . . . . . . . . . . . . . . 77
12.4 Transformada Z . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.5 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
12.5.1 Exercício 1: Sistemas Lineares . . . . . . . . . . . . . . . . . . . 78
12.5.2 Exercício 2: Equações Diferenciais e Transformadas . . . . . . . 79
12.5.3 Exercício 3: Transformada de Fourier . . . . . . . . . . . . . . . 81
13 SIMULINK 85
13.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
13.1.1 Diagrama de Blocos . . . . . . . . . . . . . . . . . . . . . . . . 86
13.1.2 Símbolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2 Conhecendo o Simulink . . . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2.1 Iniciando o Simulink . . . . . . . . . . . . . . . . . . . . . . . . 87
13.2.2 Construindo e analisando um modelo simples . . . . . . . . . . . 88
13.2.3 Exemplo: Modelo de um processo biológico . . . . . . . . . . . . 90
13.3 Principais blocos do Simulink e suas funções . . . . . . . . . . . . . . . 96
13.3.1 Principais Fontes(Sources): . . . . . . . . . . . . . . . . . . . . 98
13.3.2 Principais blocos usados na modelgem de sistemas dinâmicos . . 98
13.3.3 Verificação do modelo . . . . . . . . . . . . . . . . . . . . . . . 98
13.3.4 Blocos de saídas(Sinks) . . . . . . . . . . . . . . . . . . . . . . 99
13.3.5 Criando blocos de sub-sistemas . . . . . . . . . . . . . . . . . . 99
13.3.6 Blocos condicionais . . . . . . . . . . . . . . . . . . . . . . . . 99
13.3.7 Personalizando o modelo e manipulando Blocos . . . . . . . . . 99
4
1 Apresentação
1.1 Solução de Problemas
A solução de problemas é parte essencial não somente dos cursos de engenharia, mas
também dos cursos de Matemática, Física, Química e Ciência da Computação. Logo, é
importante uma base sólida em solução de problemas. Também é de grande auxílio um
embasamento suficiente para trabalhar em todas estas áreas, para que não tenhamos
que aprender uma técnica para problemas de matemática, e uma técnica diferente para
problemas de física, e assim por diante.
5
Figura 1: Diagrama I/0
p1 = (1, 5)
p2 = (4, 7)
Queremos calcular a distância entre dois pontos, que é a hipotenusa de um triângulo
retângulo, conforme mostra a Figura 2. Usando o Teorema de Pitágoras, podemos cal-
cular a distância d com a seguinte equação:
q
d= S12 + S22
q
d= (4 − 1)2 + (7 − 5)2
√
d= 13
d = 3.61
6
Figura 2: Triangulo retângulo
%
% Este programa calcula e imprime
% distância, em linha reta, entre dois pontos.
p1 = [1,5]; % ponto 1 inicial
p2 = [4,7]; % ponto2 inicial
d = sqrt (sum ((p2-p1).^2)) % calcular distância
1.1.5 Testando
O passo final em nosso processo de solução de problemas é testar a solução. Primeira-
mente, devemos testar a solução com os dados do exemplo manual, já que calculamos
a solução. Quando os comandos MATLAB na solução são executados, o computador
mostra a seguinte saída:
d = 3.6056
Esta saída coincide com o valor que calculamos no exemplo manual. Se a solução
MATLAB não coincidir com o exemplo manual, devemos rever ambas soluções a fim
de encontrar o erro. Uma vez que a solução trabalha com o exemplo manual, devemos
também testá-la com vários grupos de dados para certificar que a solução é válida para
outras séries de dados.
7
1.2 Apresentação
O MATLAB
R
pode ser usado como uma linguagem de programação ou como uma
ferramenta de cálculo interativa. Em ambos os casos, o ambiente MATLAB permite a
realização de cálculos, visualização de resultados e desenvolvimento de algoritmos usando
uma sintaxe muito próxima da notação matemática usual.
O nome MATLAB vem de MATrix LABoratory e representa bem o seu modo de
funcionamento. Todas as variáveis são definidas de forma matricial, o que faz com
que este ambiente seja ideal para resolver problemas de cálculo envolvendo matrizes e
vetores.
Um arquivo de programa MATLAB recebe a extensão .m e, por isso, também é
chamado de m-file ou arquivo .m. Ele pode ser criado e/ou modificado no editor próprio
do MATLAB - MATLAB Editor/Debugger - que possui características que auxiliam
bastante na edição de programas como auto-colorização de palavras de acordo com a
sintaxe e interação com o ambiente de cálculo do MATLAB. Existem também os arquivos
.mat que são arquivos binários que contém as variáveis da Workspace. Estes arquivos
são gerados indo em
Aerospace Blockset
Biblioteca que utiliza os fundamentos do SIMULINK para prover ferramentas espe-
cializadas para o desenvolvimento de ferramentas de modelagem, integração e simulação
de aeronaves, naves espaciais, mísseis sistemas de propulsão ou subsistemas.
Bioinformatics Toolbox
8
Aplicativo MATLAB que possui ferramentas especializadas para análise de genoma,
visualização e normalização de micro vetores e análise das propriedades de proteínas.
Communications Blockset
Aplicativo SIMULINK composto por cerca de 150 blocos do SIMULINK dedicados
às áreas de desenvolvimento de projeto, simulação e análise de sistemas de comunicação
digitais e analógicos.
Financial Toolbox
Aplicativo MATLAB para área financeira (estudo de preços, cálculo de juros e inves-
timentos, análise de derivativos e otimização de portifólios).
Statistics e Optimization Toolboxes são necessários para o funcionamento do Finan-
cial Toolbox.
Mapping Toolbox
Aplicativo MATLAB composto por funções para tratamento de mapas e informações
cartográficas (por exemplo: coordenadas cartográficas, deformações, representações tri-
dimensionais).
Statistics Toolbox
Aplicativo MATLAB para área de estatística, incluindo além de ferramentas estatís-
ticas básicas de análise de dados, recurso de modelagem e análise estatística de modelos
lineares e não-lineares.
SimMechanics
9
Biblioteca de blocos do SIMULINK que possibilita a modelagem e simulação de sis-
temas mecânicos, tais como: componentes mecânicos (corpos e juntas), simulação de
movimentos, etc.
>> A = [1 2 3; 4 5 6; 7 8 7]
Colocam-se colchetes em torno dos dados e separam-se as linhas por ponto e vírgula.
Quando se pressiona a tecla <enter> o MATLAB responde com:
A =
1 2 3
4 5 6
7 8 7
>> B = inv(A)
B =
-2.1667 1.6667 -0.5000
2.3333 -2.3333 1.0000
-0.5000 1.0000 -0.5000
10
efetuar o cálculo de:
s !
π
log tan
5
Como para calcular a raiz quadrada o comando certo é sqrt, o MATLAB responde
com uma mensagem de erro:
NOTA: Todas as funções que utilizam algum tipo de ângulo em seus argumentos
interpretam tal ângulo como sendo em radianos.
O Matlab possui diversas variáveis predefinidas, incluindo pi, Inf, NaN, i e j. Três
exemplos são mostrados abaixo:
>> z = 3 + 4*i
z =
3.0000 + 4.0000i
>> Inf
ans =
Inf
>> 0/0
Warning: Divide by zero.
ans =
NaN
11
pode ser usada em vez de i nas operações aritméticas com números complexos por
aqueles que a preferem. Estas variáveis predefinidas podem ser redefinidas. É claro
que elas podem ser redefinidas intencionalmente a fim de liberar o nome da variável
para outros usos. Por exemplo, pode-se querer usar i como inteiro e reservar j para
a aritmética com números complexos. Seja cauteloso e deixe estes nomes de variáveis
predefinidas intocados, pois há uma infinidade de nomes alternativos que podem ser
usados. As variáveis predefinidas podem ser realocadas aos seus valores default usando
o comando clear nome da variável (por exemplo, clear pi).
12
2 Introdução
O MATLAB trabalha essencialmente com um tipo de objeto: uma matriz numérica
retangular podendo conter elementos complexos. Observa-se que um escalar é uma
matriz de dimensão 1x1 e que um vetor é uma matriz que possui somente uma linha ou
uma coluna.
>> A=[1 2 3; 4 5 6; 7 8 7]
A =
1 2 3
4 5 6
7 8 7
A=
[1 2 3
4 5 6
7 8 7]
13
A=
[1 2 3
4 5 6
7 8 7]
>>matriz
O comando load pode ler matrizes geradas pelo MATLAB e armazenadas em arquivos
binários ou matrizes geradas por outros programas armazenadas em arquivos ASCII. As-
sim, para ler um arquivo .mat chamado matriz.mat segue-se a seguinte estrutura: load
matriz.mat, e as variáveis salvas no arquivo binário matriz.mat serão carregadas na
Workspace.
Outra forma de gerar matrizes é através de ciclos for. Por exemplo, para gerar uma
matriz M com i linhas e j colunas, a seguinte estrutura pode ser utilizada:
>> M
M =
2 3 4
3 4 5
4 5 6
14
2.2 Elementos de Matrizes
Os elementos das matrizes podem ser quaisquer expressões do MATLAB. Por exem-
plo:
Um elemento individual da matriz pode ser referenciado com índice entre parênteses.
Continuando o exemplo:
>> r= [ 10 11 12];
>> A= [A;r]
A =
1 2 3
4 5 6
7 8 7
10 11 12
Nota-se que o vetor r não foi listado porque ao seu final foi acrescentado “;”.
>> A = A(1:3,:)
A =
1 2 3
4 5 6
7 8 7
15
Seleciona da linha 1 até a linha 3 e todas as colunas da matriz A atual.
Ou simplesmente:
>> expressao
>> 1900/81
ans=
23.4568
16
assim a e A não são as mesmas variáveis, exceto para os argumentos do comando
help . Todas as funções devem ser escritas em letras minúsculas: inv(A) calcula a
inversa de A, mas INV(A) é uma função indefinida.
>> who
>> whos
Name Size Bytes Class
Cada elemento de uma matriz real requer 8 bytes de memória, assim a matriz A de
dimensão 4x3 faz uso de 96 bytes e todas as variáveis utilizadas um total de 296 bytes.
17
mostrados alguns exemplos de números aceitos:
3 -99 0.00001
9.637458638 1.602E-20 6.06375e23
As expressões podem ser construídas através dos operadores aritméticos usuais e das
regras de precedência:
∧
1 Potenciação
2 / Divisão à direita
2 \ Divisão à esquerda
3 * Multiplicação
4 + Adição
4 - Subtração
Deve-se notar que existem dois símbolos para divisão: as expressões 1/4 e 4\1 pos-
suem o mesmo valor numérico, isto é, 0.25.
São usados parênteses na sua forma padrão para alterar a procedência usual dos
operadores aritméticos.
>> z= 3 + 4*i
ou
>> z= 3 + 4*j
Sabendo que um número complexo é constituído por uma parte real Re e por uma
parte imaginária Im, tal que:
z = Re + Im*i
18
>> z= r*exp(i*theta)
em que:
>> r = abs(z)
>> theta = angle(z)*180/pi
ou
>> real(A)
ans =
1 2
3 4
>> imag(A)
ans =
5 6
7 8
19
>> x = [-1 0 1]
x =
-1 0 1
Se pelo menos um dos elementos da matriz não é inteiro exato, existem várias pos-
sibilidades de formatar a saída. O formato padrão, chamado de formato short, mostra
aproximadamente 5 dígitos significativos ou usam notação científica. Para modificar o
formato da saída, devemos inserir o comando format. A tabela abaixo mostra os princi-
pais formatos:
>> X = 1e20*x
X =
1.0e+020 *
1.3333 0 0.0000
Com o comando format + os símbolos “+”, “-”, e “espaço em branco” são mostra-
dos, respectivamente para representar elementos positivos, elementos negativos e zeros.
>> help
Para obter informações sobre um tópico específico, referir help tópico. Por exemplo,
20
>> help plot
2.10 Funções
As potencialidades do MATLAB residem no seu extenso conjunto de funções. O
MATLAB possui um grande número de funções intrínsecas que não podem ser alteradas
pelo utilizador. Outras funções estão disponíveis numa biblioteca externa distribuída
com o programa original (MATLAB TOOLBOX), que são na realidade arquivos com a
extensão “.m” criados a partir das funções intrínsecas. As categorias gerais de funções
matemáticas disponíveis no MATLAB incluem:
- Matemática elementar;
- Funções especiais;
21
- Matrizes elementares;
- Matrizes especiais;
- Decomposição e fatoração de matrizes;
- Análise de dados;
- Polinômios;
- Solução de equações diferenciais;
- Equações não-lineares e otimização;
- Integração numérica;
- Processamento de sinais;
- Entre outras
22
3
Manipulação de Matrizes e Vetores
3.1 Operações com Matrizes
O MATLAB possui dois tipos diferentes de operações aritméticas. As operações arit-
méticas matriciais são definidas pelas regras da Álgebra Linear. As operações aritméticas
com arrays (conjuntos) são efetuadas elemento por elemento. O caractere de ponto dec-
imal “.” distingue as operações matriciais das operações com arrays. No entanto, como
as operações matriciais e com arrays são iguais para a soma e para a subtração, o par
de caracteres “.+” e “.-” não é usado para estas.
As operações com matrizes no MATLAB são as seguintes:
- Transposição;
- Adição;
- Subtração;
- Multiplicação;
- Divisão à direita;
- Divisão à esquerda;
- Potenciação.
3.1.1 Transposição
O caractere apóstrofo ( ’ ) indica a transposta de uma matriz, por exemplo:
>>Z = [1 2; 3 4] + [5 6; 7 8]*i
Z =
1.0000+ 5.0000i 2.0000+ 6.0000i
3.0000+ 7.0000i 4.0000+ 8.0000i
>>Z1 = Z’
Z1 =
1.0000- 5.0000i 3.0000- 7.0000i
2.0000- 6.0000i 4.0000- 8.0000i
Para obter simplesmente a transposta de Z deve-se usar Z.’, como mostra o exemplo:
23
>>Z2 = Z.’
Z2 =
1.0000+ 5.0000i 3.0000+ 7.0000i
2.0000+ 6.0000i 4.0000+ 8.0000i
>> Z3 = Z.’’
Z3 =
1.0000 - 5.0000i 2.0000 - 6.0000i
3.0000 - 7.0000i 4.0000 - 8.0000i
>> y = [1 2; 3 8] - 1
y =
0 1
2 7
3.1.3 Multiplicação
A multiplicação de matrizes é indicada por “*”. A multiplicação x*y é definida
somente se a segunda dimensão de x for igual à primeira dimensão de y.
Naturalmente, um escalar pode multiplicar ou ser multiplicado por qualquer matriz.
Por exemplo:
24
Se os tamanhos das matrizes forem incompatíveis para a operação matricial, será
gerada uma mensagem de erro, com exceção do caso de operações entre escalares e
matrizes (para adição, subtração, divisão e multiplicação).
3.1.4 Divisão
A divisão de matrizes requer especial atenção, pois existem dois símbolos para divisão
de matrizes no MATLAB “\” e “/”". Se A for uma matriz inversível quadrada e b for um
vetor coluna (ou linha) compatível, então A\b e b/A corresponderão respectivamente à
multiplicação à esquerda e à direita da matriz b pela inversa da matriz A, ou inv(A)*b
e b*inv(A), mas o resultado é obtido diretamente:
Deve-se ter o cuidado de observar as dimensões das matrizes que estão envolvidas
na operação, o número de colunas de A deve ser igual ao número de linhas de b em
A\b, já em b/A o número de linhas de A deve ser igual ao número de colunas de b em
A\b. A divisão à direita é definida em termos da divisão à esquerda por:
b/A = (A’\b)
3.1.5 Potenciação
A expressão A∧ p eleva A à p-ésima potência e é definida se A é matriz quadrada
e p um escalar. Se p é um inteiro maior do que um, a potenciação é calculada como
múltiplas multiplicações.
Se A é uma matriz e a é um escalar, a∧ A calcula o escalar elevado à matriz A
fazendo uso dos autovalores e autovetores.
NOTA: X∧ A, sendo X e A matrizes, apresenta erro.
25
3.2.2 Multiplicação e Divisão
A multiplicação de conjuntos é indicada por “.*”. Se A e B são matrizes com as
mesmas dimensões, então A.*B indica um conjunto cujos elementos são simplesmente
o produto dos elementos individuais de A e B. As expressões A./B e A.\B formam um
conjunto cujos elementos são simplesmente os quocientes dos elementos individuais de
A e B. Assim:
3.2.3 Potenciação
A potenciação de conjuntos é indicada por “ .∧ ”. A seguir são mostrados alguns
exemplos utilizando os vetores x e y. A expressão:
A potenciação pode usar um escalar:
>> 2.^x
ans =
2 4 8
26
>> x = 1 : 5
x =
1 2 3 4 5
Outros incrementos, diferentes da unidade podem ser utilizados, como seja o caso
do seguinte exemplo que impõe um incremento de pi/4.
>> y = 0 : pi/4 : pi
y =
0 0.7854 1.5708 2.3562 3.1416
A exceção para essa função é quando x2 = π. Caso isso ocorra, os k pontos estarão
espaçados desde 10x1 até π.
27
>> eye(m,n)
>> ones(m,n)
>> zeros(n,m)
>> rand(m,n)
>> randn(m,n)
Cabe salientar que em uma distribuição normal, 68% dos valores estão compreendidos
entre – 1 e 1.
O comando magic(n) cria uma matriz quadrada integral de dimensões n x n (linhas
e colunas têm a mesma soma).
28
>>x=magic(4)
A =
1 2 3
4 5 6
7 8 9
A declaração:
29
A =
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
>> A(1:5,7:10)
ans =
7 8 9 10
17 18 19 20
27 28 29 30
37 38 39 40
47 48 49 50
É uma submatriz 5x4 que consiste nas primeiras cinco linhas e nas últimas quatro
colunas.
Utilizando os dois pontos no lugar de um subscrito denota-se todos elementos da
linha ou coluna. Por exemplo,
>> A(1:2:5,:)
ans =
1 2 3 4 5 6 7 8 9 10
21 22 23 24 25 26 27 28 29 30
41 42 43 44 45 46 47 48 49 50
É uma submatriz 3x10 que consiste da primeira, terceira e quinta linhas e todas
colunas da matriz A.
30
>> x=[1 2 3 1 -1 4];
>> diag(x)
ans =
1 0 0 0 0 0
0 2 0 0 0 0
0 0 3 0 0 0
0 0 0 1 0 0
0 0 0 0 -1 0
0 0 0 0 0 4
Se A for uma matriz quadrada, então diag(A) será um vetor cujos componentes são
os elementos da diagonal de A.
triu(A);
tril(A);
31
>>A(m,n)
>> B = reshape(A,n,m)
>> A=[1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B=reshape(A,3,2)
B =
1 5
4 3
2 6
>>rot90(A,k)
A =
1 2 3
4 5 6
>> rot90(A,1)
ans =
3 6
2 5
1 4
32
4 Funções
4.1 Funções Escalares
Algumas funções no MATLAB operam essencialmente sobre escalares, mas operam
sobre cada elemento se aplicadas a uma matriz. As funções escalares mais comuns são:
exp Exponencial;
ebs Valor absoluto;
log Logaritmo natural;
log10 Logaritmo base 10;
sqrt Raiz quadrada;
sin Seno;
asin Arco seno;
cos Coseno;
acos Arco Coseno;
tan Tangente;
atan Arco Tangente;
round Arredondamento ao inteiro mais próximo;
floor Arredondamento ao inteiro mais próximo na direção de menos infinito;
ceil Arredondamento ao inteiro mais próximo na direção de mais infinito;
rem Resto da divisão;
sign Para cada elemento de x, sign(x) retorna 1 se o elemento é maior
que zero, 0 se é igual a zero e -1 se ele é menor que zero
33
4.3 Funções Matriciais
Uma boa aplicação do MATLAB é suas funções matriciais. Dentre as mais usadas
estão essas:
» P=[1 0 0; 0 2 2; 2 3 1]
P =
1 0 0
0 2 2
2 3 1
» inv(P)
ans =
1.0000 0 0
-1.0000 -0.2500 0.5000
1.0000 0.7500 -0.5000
» poly(P)
ans =
1 -4 -1 4
» size(P)
ans =
3 3
» det(P)
ans =
-4
34
5 Polinômios
Embora o MATLAB não permita trabalhar diretamente com polinômios, dispõe de
um conjunto de funções dedicadas à sua manipulação.
Os polinômios são representados no MATLAB por vetores linhas que contêm os
coeficientes das sucessivas potências do polinômio ordenados por ordem significativa de-
crescente. Vamos ilustrar com um exemplo:
» p = [1 -6 -72 -27]
p =
1 -6 -72 -27
» x=roots(p)
x =
12.1229
-5.7345
-0.3884
» p=poly(x)
p =
1.0000 -6.0000 -72.0000 -27.0000
x2 + 2x + 4 = 0
ax2 + 2ax + 4a = 0
ax2 + 2ax + 4a = 0
Além das duas operações já citadas há ainda as básicas, soma, subtração, multipli-
cação e divisão. Soma e subtração faz-se normalmente sem maiores problemas, para
multiplicação usa-se conv e para a divisão deconv.
35
Exemplo:
36
6Análise Polinomial
Este capítulo traz uma série de comandos no MATLAB para a análise polinomial.
Primeiro vamos discutir meios de avaliar os polinômios e como trabalhar o seu compor-
tamento. Uma aplicação deste conceito está na modelagem da altitude e velocidade
de um balão. A seguir definiremos as raízes dos polinômios. Polinômios normalmente
aparecem em aplicações da Engenharia e na Ciência em geral porque eles constituem
ainda bons modelos para representar sistemas físicos.
Exemplo 1
a = [3,-0.5,0,1,-5.2];
f = polyval(a,x);
37
Esses comandos também podem ser combinados em um só:
f = polyval([3,-0.5,0,1,-5.2],x);
O tamanho de f terá que ser igual ao tamanho de x, seja ele um escalar, vetor ou
matriz.
Supondo que queiramos o valor da função g(x) = −x5 + 3x3 − 2.5x2 − 2.5 para x
no intervalo de [0,5]:
x:0:0.025:5;
a = [-1,0,3,-2,5,0,-2.5];
g = polyval(a,x)
38
6.3.2 Multiplicação
A multiplicação polinomial é efetuada por meio do comando conv (que faz a con-
volução entre dois conjuntos). A multiplicação de mais de dois polinômios requer o uso
repetido de conv.
m = conv(g,h)
6.3.3 Divisão
No MATLAB a divisão de polinômios é feita através do comando deconv:
[q,r] = deconv(g,h)
Esse resultado nos diz que g dividido por h nos dá o polinômio de quociente q e resto
r.
f (x) = x2 + x − 6
f (x) = (x − 2)(x + 3)
As raízes da equação são os valores de x para os quais a função f(x) é igual a zero,
ou seja, x = 2 e x = -3.
No gráfico, as raízes são valores onde a função corta o eixo x. Um polinômio do
terceiro grau tem exatamente três raízes que podem ser:
- três raízes reais;
- três raízes iguais;
39
- uma raiz real e duas raízes iguais;
- uma raiz real e um par conjugado de raízes complexas.
Se a função f(x) for um polinômio de grau n, ela terá exatamente n raízes. Estas n
raízes podem conter múltiplas raízes ou raízes complexas.
No MATLAB, um polinômio é representado por um vetor linha dos seus coeficientes
em ordem decrescente. Observe que os termos com coeficiente zero têm de ser incluídos.
Dada esta forma, as raízes do polinômio são encontradas usando-se o comando roots
do MATLAB. Já que tanto um polinômio quanto suas raízes são vetores no MATLAB,
o MATLAB adota a convenção de colocar os polinômios como vetores linha e as raízes
como vetores coluna. Para ilustrar este comando vamos determinar as raízes do seguinte
polinômio:
f (x) = x3 − 2x2 − 3x + 10
No MATLAB:
p = [1,-2,-3,10];
r = roots(p)
r = roots([1,-2,-3,10]);
a = poly ([-1,1,3]’);
Exemplo 3
Determine as raízes dos seguintes polinômios e plote seu gráfico, com seu eixo apro-
priado, com o objetivo de verificar se o polinômio atravessa o eixo x bem nos locais das
raízes.
a. f (x) = x3 − 5x2 + 2x + 8
40
b. g(x) = x2 + 4x + 4
c. h(x) = x5 + 3x4 − 11x3 + 27x2 + 10x − 24
d. i(x) = x5 − 3x3 + 4x2 − 1
41
7 Gráficos
A construção de gráficos no MATLAB é mais uma das potencialidades do sistema.
Através de comandos simples pode-se obter gráficos bidimensionais ou tridimensionais
com qualquer tipo de escala e coordenada. No MATLAB existe uma vasta biblioteca de
comandos gráficos.
42
• Se X é uma matriz e Y é um vetor, plot(X,Y) exibe sucessivamente as linhas ou
colunas de X versus o vetor Y.
O segundo método (e mais fácil) de exibir gráficos com múltiplas linhas faz uso do
comando plot com múltiplos argumentos. Vamos explorá-lo em um exemplo mais detal-
hado. Primeiramente, preparemos os dados, escolhendo o domínio e as funções a serem
mostradas:
>> x = 0:0.3:30;
>> y1 = exp(-.01*x).*sin(x);
>> y2 = exp(-.05*x).*sin(.7*x);
>> y3 = exp(-.1*x).*sin(.5*x);
>> figure(1)
O comando figure abre uma janela gráfica intitulada “Figure No.1". Este comando
é opcional; se não for utilizado, o MATLAB abrirá uma janela gráfica padrão. Agora
utilizaremos a função plot para plotar os três gráficos na mesma janela:
>> set(h,’LineWidth’,2,’LineStyle’,’--’)
>> set(h,’Color’,’r’)
Se desejássemos alterar apenas uma das curvas, passaríamos para o comando ’set’
um elemento do vetor (h(2), por exemplo).
43
Vejamos resumidamente os principais tipos de linhas e cores:
Para adicionarmos anotações no gráfico, como identificação dos eixos, título e leg-
enda, usamos os seguintes comandos:
Eixos:
Legenda e título:
Obs.: Se dois gráficos tiverem sido adicionados separadamente em uma janela gráfica,
o argumento de referência não é utilizado no comando ’legend’.
E eis o gráfico resultante:
Para plotar mais de um gráfico na mesma janela, têm-se três opções. A primeira foi
utilizada no exemplo anterior, que seria usar um único comando com vários argumentos.
A segunda é ativar a propriedade hold, que permite a inserção de dois ou mais gráficos,
44
Figura 3: Resultante
>> hold on
Dessa forma, os gráficos serão sobrepostos em uma mesma janela gráfica. No en-
tanto, se não desejarmos mais essa função ativa, basta digitar:
E por última opção temos o comando subplot, que divide uma janela gráfica em
várias janelas no seu interior.
>>subplot(2,2,3)
Este comando divide a janela gráfica em uma matriz 2x2 (4 elementos portanto) e
prepara o terceiro elemento (linha 2, coluna 1) para receber futuros gráficos.
45
7.1.2 Números Complexos
Quando os argumentos a exibir são complexos, a parte imaginária é ignorada, exceto
quando é dado simplesmente um argumento complexo. Para este caso especial é exibida
a parte real versus a parte imaginária. Então, plot(Z), quando Z é um vetor complexo,
é equivalente a plot(real(Z),imag(Z)).
>> Z=[1+i*1;3+i*3;5+i*5;7+i*10;9+i*15];
>> plot(real(Z),imag(Z))
7.3 Gráficos 3D
A rede de superfície pode ser gerada por um conjunto de valores em uma matriz.
Cada ponta na matriz representa o valor da superfície que corresponde ao ponto na tela.
Para gerar um arquivo que representa uma superfície 3D, primeiramente calculamos
o conjunto dos valores de x e y que representam as variáveis independentes e depois
calculamos os valores de z que representam os valores da superfície. O comando no
MATLAB para plotar gráficos 3D é mesh(z).
O comando meshgrid tem os argumentos do vetor x e y, ou seja transforma o domínio
especificado pelos vetores x e y em vetores que podem ser usados em cálculos de funções
46
Figura 4: Gráfico em coordenadas polares
Exemplo: Gerar o gráfico 3D da função -0.5 < x < 0.5 ; -0.5 < y < 0.5 ;
f (x, y) = z = 1 − x2 − y 2
1 = |x2 + y 2 + z 2 |
Solução:
[xgrid,ygrid]=meshgrid(-0.5:0.1:0.5,-0.5:0.1:0.5);
z=sqrt(abs(1 - xgrid.^2 - ygrid.^2));
mesh(z);
47
Figura 5: Gráfico em 3D
48
Exemplo: Rotação horizontal:
f (x, y) = z = 1 − x2 − y 2
1 = |x2 + y 2 + z 2 |
Solução:
49
Exemplo: Rotação vertical:
f (x, y) = z = 1 − x2 − y 2
1 = |x2 + y 2 + z 2 |
Solução:
>> [xgrid,ygrid]=meshgrid(-0.5:0.1:0.5;-0.5:0.1:0.5);
>> z=sqrt(abs)1 - xgrid.^2 - ygrid.^2));
>> mesh(z,[-37.5,-30]);
50
8 Programação
8.1 Arquivo.m
Os comandos do MATLAB são normalmente introduzidos através da janela de co-
mando, onde uma única linha de comando é introduzida e processada imediatamente.
O MATLAB é, no entanto, capaz também de executar seqüências de comandos ar-
mazenadas em arquivos.
Os arquivos que contêm as declarações do MATLAB são chamados arquivos ”.m“,
e consistem em seqüências de comandos normais do MATLAB, possibilitando incluir
outros arquivos ”.m“ escritos no formato texto (ASCII).
Para editar um arquivo texto na janela de comando do MATLAB selecione New M-
File para criar um novo arquivo ou Open M-File para editar um arquivo .m já existente,
a partir do menu File.
Os arquivos podem, também, ser editados fora do MATLAB utilizando qualquer
editor de texto. Para isso, basta salvar os arquivos com a extensão ”.m“.
Para executar um programa do tipo M-File, deve-se selecionar Run Script, também
a partir do menu File.
Existem alguns comandos e declarações especiais para serem usadas nos arquivos.
Alguns comandos importantes para se trabalhar com arquivos.m são:
51
8.2.1 Operadores Relacionais
Símbolo Descrição
< Menor
<= Menor ou igual
> Maior
>= Maior ou igual
== Igual
∼= Diferente
A comparação é feita entre os pares de elementos correspondentes e o resultado
é uma matriz composta de números um(1) e zero(0), representando respectivamente
verdadeiro e falso.
Por exemplo:
» 2+2 ~ = 4
ans =
0
Observação: Apenas os operadores ”==“ e ”∼=“ testam tanto a parte real como a
imaginária, os demais, apenas a parte real.
52
resposta verdadeiro ou falso. Exemplo:
» A = [ 1 0 1
0 0 0
1 1 1]
A =
1 0 1
0 0 0
1 1 1
» B= [ 0 1 0
0 0 1
-1 10 0]
B =
0 1 0
0 0 1
1 1 0
» A&B
ans =
0 0 0
0 0 0
1 1 0
Note que foi aplicado o operador lógico AND e esse comparou cada elemento da
matriz A com cada elemento da matriz B, sendo que sua resposta pode ser apenas 0 ou
1. Sendo que qualquer número diferente de 0, inclusive os negativos, é considerado 1
pois o MATLAB trabalha na linguagem binária.
Os operadores lógicos possuem a precedência mais baixa relativamente aos oper-
adores aritméticos e relacionais.
A precedência entre os operadores lógicos se dá da seguinte maneira:
53
linguagem de programação C, mas com uma estrutura diferente. Nas próximas seções
deste capítulo apresentaremos a estrutura de tomada de decisões IF e os dois comandos
para gerar loops no MATLAB: o comando FOR e o comando WHILE.
for i=1:5,
x(i)=i^2;
end
for i = 1:8
for j = 1:8,
A(i,j) = i + j;
B(i,j) = i - j;
end
end
C= A + B
C =
2 2 2 2 2 2 2 2
4 4 4 4 4 4 4 4
6 6 6 6 6 6 6 6
8 8 8 8 8 8 8 8
10 10 10 10 10 10 10 10
12 12 12 12 12 12 12 12
14 14 14 14 14 14 14 14
16 16 16 16 16 16 16 16
C = A + B −→ C = ( i + j ) + ( i - j ) −→ C = 2i
54
8.3.2 Comando If
Esta instrução permite que executemos um comando se a expressão lógica é ver-
dadeira e um diferente comando se a expressão é falsa. A forma geral do comando if
combinada à instrução else é mostrada a seguir:
if expressão
grupo de comandos A
else
grupo de comandos B
end
for i = 1:5,
for j = 1:5,
if (i == j)
A(i,j)=2;
else if (abs(i-j) == 1)
A(i,j) = -1;
else
A(i,j) = 0;
end
end
end
end
A
A =
2 -1 0 0 0
-1 2 -1 0 0
0 -1 2 -1 0
0 0 -1 2 -1
0 0 0 -1 2
Neste exemplo fizemos o uso do comando if, sendo que utilizamos, o que é normal,
um dentro de outro. Sempre lembrando que no uso do comando if devemos ter uma
seqüência que executa caso a condição seja verdadeira e outra que não é requerida, mas
pode-se ter também, que execute um outro processo caso a condição seja falsa (else).
Após o ciclo, pediu-se o valor da variável A para sabermos se realmente o comando
funcionou.
55
Primeiro abra o menu File vá em New e em seguida seleciona M-file
Agora na janela correspondente ao M-File escreva o seguinte comando:
a=1;b=15;
while a<b,
clc
disp(’loop em curso’)
a=a+1
b=b-1
pause(2)
end
clc
disp(’fim do loop’)
Antes de mais nada, salve o arquivo como loop.m na mesma pasta onde você está
rodando o programa.
Nesse comando teremos uma comparação de dados entre as variáveis a e b começando
com a valendo 1 e b valendo 15 e enquanto a for menor que b o ciclo segue e a cada
ciclo a variável a é incrementada em 1 e a b perde uma unidade, isso ocorrerá até que
a fique maior que b. Também é importante salientar o comando pause que é o tempo
que o ciclo irá levar a mais que o normal, pois como sabemos o processamento se daria
em frações de segundos e consequentemente não poderíamos observar o comando, por
isso o pause de 2 segundos.
Agora volte a janela de comando e digite loop que a instrução toda será processada.
function f = hema(x)
f = x/24/30/12
Abrimos o M-File e digitamos function f e após isso igualamos a uma função que
criaremos, no caso hema, que significa horas em ano sendo uma transformação. Na
56
linha abaixo igualamos a função f ao corpo da função hema. E por último temos a nossa
variável de entrada que é o x, que representa as horas. Pronto, agora basta salvar esse
arquivo com o nome idêntico da função hema, após isso vamos à janela de comando
principal e chamamos pela nova função:
» hema(8640)
f =
1
ans =
1
57
9
Sistemas de Equações Lineares
9.1 Interpretação gráfica
A interpretação gráfica é necessária para solução a sistemas de equações lineares
ocorrente freqüentemente em problemas de engenharia. Há vários métodos existentes
para solucionar sistemas de equações, mas eles envolvem operações demoradas com
grande oportunidade de erro. Entretanto temos que entender o processo para que pos-
samos corrigir e interpretar os resultados do computador. Uma equação linear com duas
variáveis, semelhante a 2x - y = 3, define uma linha reta e é escrita na forma y = mx
+ b, onde m é o coeficiente angular e b o coeficiente linear. Podemos escrever y =
2x - 3. Se tivermos 2 equações lineares, elas podem representar 2 diferentes retas que
se interceptam em um mesmo ponto, ou elas podem representar 2 retas paralelas que
nunca se interceptam ou ainda podem representar a mesma reta. Estas possibilidades
são vistas na Figura 8.
Equações que representam duas retas que se interceptam podem ser facilmente iden-
tificadas porque possuem diferentes coeficientes angulares.
Exemplo:
58
y = 2x − 3 y = −x + 3
Equações que representam duas retas paralelas possuem o mesmo coeficiente angular
e coeficientes lineares diferentes.
Exemplo:
y = 2x − 3 y = 2x + 1
Equações que representam a mesma reta são equações com mesmo coeficiente an-
gular e mesmo coeficiente linear.
Exemplo:
y = 2x − 3 3y = 6x − 9
Se tivermos duas equações com três variáveis, elas podem representar dois planos
que se interceptam em uma linha, ou podem representar dois planos paralelos ou ainda
podem representar o mesmo plano.
Essas idéias podem ser estendidas para mais de três variáveis, porém se torna difícil
a visualização desta situação. Em muitos sistemas de engenharia estamos interessados
em determinar se existe uma solução comum para sistemas de equações. Se a solução
comum existe então podemos determiná-la. Vamos discutir dois métodos para solução
de sistemas de equação usando MATLAB.
3x + 2y − z = 10
−x + 3y + 2z = 5
x − y − z = −1
A = 3 2 -1 x = x B = 10
-1 3 2 y 5
1 -1 -1 z -1
Ax = B
59
9.3 Divisão de matrizes
No MATLAB, um sistema de equações simultâneas pode ser resolvido usando divisão
de matrizes. A solução da equação da matriz Ax = B pode ser calculada usando divisão
A\B.
Exemplo: Ax = B
A = 3 2 -1 x = x B = 10
-1 3 2 y 5
1 -1 -1 z -1
A−1 ∗ Ax = A−1 ∗ B
I ∗ x = A−1 ∗ B
ou
x = A−1 ∗ B;
X = inv(A)*B;
60
10 Cálculo
10.1 Zeros de Funções
O MATLAB encontra zeros de funções usando o comando fzero. A função, da qual
deseja-se encontrar os zeros, deve ser definida em um arquivo .m como definido previ-
amente. Considere a seguinte função f (x) = sin(x) - cos(x). A função func1 é então
escrita:
function f = func1(x);
f = sin(x) - cos(x);
A raiz pode ser determinada usando o comando fzero no comand window do MAT-
LAB ou no interior de um arquivo .m.
>> fzero(’func1’,1)
ans =
0.7854
Note que o segundo argumento, 1, é um chute inicial para o cálculo da raiz. Note
também que o valor do ângulo x que satisfaz f (x) = 0 está em radianos (0.7854 radianos
= 45 graus). No entanto, existem outros valores de x para os quais f (x) = 0, isto é, a
função f (x) tem outras raízes. Dando o chute inicial 3, por exemplo, tem-se
>> fzero(’func1’,3)
ans =
3.9270
ou, em graus, 225◦ . Este comando pode ser utilizado com qualquer outra função
escrita no MATLAB.
Os dois zeros calculados anteriormente podem ser verificados no gráfico da função.
61
Figura 9: Verificação gráfica dos zeros da função
função fminbnd.
10.3 Limites
Para efetuar uma operação com limites no MATLAB, o comando que se deve dar
é: limit(f(x),x,a) onde f(x) é a função que se quer achar o limite, x é a variável e a é o
número no qual o x está tendendo (x −→ a).
Exemplo: Achar o limite abaixo:
1 + x2
lim
x→2 1 − x2
>> syms x
>> limit(((1+x^2)/(1-x^2)),x,2)
ans=
-5/3
62
10.4 Limites à esquerda e à direita
Para calcular limites à esquerda e àdireita, o comando é: limit(f(x),x,a,’left’) e
limit(f(x),x,a,’right’), onde ’left’ e ’right’ são os comandos para clacular à esquerda
e à direita, respectivamente.
Exemplo: Achar os limites abaixo:
x+1
lim−
x→1 (x − 1)3
x
lim+
x→3 x−3
>> syms x
>> limit((x/(x-3)),x,3,’right’)
ans=
inf
>> limit(((x+1)/(x-1)^3),x,1,’left’)
ans =
-inf
10.5 Integração
10.5.1 Solução Simbólica
Na integração de funções, o comando que o MATLAB reconhece para tal operação
é int(f(x)).
Exemplo: Integrar as funções abaixo:
Z √
x(1 − x)2 dx
Z
2x4 − 3x3 + 5
dx
7x2
63
>> syms x
>> f=((x^1/2)*(1-x)^2);
>> int(f)
ans =
1/8*x^4-1/3*x^3+1/4*x^2
>> f=(((2*x^4)-(3*x^3)+5)/(7*x^2));
>> int(f)
ans =
2/21*x^3-3/14*x^2-5/7/x
Z 2
2x
dx
0 (x − 3)2
Z 1
(1 − 2x − 3x2 )dx
0
>> syms x
>> int(((2*x)/(x-3)^2),0,2)
ans =
4-2*log(3)
>> int((1-2*x-3*x^2),0,1)
ans =
-1
Regra Trapezoidal Quando a área sob a curva pode ser representada por trapézios
e o intervalo [a,b], dividido em n partes iguais, a área aproximada poderá ser calculada
através da seguinte fórmula:
b−a
Kt = (f (x0 ) + 2f (x1 ) + ... + 2f (xn−1 ) + f (xn ))
2n
64
onde os valores de xi representam os pontos no final da cada trapézio e x0 = a
e xn = b. A estimativa da integral melhora quando usarmos um maior número de
componentes ( como por exemplo trapézios), para aproximar a área sob a curva, pois
quanto menor for o intervalo da função a curva tende a uma reta.
O comando trapz aproxima a integral usando os pontos da função definidos pelo
usuário. Assim, para usar este comando primeiro deve-se definir os vetores x, no inter-
valo [a, b], e f, os valores da função correspondentes aos valores definidos no vetor x.
Considere, por exemplo, a seguinte integral.
Z 1
2
I= 2xe−x dx
0
A aproximação para esta integral pode ser calculada através do seguinte programa:
function I = Integral(dx);
x = 0:dx:1;
y = 2*x.*exp(-x.^2);
I = trapz(x,y);
>> integral(.1)
ans =
0.6298
Para um dx menor.
>> integral(.02)
ans =
0.6320
65
Figura 10: Integral - Área abaixo da curva
quad(’fc’,a,b,tol)
function y=func2(x)
y=2*x.*exp(-x.^2);
O cálculo da integral I pode ser efetuado usando a tolerância usual que é de 10−3 .
Neste caso, é desnecessário definir tol no comand window.
>> quad(’func2’,0,1)
ans =
0.63212053454568
66
Calculando agora com uma tolerância de 10−8 .
>> quad(’func2’,0,1,1e-8)
ans =
0.63212055882677
Note que, comparando-se com o valor exato apresentado na seção anterior, quando
se diminui a tolerância melhora-se a aproximação da integral.
Z 1√
k= xdx
0
Lembrando que uma singularidade é um ponto no qual uma função ou sua derivada
não é definida ou tende para o infinito.
Tanto quad8 quanto quad8 escrevem na tela uma mensagem quando detectam uma
singularidade, mas ainda assim o valor estimado da integral é retornado.
Exercício:
Seja a função f (x) = |x|. Resolva as integrais abaixo usando o MATLAB e compare
com os resultados obtidos a mão.
a. int[0.6,0.5] f(x) dx
b. int[0.5,-0.5] f(x) dx
c. int[0.0,-1.0] f(x) dx
10.6 Diferenciação
A derivada de uma função f em um ponto pode ser descrita graficamente como
a inclinação da reta que tangencia a função naquele ponto. Pontos da função onde a
derivada é zero são chamados pontos críticos. São pontos onde a tangente é representada
por uma linha horizontal e que, por isso, definem o local de máximo e de mínimo
da função. Podemos perceber ao analisar uma determinada função num determinado
intervalo que o sinal da derivada pode mudar, e, se esse sinal muda, significa que dentro
deste intervalo existe local de máximo e local de mínimo. Podemos também analisar
uma função pela sua derivada segunda. De modo que, se a derivada segunda de um
ponto crítico é positiva, então o valor da função naquele ponto significa um local de
mínimo. Da mesma forma, se a derivada segunda de um ponto crítico é negativa, então
a função possui um local de máximo.
67
10.6.1 Derivação por expressões de diferenças
As técnicas de diferenciação numérica estimam a derivada de uma função em um
ponto xk através da aproximação da inclinação da reta tangente à curva neste ponto
usando valores que a função assume em pontos perto de xk . Essa aproximação pode
ser feita de vários modos.
Assim, dependendo dos pontos, temos três técnicas:
f 0 (xk ) − f 0 (xk − 1)
f 00 (x) =
xk − (xk − 1)
68
10.6.2 Comando diff
Para o cálculo de derivadas, o comando no MATLAB é dif f (f (x)), onde f(x) é a
função que se quer determinar a derivada.
Exemplo: Derivar as funções abaixo:
f (x) = 2x2 + 3x
1
f (x) =
3−x
>> syms x
>>diff((2*x^2)+3*x)
ans =
4*x+3
>>diff((1/(3-x)))
ans =
1/(3-x)^2
69
10.6.3 Derivadas de ordem superior
As derivadas superiores podem ser calculadas através do comando dif f (f (x), 2),
onde essa representação é para a derivada segunda da função f(x), para derivada terceira,
coloca-se 3 no lugar do número 2, para derivada quarta, o número 4 e assim por diante.
Exemplo: Achar a derivada segunda das seguintes funções:
1
f (x) =
3−x
1
f (x) = x −
x
>> syms x
>> diff((1/(3-x)),2)
ans =
2/(3-x)^3
>>diff((x-(1/x)),2)
ans =
-2/x^3
70
10.6.4 Derivadas Trigonométricas:
Exemplo: Derivar as seguintes funções:
f (x) = sen(x)
f (x) = cos(2x)
f (x) = tan(3x + 5)
>> syms x
>> diff(sin|x|)
ans =
cos(x)
>>diff(cos|2*x|)
ans =
-2*sin|2*x|
>>diff(tan|3*x+5|)
ans =
3+3*tan(3*x+5)^2
71
11Ajuste de Curvas
Em numerosas áreas, precisa-se do uso de uma equação para se resolver um problema.
O que fazer se nós só estivermos com os dados na mão? Nesse caso, o uso do ajustamento
e interpolação poderá nos facilitar essa resolução.
» x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1];
» y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2];
Para usar o comando polyfit deve-se indicar qual o grau do polinômio para se tentar
ajustar. Por exemplo, se n=1, ele tentará ajustar para uma reta.
Agora, se for n=2, como o nosso caso, ele indicará um polinômio de grau 2.
Exemplo:
» n=2;
» p=polyfit(x,y,n)
p =
-9.8108 20.1293 -0.0317
» xi=linspace(0,1,100);
» z=polyval(p,xi);
» plot(x,y,’o’,x,y,xi,z,’:’)
» xlabel(’x’),ylabel(’y’)
» title(’Ajuste para uma curva quadrática’)
72
Figura 11: Ajuste para uma curva quadrática
» horas=1:12;
» temps=[5 8 9 15 25 29 31 30 22 25 27 24];
» plot(horas,temps,horas,temps,’+’)
» title(’Temperaturas’)
» xlabel(’Hora’),ylabel(’GrausCelcius’)
Exemplo:
73
Figura 12: Ajuste para uma curva quadrática
Para se ter uma precisão ainda maior, deve-se usar o argumento spline.
Exemplo:
74
» t=interp1(horas,temps,9.3,’spline’)
t =
21.8577
» t=interp1(horas,temps,4.7,’spline’)
t =
22.3143
Exemplo:
» h=1:0.1:12;
» t=interp1(horas,temps,h,’spline’);
» plot(horas,temps,’--’,horas,temps,’+’,h,t,’r’)
» title(’Temperaturas’);
» xlabel(’Hora’),ylabel(’Graus Celcius’) ;
75
12 Transformadas
As transformadas são manipulações matemáticas para representar os mesmos elemen-
tos em diferentes domínios por meio de transformações nos mesmos. Na Engenharia, elas
são usadas com muita freqüência para mudar o campo de referência entre o domínio do
tempo e o domínio s, domínio da freqüência ou domínio Z. Há muitas técnicas para anal-
isar estados de equilíbrio e sistemas que sofrem mudanças muito suaves no domínio do
tempo, mas os sistemas complexos quase sempre podem ser analisados mais facilmente
em outros domínios.
A função impulso δ(t) é a derivada da função R∞
Degrau u(t). A função Degrau K
δ(t-a) é definida como K δ(t-a) = 0 para t<a e −∞ kδ(t − a)dt para t =a. Quando
representada em gráfico ela é comumente representada como uma seta de amplitude K
em t = a:
Exemplo:
syms t k a
u = ’k*Heaviside(t-a)’
d = diff(u)
int(d)
76
Figura 15: Gráfico da função Degrau Ku(t - a)
syms a t w
f=sym(’exp(-a*t)*cos(w*t)’)
F= laplace(f)
pretty(F)
laplace(sym(’Dirac(t)’))
laplace(sym(’Heaviside(t)’))
ilaplace(F)
77
Z ∞
F (s) = f (t)e−jwt dt
−∞
Z ∞
f (t) = F (w)ejwt dw
−∞
Exemplo:
syms t
f= sym(’t*exp(-t^2)’)
F= fourier(f)
invfourier(F)
12.4 Transformada Z
As transformadas de Laplace e Fourier são usadas para analisar sistemas de tempo
contínuos. A Transformada Z, por outro lado, é usadas para analisar sistemas de tempo
discreto. A Transformada Z é definida como:
∞
f (k)z −k
X
F (z) =
k=0
,
onde z é um número complexo.
12.5 Exercícios
12.5.1 Exercício 1: Sistemas Lineares
O circuito mostrado abaixo possui uma fonte de tensão contínua de 60V e quatro
resistores distribuídos em três malhas. Utilize o MATLAB para resolver o sistema linear
e achar as correntes no circuito.
7I1 + 12(I1 − I2 ) = 60
12(I2 − I1 ) + 6(I2 − I3 ) = 0
6(I2 − I3 ) + 12I3 = 0
78
Figura 16: Circuito elétrico do exercício 1
Aplicando as leis de Kirchhoff no circuito, têm-se três equações para três incógnitas
linearmente independentes (I1 , I2 e I3 ).
19I1 − 12I2 = 60
−12I1 + 18I2 − 6I3 = 0
6I2 + 18I3 = 0
Reorganizado as equações, tem-se o sistema pronto para ser passado para forma
matricial e então ser resolvido, sendo, no caso do sistema elétrico R3X3 .I3X1 = V3X1 .
79
Ri(t) + vC − VS (t) = 0 (1.1)
Como os elementos estão todos em série, a corrente que flui pelo resistor é a mesma
que flui pelo capacitor:
i(t) = iC (t) = C dtd vC dt (1.2)
Substituindo (1.2) em (1.1) tem-se a equação diferencial de 1a ordem para um circuito
RC série:
RC dtd vC dt + vC (t) − V = 0 (1.3)
A tensão no capacitor é dada pela equaçao diferencial, que é mostrada na equaçao
abaixo:
−1t
vC (t) = V (1 − e RC ) (1.4)
a. Função dsolve
dsolve (’D2y=t’,’y(0)=2’,’Dy(0)=0’)
ans =
1/6*t^3-2
b. Transformada de Laplace
A seguir, tem-se uma tabela com os pares mais simples da Transformada de Laplace.
Teste alguns deles no MATLAB, sem se esquecer de declarar as variáveis simbólicas com
o comando sym(’var1’) ou syms var1 var2 var3 ....
Voltando ao exercício 2, a solução da equação (1.3) pode ser obtida a partir da
Transformada de Laplace da mesma, obtendo VC (S), que é a tensão do capacitor no
domínio s. Utilizando a função de laplace, tem-se o resultado em (1.5).
syms R C V
vR=R*C*diff(sym(’vC(t)’));
vC=sym(’vC(t)’);
Y=laplace(vR+vC-V)
y =
R*C*(s*laplace(vC(t),t,s)-vC(0))+laplace(vC(t),t,s)-V/s
80
Figura 18: Transformadas de Laplace para algumas funções δ(t - a)
V
RCs(VC (s) − vC (0)) + VC (s) − s
= 0 (1.5)
A partir dessa simples manipulação algébrica da equação para isolar a variável VC (s)
e expansão em frações parciais, pode-se então aplicar a Transformada Inversa de Laplace
para achar vC (t)utilizando a função ilaplace do MATLAB.
V V
VC (s) = s
− 1
s+ RC
(1.6)
1t
L−1 {VC (s)} = vC (t) = V (1 − e RC ) (1.7)
81
1) Declare as constantes da rotina no MATLAB. São elas:
a. Freqüência de amostragem (Fs): número de pontos por período que o sinal será
amostrado (medido);
b. Ciclos de amostragem (k): número de períodos que o sinal vai ser amostrado em
relação à freqüência mais baixa;
c. Freqüências 1, 2, 3 (f1, f2, f3): definir valor de uma freqüências quaisquer que com-
porão o sinal a ser analisado. O sinal será da forma
6) Por fim, plote o módulo da série Y em função de F. Não se esqueça de, além de
operar o módulo de Y, deve-se dividir os valores do mesmo pelo número de pontos do
vetor da seguinte forma "abs(Y)/lenght(Y)". Isto deve ser feito, pois a Transformada
de Fourier gera pontos de amplitude multiplicados pelo número de termos da série que
foi transformada. A FFT de um exemplo está mostrada na figura 20.
82
Figura 20: Resultado da FTT mostrado de 0 a 500 Hz.
83
Solução:
84
13 SIMULINK
O que é SIMULINK?
O Simulink é um pacote computacional voltado para a modelagem, simulação e
análise de sistemas dinâmicos, tanto lineares quanto não-lineares, contínuos e/ou dis-
cretos no tempo.
85
de um conjunto de ferramentas tais como: linearização, blocos de verificação e gráficos.
13.1 Introdução
13.1.1 Diagrama de Blocos
Um diagrama de blocos é uma forma de representar um modelo de sistema como um
todo. Em um diagrama como este, cada bloco desempenha uma determinada função.
Dessa forma, as inter-conexões dos blocos permitem a representação de um processo.
As setas indicam a sequência de operações as quais uma constante, variável ou função
serão submetidas.
86
13.1.2 Símbolos
Os símbolos mais utilizados em diagramas de blocos encontram-se representados a
seguir:
87
Figura 25: Janela destinada à criação do modelo
Uma forma de solucionar esta equação diferencial é integrar a função seno e encontrar
o valor para uma constante de forma que a condição inicial seja satisfeita. A partir desta
proposta, será criado um diagrama de blocos. Então o diagrama deverá ter, pelo menos,
um bloco que representa a função seno, assim como outro para realizar a integração da
função seno. A função seno funciona, neste exemplo, como uma fonte, então, dê um
duplo clique no ícone Sources na janela de bibliotecas do Simulink.
88
Figura 27: Fonte senoidal inserida no projeto
Arraste o bloco da onda senoidal (Sine Wave) para a janela do modelo. Uma cópia
deste bloco deverá aparecer nesta janela.
Em seguida arraste o bloco integrator, presente na biblioteca continuous. Faça o
mesmo para o Scope, que está na biblioteca Sinks.
89
Figura 30: Gráfico gerado no Scope.
90
Figura 31: Integrador inserido no projeto
91
Figura 33: Blocos inseridos após rotação
A seguir é necessário conectar a linha que liga o integrador ao SCOPE até bloco
de ganho situado na parte inferior da janela, pois esta linha contém o valor de x. Para
fazê-lo, pressione a tecla CTRL do teclado e clique na linha de sinal. O cursor do mouse
irá mudar para uma cruz. Conserve a tecla do mouse pressionada enquanto a ligação
é feita e solte agora a tecla CTRL. Leve a linha até a entrada do bloco de ganho. O
SIMULINK automaticamente ajusta a linha com um ângulo de 90o . Se o mouse possuir
três botões, as operações de clicar e arrastar podem ser feitas utilizando o botão direito.
Repita a operação ligando a linha de sinal Integrator-SCOPE até a entrada superior
do bloco de produto. Da linha de sinal que liga a entrada superior do bloco de produto
repita a operação de ligação para a entrada inferior do mesmo bloco, de modo que o
bloco execute a operação x.x = x2 . Conecte agora a saída do bloco de produto à entrada
do ganho na parte superior da janela de modelo. Após isso, é necessario conectar a saída
do ganho superior à entrada superior do bloco de soma e a saída do ganho inferior à
entrada inferior do mesmo bloco de soma.
O modelo agora está completo, mas os blocos devem ser configurados (parametriza-
dos) para que este represente o sistema desejado. O Simulink tem o valor 1.0 como
padrão(default) para os blocos de ganho, entradas positivas no bloco de soma e o valor
inicial 0.0 para o integrador. O valor inicial do integrador representa o número inicial de
bactérias presentes no pote. Para acessar as configurações de um bloco, basta dar um
duplo clique sobre o bloco. Para parametrizar os blocos de ganho. Dê um duplo clique
no ganho da parte superior e mude o valor de 1.0 para 0.5 na caixa de diálogo que irá
aparecer, a seguir clique em Close. Note que o valor do ganho do bloco muda para 0.5
no diagrama em blocos.
Agora dê um duplo clique no bloco de soma e no campo List of signs mude de ++
para −+ na caixa de diálogo que abrirá. Os sinais representam os próprios sinais de
entrada no bloco. A seguir clique em Close.
Note agora que no bloco de soma o sinal superior é negativo e o inferior é positivo,
sendo então a saída a diferença das entradas que representa x0 de acordo com a equação
92
Figura 34: Blocos conectados
Para finalizar a configuração, deve-se definir o número inicial de bactérias. Para isto,
dê um duplo clique no integrador e no campo "Initial condition"mude para 100, e após
93
clique Close.
94
O modelo agora está completo e pronto para ser executado. Para salvar, vá à barra
de menu e selecione FILE:SAVE e entre com o nome desejado. O modelo será salvo com
o nome digitado e a extensão .mdl, e seu nome aparecerá na barra de título da janela de
edição. Abra agora o SCOPE com um duplo clique e a seguir na barra de menu, clique
em SIMULATION:START para iniciar a execução.
O SCOPE nem sempre mostra a figura numa boa escala para visualização. O botão
Autoscale na barra de ferramentas do SCOPE redimensiona a escala para acomodar
todos os valores.
95
Figura 38: Resultado da simulação redimensionado
Fontes Comuns
96
Exemplo: Impulso Unitário
δ(t − a) = 0; t 6= a
Z ∞
δ(t)dt = 1
−∞
Embora o impulso unitário seja um sinal que teoricamente não existe existem boas
aproximações do caso ideal que são muito comuns. Exemplos físicos são colisões, como
uma roda se chocando com o meio-fio ou um bastão rebatendo uma bola ou ainda
mudanças instantâneas de velocidade como a de uma bala sendo disparada de um ri-
fle. Outra utilidade da função impulso é a determinação da dinâmica do sistema. O
movimento causado em um sistema que sofre uma força impulsional unitária é a própria
dinâmica inerente ao sistema. Partindo disto, pode-se utilizar a resposta à um impulso
unitário de um sistema complexo para se determinar sua freqüência natural e suas car-
acterísticas de vibração.
O modelo na figura acima deve ser ajustado para simular um impulso unitário ocorrido
aos 0.5 segundos de simulação com uma duração de 0.01 segundos e a magnitude de
100. A fonte degrau na parte superior deve ter a seguinte configuração: Step time: 0.5,
Initial value: 0, Final value: 100. Já a fonte situada na parte inferior deve ser configurada
da seguinte forma: Step time: 0.51, Initial value: 0, Final value: 100. A simulação deve
ser configurada para terminar em 1 segundo.
97
13.3.1 Principais Fontes(Sources):
Essas são as principais fontes:
Constant - Fornece um valor constante.
Sin Wave - Função seno. É possível configurar os parâmetros.
Ramp - Uma reta linear. É possível configurar a inclinação.
Step - Função degrau. Pode-se configurar o tempo, amplitude e valor inicial.
Pulse Generator - Gera uma onda quadrada.
Ramdon Number - Números aleatórios no tempo.
Signal Generator - Gera as ondas típicas de um gerador de sinais: quadrada, serra,
senóide, etc.
98
Check Static Range: - Verifica se um sinal está sempre outros dois valores estáticos.
Check Static Upper Bound: Checa se um sinal é menor ou igual a um limite superior.
99
Figura 41: Um diagrama de blocos condicional.
mesmo pode ser feito para um bloco. Neste caso, clique com o botão sobre um bloco e
vá em background color para mudar a cor do bloco; e em foreground color para modificar
as cores do contorno do bloco.
A tabela a seguir contém as operações básicas de manipulação de blocos como red-
imensionar, rotacionar, copiar e renomear blocos.
100
Ação Descrição
Seleção simples de objeto Clique no objeto com o botão esquerdo do mouse.
Seleção múltipla de objetos Pressione a tecla SHIFT e clique no outro objeto.
Selecionar com uma caixa de Clique com o botão esquerdo do mouse no local onde
seleção se deseja que seja uma das quinas da caixa de seleção.
Continue com a tecla do mouse pressionada e arraste
a caixa para encobrir a área esejada.
Copiar um bloco de uma bib- Selecione o bloco e arraste para a janela do modelo
lioteca ou de outro modelo para a qual se quer copiar.
Inverter blocos Selecione o bloco e no menu Format:Flip Block.
Tecla de atalho: CTRL–F.
Rotacionar blocos Selecione o bloco e no menu Format:Rotate Block.
Tecla de atalho: CTRL–R.
Redimensionar blocos Selecione o bloco e arraste o canto.
Adicionar sombra Selecione o bloco e no menu Format:Show Drop
Shadow.
Editar o nome de um bloco Clique no nome.
Ocultar o nome de um bloco Selecione o nome, no menu Format:Hide Name
Inverter o nome de um bloco Selecione o nome, no menu Format:Flip Name
Apagar Objetos Selecione o objeto, no menu Edit:Clear. Tecla de
atalho: Del.
Copiar objetos para a área de Selecione o objeto, no menu Edit:Copy. Tecla de
transferência atalho: CTRL–C.
Recortar objetos para a área Selecione o objeto, no menu Edit:Cut. Tecla de
de transferência atalho: CTRL–X.
Colar objetos a partir da área No menu Edit:Paste. Tecla de atalho: CTRL–V.
de transferência
Traçar uma linha de sinal Arrastar com o mouse da saída do bloco para a en-
trada do outro.
Traçar uma linha de sinal em Arraste com o mouse da saída do bloco até o primeiro
segmentos ponto. Repetir deste ponto até o seguinte e assim por
diante.
Traçar uma linha ligada a Mantenha a tecla CTRL pressionada e clique sobre a
outra linha de origem. Tecla de atalho: Clicar com o botão
direito do mouse a partir da linha de origem.
Separar uma linha Selecione a linha. Mantendo a tecla SHIFT pression-
ada, clique e arraste o novo vertex para a posição
desejada.
Mover um segmento de linha Clique e arraste o segmento desejado.
Mover um vertex de um seg- Clique e arraste o vertex desejado.
mento.
Nomear uma linha de sinal Duplo clique na linha e digite o nome.
Mover o nome de uma linha Clique e arraste o nome para a posição desejada.
de sinal
101
Ação Descrição
Copiar o nome de uma linha Mantendo a tecla CTRL pressionada, arraste o nome
de sinal para a posição desejada. Tecla de atalho: clique e
arraste com o botão direito do mouse para a posição
desejada.
Sinais de propagação numa Dê um nome aos sinais conhecidos (entrada) com um
linha de sinal único caracter e nas linhas em que se deseja saber seu
conteúdo, deve-se digitar somente o caracter “<”.
Após isso, no menu Edit:Update Diagram.
Acrescentar anotação ou ob- Dê um duplo clique no local em que se deseja e digite
servação no modelo o texto.
102
14
Referências Bibliográficas
• Curso de MATLAB for Windows, Departamento de Engenharia Mecânica, UNESP,
Campus de Ilha Solteira.
• www.mathworks.com.
103