MATLAB - Matrix Laboratory
Adaptado de Profa. Carla Salso Freitas
e profa. Luciana Nedel
Por Profa. Patrícia Jaques
Programação
• Diversos níveis:
–
–
–
–
–
linguagem de máquina
linguagem assembler
linguagem C
planilhas eletrônicas (Excel)
pacotes científicos (MATLAB, Scilab, Mathematica)
• Qual escolher?
– É preciso analisar as necessidades
MATLAB - INF01040 - Profa. Patrícia Jaques
2
MATLAB
• Software voltado ao cálculo numérico
• Integra:
–
–
–
–
análise numérica;
cálculo com matrizes;
processamento de sinais;
construções com gráficos.
• Elemento básico de informação: MATRIZ.
• Ótima performance.
• Alto nível.
• (www.mathworks.com)
MATLAB - INF01040 - Profa. Patrícia Jaques
3
Pacotes científicos
• MATLAB (www.mathworks.com)
–
–
–
–
–
linguagem de programação
ambiente para desenvolvimento
sistema gráfico
funções matemáticas
interface com linguagens de programação (C,
FORTRAN)
MATLAB - INF01040 - Profa. Patrícia Jaques
4
Pacotes científicos
• SCILAB
– sistema aberto (freeware) desenvolvido pelo INRIA (instituto
francês)
– implementa um subconjunto das funções do MATLAB
– Disponível em: http://scilabsoft.inria.fr/
MATLAB - INF01040 - Profa. Patrícia Jaques
5
Apresentação
•
•
•
•
•
Software para análise numérica
Cálculo com matrizes
Processamento de sinais
Construção de gráficos
Problemas expressos numa forma mais próxima da
notação matemática
• Interpreta comandos do usuário dados na janela de
comando. Experimente: >>sqrt(64)
MATLAB - INF01040 - Profa. Patrícia Jaques
6
Introdução
• Trabalha apenas com um tipo de objeto: Matrizes
• Os elementos das matrizes podem ser números
complexos
• Escalares são matrizes 1x1 ex: >> a= 6
• Vetores são matrizes 1xN ou Nx1
• Entrando com uma matriz (3 maneiras):
>>A = [1 2 3;4 5 6;6 7 8]
>>A = [1 2 3
através de um arquivo
456
(ex: gera.m)
7 8 9]
>>gera
MATLAB - INF01040 - Profa. Patrícia Jaques
7
Matriz
• A = [1 2 3;4 5 6;7 8 9]
1
2
3
4
5
6
7
8
9
Diferencia maiúsculas de minúsculas!
MATLAB - INF01040 - Profa. Patrícia Jaques
8
Introdução
• Se no final da linha for colocado um “;”, o Matlab
executa o comando mas não mostra o resultado
>>A = [1 2 3;4 5 6;7 8 9]
>>B = [1 2 3;4 5 6;7 8 9];
• Elementos das matrizes podem ser uma expressão
>>x = [-1.3 sqrt(2) ((1+2+3)*4/5)^2]
resulta em: x = -1.3000 1.4142 23.0400
• Elementos são referenciados por índices entre
parênteses: x(6) = 5
resulta em: x = -1.3000 1.4142 23.0400
MATLAB - INF01040 - Profa. Patrícia Jaques
0
0
5
9
Acessando um elemento da Matriz
• A = [1 2 3;4 5 6;7 8 9]
1
1
2
3
2
3
1
1
2
4
3
7
4
10
7
2
5
5
6
8
3
8
6
9
9
A(2,1)=10
A(2)=10
MATLAB - INF01040 - Profa. Patrícia Jaques
10
Introdução
• Grandes matrizes podem ser geradas a partir de
pequenas:
>>r=[10 11 12];
O comando abaixo anexa à matriz A o vetor r
>>A=[A;r]
A=
1
4
7
10
2
5
8
11
3
6
9
12
MATLAB - INF01040 - Profa. Patrícia Jaques
11
Introdução
• Pequenas matrizes podem ser extraídas de grandes
matrizes usando “:”
>>A=A(1:3,:);
seleciona as 3 primeiras linhas e todas as colunas da matriz
A atual, modificando-a para sua forma original.
A=
1
4
7
10
2
5
8
11
MATLAB - INF01040 - Profa. Patrícia Jaques
3
6
9
12
12
Variáveis e informações da área de trabalho
• Variáveis são declaradas na forma:
– variável = expressão
– “ans” (answer) variável default caso um nome seja
omitido.
• Se a expressão é tão grande que não cabe em uma
linha, pode-se continuar a expressão na próxima
linha usando um espaço em branco e 3 pontos:
>> s = 1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 …
-1/8 + 1/9 - 1/10 + 1/11 - 1/12 + 1/13;
MATLAB - INF01040 - Profa. Patrícia Jaques
13
Variáveis e informações da área de trabalho
• O comando “who” lista as variáveis da área de
trabalho
• “whos” mostra detalhes sobre as variáveis
• clear;
• clear var;
• Teclas para retomar comandos
digitados anteriormente
MATLAB - INF01040 - Profa. Patrícia Jaques
14
Números e expressões aritméticas
• Notação decimal convencional
• Ex:
3
9.6374586
-99
1.602E-20
0.00001
6.06375e23
• Operadores:
^
/
\
*
+
-
exponenciação
divisão à direita
divisão à esquerda
multiplicação
adição
subtração
MATLAB - INF01040 - Profa. Patrícia Jaques
15
Números complexos
• Número complexo z= a + b*i
– onde i= √-1
• Funções “i”
>> z= 3 + 4 * i
• Matrizes complexas permitem também a forma:
>> A= [1 2; 3 4]+i*[5 6; 7 8]
• Caso “i” seja usado como variável e tenha seu valor
modificado, pode-se criar uma nova unidade
complexa:
>> ii = sqrt(-1)
>> z = 3 + 4 * ii
MATLAB - INF01040 - Profa. Patrícia Jaques
16
Formatos de saída
• O comando format modifica o modo como as matrizes são
mostradas
• format
short (default)
short e
long
long e
hex
rat
bank
+
•
•
•
•
1.3333
1.3333e+000
1.33333333333333
1.33333333333333e+000
40040000000000000
4/3
1.33
+
Exemplo:
>>a=2/3
>>format bank
>>a
MATLAB - INF01040 - Profa. Patrícia Jaques
17
Help
• O comando de ajuda “help” fornece informações
sobre os tópicos
• help <tópico> -> mostra comandos relacionados ao
tópico
• help <comando> -> mostra detalhes sobre o
comando
• Exemplo:
• >> help format
MATLAB - INF01040 - Profa. Patrícia Jaques
18
Funções
• Conjunto extenso de funções:
•
•
•
•
•
•
•
•
•
•
•
matemática elementar
funções especiais
matrizes elementares
matrizes especiais
decomposição e fatorizaçã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
MATLAB - INF01040 - Profa. Patrícia Jaques
19
Operacões com matrizes
• Transposta indicada pelo caracter apóstrofo '.
A=[1 2 3;4 5 6;7 8 9];
B=A'
B= 1 4 7
258
369
A
A’
1 2 3
1 4 7
2 5 8
3 6 9
4 5 6
7 8 9
• det(A)
– Determinante da matriz A.
• inv(A)
– Inversa da matriz A.
MATLAB - INF01040 - Profa. Patrícia Jaques
20
Operações com matrizes
• Adição e subtração indicada pelos sinais “+” e “-”
respectivamente.
C=A+B;
• Essas operações só são definidas para matrizes com a
mesma dimensão.
• B=A+A’
A
A’
1 2 3
4 5 6
7 8 9
1 4 7
2 5 8
3 6 9
+
B
=
MATLAB - INF01040 - Profa. Patrícia Jaques
2 6 10
6 10 14
10 14 18
21
Operações com matrizes
• Multiplicação indicada por “*”.
• Só é válida quando a 2a. dimensão da 1a. matriz for
igual a 1a. dimensão da 2a. matriz.
• mxn e nxp
• Ex: >> A*B
MATLAB - INF01040 - Profa. Patrícia Jaques
22
Operações com matrizes
• A multiplicação de escalar por matriz e vice-versa
também é válida.
• Ex: >> B=2*A
A
B
1 2 3
2*
4 5 6
7 8 9
=
2 4 6
8 10 12
14 16 18
MATLAB - INF01040 - Profa. Patrícia Jaques
23
Operações com matrizes
• Divisão indicada por “/” ou “\”.
• Se A for quadrada, A\B e B/A correspondem a inv(A)*B e
B*inv(A) respectivamente
– A\B = inv(A)*B
– B/A = B*inv(A)
• Em geral:
– X = A\B A*X = B
– X = B/A X*A = B
MATLAB - INF01040 - Profa. Patrícia Jaques
24
Operações com matrizes
• Exponenciação -> indicada por “^”.
• A^p eleva A à p-ésima potência se A for quadrada e p
for um escalar.
• Se p é inteiro maior do que 1, isso é feito através de
múltiplas multiplicações.
MATLAB - INF01040 - Profa. Patrícia Jaques
25
Operações com conjuntos
• São operações aritméticas realizadas elemento por
elemento da matriz.
• Usa-se os mesmos caracteres das operações usuais
precedidos por um ponto (“.*”, “./”, “.\”, “.^”, “.'”)
•
•
•
•
•
Exemplo:
Crie duas matrizes quadradas a e b
Faça:
>>a*b
>>a.*b
MATLAB - INF01040 - Profa. Patrícia Jaques
26
Operações com conjuntos
• Operações comparativas (<, <=, >, >, ==, ~=) podem ser
realizadas entre matrizes de mesma dimensão
• 1 para verdadeiro
• 0 para falso
– O resultado é uma matriz de 0s e 1s correspondendo a Falso e
Verdadeiro
– & (e) e | (ou) também podem ser usados
MATLAB - INF01040 - Profa. Patrícia Jaques
27
Manipulação de vetores e matrizes
•
•
•
•
•
Gerando vetores: a declaração
>>x = 1:5
gera o vetor linha
x = 1 2 3 4 5 . (incremento de 1)
Pode-se usar outros incrementos:
>> y = 0:pi/4:pi
y = 0.0000 0.7854 1.5708 2.3562 3.1416
• A função k=linspace(0,1,6) gera um vetor linearmente
espaçado de 0 a 1, contendo 6 elementos
k=0
0.2000 0.4000 0.6000 0.8000 1.0000
MATLAB - INF01040 - Profa. Patrícia Jaques
28
Manipulação de vetores e matrizes
• Elementos das matrizes: utiliza-se índices entre
parênteses.
– >>A=[1 2 3;4 5 6;7 8 9];
– >>A(3,3) = A(1,3) + A(3,1)
A=1 2 3
4 5 6
7 8 10
– A(2,1) = 4
– A(1:2, 2:3) = 0 elementos A(1,2), A(1,3), A(2,2), A(2,3) são
zerados.
– A(:,3) = 0 elementos da terceira coluna são zerados.
– >>A(1:2,3) especifica uma submatriz 2x1 com os 2 primeiros
elementos da terceira coluna de A
ans = 3
6
MATLAB - INF01040 - Profa. Patrícia Jaques
29
Manipulação de vetores e matrizes
• exclusão de linhas ou colunas
– atribuir [ ] à linha ou coluna
exclui terceira coluna da matriz
exclui duas primeiras linhas da matriz
• A(:,3) = []
• A(1:2,:) = []
• troca entre linhas ou colunas
– B = A (:, [1 3 2]) troca ordem das colunas 2 e 3.
– A = A ([3 2 1], :) inverte ordem das linhas.
• concatenação
– formar matriz usando outras (inteiras ou partes) como
elementos
• Ex.: sendo A = [1 2 3; 4 5 6; 7 8 9] uma matriz 3 x 3,
– A(1,:) = 1 2 3 e A(3,:) = 7 8 9
– Então, B = [A(1,:); A(3,:)] é uma matriz 2 x 3 contendo a primeira
e a terceira linhas de A.
MATLAB - INF01040 - Profa. Patrícia Jaques
30
Funções de Construção de Matrizes
• É possível construir uma matriz a partir de blocos.
Exemplo, se A é uma matriz 3 x 3, então
– B = [A, zeros(3,2); zeros(2,3), eye(2)]
– Matriz 5 x 5.
Concatena na
próxima linha
B=
A 3
4
6
0
0
11 5
1 -3
2 1
0 0
0 0
0
0
0
1
0
0
0
0
0
1
Concatena na
próxima coluna
zeros(3,2)
eye(2)
zeros(2,3)
MATLAB - INF01040 - Profa. Patrícia Jaques
31
Funções de Construção de Matrizes
• eye - matriz identidade
– eye(2)
ans =
1 0
0 1
• zeros - matriz de zeros
– zeros(2,3) ou zeros(2)
ans =
0 0
0 0
MATLAB - INF01040 - Profa. Patrícia Jaques
32
Funções de Construção de Matrizes
• ones - matriz de 1's
– ones(2,3) ou ones (2)
ans =
1 1
1 1
• rand - matriz gerada aleatoriamente
– rand(5,4) ou rand(2)
ans =
0.2026
0.6721
0.8381
0.0196
MATLAB - INF01040 - Profa. Patrícia Jaques
33
Funções de Construção de Matrizes
• diag - matriz diagonal
– Se x é um vetor, diag(x) é a matriz diagonal com x na
diagonal;
ans =
– x=[1 2 3];
1 0 0
– diag(x)
0
0
2
0
0
3
• Se A é uma matriz quadrada, então diag(A) é um
vetor cujos componentes são os elementos da
diagonal de A.
– A=[3 11 5; 4 1 -3; 6 2 1]
– diag(A) Tente também: diag(diag(A))
ans =
3
1
1
MATLAB - INF01040 - Profa. Patrícia Jaques
34
• triu - parte triangular superior de uma matriz
– triu(A)
ans =
3 11 5
0 1 -3
0 0 1
• tril - parte triangular inferior de uma matriz
– tril(A)
ans =
3 0
4 1
6 2
0
0
1
MATLAB - INF01040 - Profa. Patrícia Jaques
35
Exemplo
a=
1
5
1
5
2
6
2
6
3
7
3
7
4
8
4
8
» b = [a(1:2,1:1), a(1:2,3:4) ; a(4:4,1:1), a(4:4,3:4)]
b=
1
5
5
3
7
7
4
8
8
MATLAB - INF01040 - Profa. Patrícia Jaques
36
Funções Escalares
• Algumas funções no Matlab operam essencialmente
sobre escalares, mas operam sobre cada elemento se
forem aplicadas a uma matriz.
• As funções escalares mais comuns são:
–
–
–
–
–
–
–
–
sin - seno
asin - arcoseno
exp - exponencial
abs - valor absoluto
round - arredonda
cos - cosseno
acos - arco cosseno
log - log natural
– sqrt - raíz quadrada
– floor - arredonda na direção
de menos infinito
– tan - tangente
– atan - arco tangente
– rem - resto da divisão
– sign - função sinal
– ceil - arredonda na direção
de mais infinito
MATLAB - INF01040 - Profa. Patrícia Jaques
37
Funções Vetoriais
• Outras funções do Matlab operam essencialmente
sobre vetores (linha e coluna)
• Mas em uma matriz m x n, agem sobre coluna por
coluna para produzir um vetor linha com o resultado
de sua aplicação para cada coluna.
• É possível operar sobre linha por linha transpondo-se
a matriz, por exemplo:
– a = rand(5)
– mean(a) média de cada coluna
– mean(a’) média de cada linha
MATLAB - INF01040 - Profa. Patrícia Jaques
38
Funções Vetoriais
• Outros exemplos de funções vetoriais são:
– max(a) encontra o valor máximo
–
–
–
–
–
–
–
• [Y,I] = MAX(X)
sum(a) soma os elementos
median(a) mediana
any(a) true se existe um elemento diferente de zero
min(a) menor valor
prod(a) produto dos elementos
all(a) true se todos os elementos são diferentes de zero
sort(a) ordena em ordem crescente
• Exemplo:
– max(max(a))
– max(a)
MATLAB - INF01040 - Profa. Patrícia Jaques
39
Exercícios
• digitar
• criar matrizes
– A = [1 2 3 4 5 6 7 8 9]
– B = [1;2;3;4;5;6;7;8;9]
– C = [1 2 3;4 5 6;7 8 9]
• calcular
– A`
– B`
– C`
–
–
–
–
–
–
–
–
b
B
who
whos
clear B
clc
who
A,C
• calcular
–
–
–
–
–
–
–
MATLAB - INF01040 - Profa. Patrícia Jaques
sum(A)
sum(C)
sum(C`)
sum(C`)`
diag(C)
sum(diag(C))
sum(diag(fliplr(C)))
40
Exercícios
• calcular
• calcular
–
–
–
–
–
–
–
–
C
s = C(1,3) + C(2,3) + C(3,3)
C(1,3) + C(2,3) + C(3,3) + C(4,3)
CC = C
CC(4,3) = 1
CC
clear CC
clc
–
–
–
–
–
–
–
–
C(2,3)
C(6)
1:10
c = 1:10
100:-7:50
pi
c = 0:pi/4:pi
c
MATLAB - INF01040 - Profa. Patrícia Jaques
• calcular
–
–
–
–
–
–
–
–
C(1:3,3)
s
s = sum(C(1:3,3))
s = sum(C(:,3))
s = sum(C(:,end))
D = C(:,[1 3 2])
A+C
C+2
41
Exercícios
• calcular
–
–
–
–
–
–
–
–
C+D
C-D
clear
who
a = [8 1 6;3 5 7; 4 9 2]
b = 2 * ones(3,3)
a*b
a .* b
MATLAB - INF01040 - Profa. Patrícia Jaques
42
Exercício
• 9) Considere a seguinte matriz:
• 7.5 8.0 9.0
6.7 7.7 5.4
8.0 9.2 7.4
6.6 6.6 6.6
5.0 8.0 7.0
5.2 6.1 9.5
8.3 7.2 10.0
9.0 9.0 9.0
3.5 4.5 5.5
6.7 5.0 4.6
• que corresponde a notas de provas de alunos (10 alunos).
a) Calcule a nota final de cada aluno, como a média das 3
notas, sendo que a última nota tem peso 2.
b) Calcule a média aritmética das notas da turma: média de
cada prova e média das notas finais
c) Use as funções adequadas para listar a menor nota final e a
maior nota final.
MATLAB - INF01040 - Profa. Patrícia Jaques
43
MATLAB - continuação
Anotando comandos usados
• diary nome do arquivo - cria arquivo texto no qual
ficarão registrados os comandos e as variáveis
subseqüentes.
• diary off - fecha arquivo e salva-o como texto.
• type nome do arquivo - apresenta na janela de
comando todo o conteúdo do arquivo.
• é possível também abri-lo em editores de texto
ASCII.
MATLAB - INF01040 - Profa. Patrícia Jaques
45
Paginando saída na janela de comando
• more on - quando uma saída for muito extensa,
mostra somente uma tela de cada vez.
– Enter avança uma linha.
– Barra de Espaço avança uma tela.
– q pára de mostrar saída.
• more off - retorna ao modo normal (padrão).
MATLAB - INF01040 - Profa. Patrícia Jaques
46
Salvando o Workspace
• File Save Workspace As
• save nome do arquivo (salva no diretório corrente)
• File Load Workspace
• load nome do arquivo (busca no diretório corrente)
• File Set Path permite alterar diretório corrente
MATLAB - INF01040 - Profa. Patrícia Jaques
47
Controle de fluxo
Laço for
>> for i=1:5
x(i)=i^2;
end
x=
1
4
9
16
25
>> for i=1:5
for j=1:5
a(i,j)=i+j;
b(i,j)=i-j;
end
end
c=a+b;
a=
2
b=
3 4 5
6
3 4 5 6
7
4 5 6 7
8
5 6 7 8
9
6 - Profa.
7 Patrícia
8 9
MATLAB - INF01040
Jaques
0 -1 -2 -3 -4
1 0 -1 -2 -3
2 1 0 -1 -2
3 2 1 0 -1
4 3 2 1 0
48
Controle de fluxo
• Laço while
•
a = 1; b = 15;
while a<b
clc
a = a+1
b = b-1
pause(1)
end
disp(‘fim do loop’)
if
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
MATLAB - INF01040 - Profa. Patrícia Jaques
49
Arquivos m
• são arquivos que contém comandos do MATLAB
– scripts
• não recebem argumentos de entrada nem retornam
argumentos de saída.
• operam em dados do workspace.
• úteis para automatizar séries de passos que precisam ser
executados várias vezes.
– funções
• podem receber e/ou retornar argumentos.
• variáveis internas são locais à função.
• úteis para estender a linguagem MATLAB.
MATLAB - INF01040 - Profa. Patrícia Jaques
50
Arquivos m
• 2 passos:
– criar arquivo .m
usando um editor de
texto.
– chamar o arquivo m da
linha de comando, ou
de outro arquivo m.
MATLAB - INF01040 - Profa. Patrícia Jaques
51
Arquivos m
• criando um arquivo m
– edit nome do arquivo ou File New M-File
– digitar código do script ou da função.
– File Save As - escolher diretório corrente ou que esteja
presente no search path do MATLAB.
• Search Path referência para o MATLAB procurar os arquivos
m.
– File Set Path
• usando um arquivo m
– nome do arquivo
MATLAB - INF01040 - Profa. Patrícia Jaques
52
Arquivos m
• Exemplo 1 script
– criar arquivo
– digitar código
•
•
•
•
Exemplos:
- procbasico
clear
clc
A = [1 2 3; 4 5 6; 7 8 9]
B = A’
- linhatri
- circulo
- malha
– salvar como inicio.m
– executar na janela do MatLab
• >> inicio
• Comentários:
– % comentário de linha
– texto apos o % na mesma linha não será executado
MATLAB - INF01040 - Profa. Patrícia Jaques
53
Outros comandos
• Entrada de dados: Receber um dado numérico do usuário
– <variável> = input('<mensagem>');
– Exemplo:
• n1 = input('Digite um numero: ');
• Entrada de dados: Receber um dado texto do usuário
– <variável> = input('<mensagem>', 's');
– Exemplo:
• n1 = input('Digite seu nome: ', 's');
• Mostrar um texto ou conteúdo de uma variável:
– disp('<mensagem>');
– Exemplo:
• disp('Total calculado: ');
• disp(soma);
• Limpar a tela
– Exemplo:
• clc;
MATLAB - INF01040 - Profa. Patrícia Jaques
54
Rotinas de Entrada/Saída
• TEXTREAD
» [N,F,S]=textread(’dados.txt',’%d %f %s')
N=
6
5
dados.txt
6 0.5 dd1
5 0.3 dd3
3 1.334 dd5
3
F=
0.5000
0.3000
1.3340
S=
‘dd1’
‘dd3’
‘dd5’
Exercício
• Escreva um programa (arquivo-m) para:
– Ler um arquivo contendo os dados de temperaturas
mínimas e máximas de 15 dias, no formato (%d %f %f)
1 15.9 31.9
– Calcular a média, menor e maior temperatura (das
temperaturas mínima e máxima)
– Listar os resultados
MATLAB - INF01040 - Profa. Patrícia Jaques
56
Solução – exerciciotemp.m
[dia,minima,maxima] = textread('dadostemp.txt','%d %f %f');
mediamin = mean(minima);
mediamax = mean(maxima);
minmin = min(minima);
minmax = min(maxima);
maxmin = max(minima);
maxmax = max(maxima);
disp (['Media das Minimas', mean(minima)]);
disp (['Media das Maximas', mean(maxima)]);
disp (['Menor Minima', min(minima)]);
disp (['Menor Maxima', min(maxima)]);
disp (['Maior Minima', max(minima)]);
disp (['Maior Maxima', max(maxima)]);
MATLAB - INF01040 - Profa. Patrícia Jaques
57
Resolvendo Equações Polinomiais
• Achar raízes de um polinômio:
• x4 - 12x3 + 0x2 + 25x + 116=0
>>p=[1 -12 0 25 116]
r=roots (p)
r=
11.7473
2.7028
-1.2251 + 1.4672i
-1.2251 - 1.4672i
• Construir polinômio a partir de suas raízes:
>> pp = poly(r)
pp =
1.0000 -12.0000 -0.0000 25.0000 116.0000
MATLAB - INF01040 - Profa. Patrícia Jaques
58
Atividade
• Exemplo:
– f(x) = 3*x^4-0.5.*x^3+x-5.2 (x assume valores escalares)
• p = [3 -0.5 1 -5.2];
• f = polyval(p,x);
• Digitar estes comandos e observar a saída:
p=[1 4 -7 -10];
x = linspace(-1,3);
v=polyval(p,x) - >gera f(x) para cada x contido no vetor x
plot(x,v)
title(‘Figure 19.1:x{^3} + 4x{^2} - 7x - 10´)
xlabel(´x´)
MATLAB - INF01040 - Profa. Patrícia Jaques
59
Expressões Simbólicas
• Defina as variáveis com o comando syms
syms x
• Crie as expressões utilizando estas variáveis
f(x) = 2x2+3x-5
x2-x+7
g(x) =
f(x) + g(x)
f(x) - g(x)
f(x) * g(x)
f(x) / g(x)
>>
>>
>>
>>
>>
>>
>>
>>
>>
f=2*x^2+3*x-5
g=x^2-x+7;
f + g
f-g
-> (2*x^2+3*x-5)*(x^2-x+7)
f*g
expand(ans)
-> 2*x^4+x^3+6*x^2+26*x-35
f / g
expand(ans)
pretty (ans)
MATLAB - INF01040 - Profa. Patrícia Jaques
60
Expressões Simbólicas
• Composição e substituição em funções:
>> f=1/(1-x^2)
>> g=sin(x)
>> compose(f,g)
ans = 1/(1-sin(x)^2)
>> compose(g,f)
ans = sin(1/(1-x^2))
>> finverse(g)
ans = asin(x)
>> subs(f,x,2)
ans = -1/3
• compose: calcula a composição das funções f(x) e g(x) em f(g(x)),
• finverse: encontra a inversa funcional de uma expressão
• subs: substitui uma variável por um número (ou por outra variável) em uma expressão
MATLAB - INF01040 - Profa. Patrícia Jaques
61
Expressões Simbólicas
• Solução de Equações
ax2+bx+c = 0
>> syms a b c x % manipula como variável simbólica
>> solve(a*x^2+b*x+c)
ans =
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
>> pretty(ans) %mostra formato de fração
[
2
1/2]
[
-b + (b - 4 a c)
]
[1/2 --------------------]
[
a
]
[
]
[
2
1/2]
[
-b - (b - 4 a c)
]
[1/2 --------------------]
[
a
]
MATLAB - INF01040 - Profa. Patrícia Jaques
62
Resolvendo Sistema de Equações Lineares
usando “Divisão Esquerda”
•
Se [A] é uma matriz quadrada (m = n):
[A]{x} = {b}
{x} = [A]-1{b}
{x} = ?
[A] = mxn
{x} = nx1
{b} = mx1
» x =
inv(A)*b;
» x = A\b;
Erro se singular
Aviso se quase singular
Exemplo: Resolvendo Equações
• Resolver este conjunto de equações simultâneas:
» A = [-1 1 2; 3 -1 1;-1 3 4];
» b = [2;6;4];
» x = inv(A)*b
x =
1.0000
-1.0000
2.0000
» x = A\b
x =
1.0000
-1.0000
2.0000
-x1
+ x2 + 2x3 = 2
3x1 - x2 + x3 = 6
-x1 + 3x2 + 4x3 = 4
Gráficos planos 2D
• O comando plot cria gráficos de x-y no plano;
• Se x e y são vetores de mesmo tamanho, o comando
plot(x,y) abre uma janela gráfica e desenha um gráfico
x-y dos elementos de x versos os elementos de y.
• Exemplo:
– x=-4:.01:4;
– y=sin(x);
– plot(x,y)
Peaks – conjunto de dados
Para mostrar a capacidade
Gráfica (plot, mesh, surf,
contour3, contour, surfc, meshz)
MATLAB - INF01040 - Profa. Patrícia Jaques
65
Gráficos
• Comandos de plotar
– Plot(x, y) – gera gráficos lineares
– Semilogx(x, y) – gráfico com escala linear para y e escala
logarítmica para x
– semilogy(x, y) – a escala logarítmica é para y
– Loglog(x, y) – escala logarítmica para ambos (x e y)
– Bar(x, y) – gera um gráfico em barras com elementos do
vetor y localizados no vetor x
– Stairs(x, y) – gera um gráfico de degraus com elementos do
vetor y
– Hist(x,y) – plota histograma
– Rose(x,y) – plota histograma em ângulo
MATLAB - INF01040 - Profa. Patrícia Jaques
66
Gráficos planos 2D
• Outro exemplo: Desenhar o
gráfico de y=exp(-x.^2) no
intervalo –1.5 a 1.5.
– x = -1.5:0.01:1.5;
– y= exp(-x.^2);
– plot(x,y)
• O comando grid coloca
uma grade de linhas sobre
o gráfico atual.
– Experimente refazer o
comando anterior e depois
digite grid.
MATLAB - INF01040 - Profa. Patrícia Jaques
67
+ gráficos
• Gráficos podem ter títulos, eixos rotulados e textos.
Para isso usa-se os seguintes comandos que tem
strings como argumentos:
–
–
–
–
–
title título do gráfico
xlabel rótulo do eixo x
ylabel rótulo do eixo y
gtext texto posicionado interativamente (mouse ou setas)
text posiciona texto na posição especificada
» title 'Título'
» xlabel 'x'
» ylabel 'y'
MATLAB - INF01040 - Profa. Patrícia Jaques
68
+ gráficos
Exemplo:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y);
%o caracter \pi cria o símbolo
xlabel('x = 0:2\pi');
ylabel('Seno de x');
title('Função Seno','FontSize',12);
gtext ('y = sin(x)’);
MATLAB - INF01040 - Profa. Patrícia Jaques
69
+ gráficos
• Os eixos são auto escalonados. Podem ser
modificados utilizando-se o comando axis. Se
c=[ xmin, xmax, ymin, ymax ], então o comando
– axis(c) ajusta o escalonamento dos eixos para os limites
definidos no vetor c.
MATLAB - INF01040 - Profa. Patrícia Jaques
70
+ gráficos
– axis auto - retorna-se ao auto escalonamento
– axis square - garante que a mesma escala é usada para
ambos os eixos
– axis image - apresenta imagem com a mesma relação de
aspecto da imagem
– axis off - desativa os eixos
– axis on - ativa os eixos
MATLAB - INF01040 - Profa. Patrícia Jaques
71
Gráficos planos 2D múltiplos
• Há duas formas de se fazer gráficos múltiplos em
uma única janela.
• Exemplo 1:
–
–
–
–
–
x=0:0.01:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(4*x);
plot(x,y1,x,y2,x,y3)
MATLAB - INF01040 - Profa. Patrícia Jaques
72
+ gráficos
• É possível alterar os caracteres de tipo de linha e de
ponto usados como padrão.
• Exemplo:
–
–
–
–
–
x=0:0.01:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(4*x);
plot(x,y1,'--',x,y2,'*',x,y3,'+')
MATLAB - INF01040 - Profa. Patrícia Jaques
73
+ gráficos
•
• Tipos de linha:
–
–
–
–
–
–
–
–
–
–
–
–
–
sólido (-),
tracejado (--),
pontilhado (:),
traço e ponto (-.)
•
• Exemplo:
x1 = 0:pi/100:2*pi;
x2 = 0:pi/10:2*pi;
plot(x1,sin(x1),'r:',x2,sin(x2),‘c+')
Tipos de Marcadores:
ponto (.),
sinal de adição (+),
asterisco (*),
círculo (o),
letra x (x)
Quadrado (s)
Triangulo (v)
Losango (d)
Hexágono (h)
Cores:
–
–
–
–
–
–
–
Amarelo (y)
Magenta (m)
Verde (g)
Azul (b)
Preto (k)
Vermelho (r)
Ciano (c)
MATLAB - INF01040 - Profa. Patrícia Jaques
74
Gráficos planos 2D
• O comando subplot pode ser usado para particionar
a tela e permite a apresentação simultânea de vários
gráficos não superpostos.
• Exemplo:
– ...
MATLAB - INF01040 - Profa. Patrícia Jaques
75
Gráficos planos 2D
–
–
–
–
–
–
–
–
–
–
x=0:0.01:2*pi;
y1=sin(x);
y2=sin(2*x);
y3=sin(3*x);
y4=sin(4*x)+cos(x);
y5=cos(2*x)+sin(3*x);
subplot(2,2,1), plot(y1)
subplot(2,2,2), plot(y2)
subplot(2,2,3), plot(y3)
subplot(2,2,4), plot(y4)
• Exercício:
– modifique o código ao lado
para apresentar também a
função y5.
MATLAB - INF01040 - Profa. Patrícia Jaques
76
Gráficos em malhas 3D
• É possível desenhar superfícies em malhas 3D com
a função mesh.
• O comando mesh(z) cria um desenho 3D em
perspectiva dos elementos da matriz z.
• A superfície da grade é definida pelas coordenadas z
dos pontos, acima de uma grade retangular no plano
x-y.
MATLAB - INF01040 - Profa. Patrícia Jaques
77
Gráficos em malhas 3D
• Exemplo:
– mesh(eye(10))
• Para desenhar o gráfico de uma função z=f(x,y)
sobre um retângulo, deve-se primeiro definir os
vetores xx e yy que dão as partições dos lados do
retângulo.
MATLAB - INF01040 - Profa. Patrícia Jaques
78
Gráficos em malhas 3D
• Com a função meshgrid (domínio da grade) é
possível criar uma matriz x, cujas linhas igualam-se a
xx e cujas colunas têm comprimentos de yy e,
similarmente, uma matriz y, cujas linhas igualam-se à
matriz yy usando-se o comando:
– [x,y]=meshgrid(xx,yy);
• Depois, computa-se uma matriz z, obtida pela
avaliação da função f sobre as matrizes x e y, com a
qual o comando mesh pode ser utilizado.
MATLAB - INF01040 - Profa. Patrícia Jaques
79
Gráficos em malhas 3D
• Exemplo:
–
–
–
–
–
xx=-2:.1:2;
yy=xx;
[x,y]=meshgrid(xx,yy);
z=exp(-x.^2-y.^2);
mesh(z)
• As primeiras linhas podem ser omitidas, se
modificarmos a linha de meshgrid para:
– [x,y]=meshgrid(-2:.1:2, -2:.1:2);
MATLAB - INF01040 - Profa. Patrícia Jaques
80
Gráficos em malhas 3D
• Exemplo:
–
–
–
–
–
[X,Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(X,Y,Z,'EdgeColor','black')
eps é o menor número em ponto flutuante do sistema. Sua
funçao no exemplo é evitar divisão por zero.
– surf(X,Y,Z)
MATLAB - INF01040 - Profa. Patrícia Jaques
81
Gráficos em malhas 3D
• Comandos para plotar gráficos tridimensionais e
contornos;
–
–
–
–
–
–
–
–
plot3 – plota um gráfico 3D
Comet3 – plota em 3D com trajetória de cometa
contour3 – plota contorno 3D
clabel – plota contorno com valores
mesh – plota malha 3D
meshc – combina mesh e contour
surf – plota superfície 3D
surfc – combina surf e contour
MATLAB - INF01040 - Profa. Patrícia Jaques
82
Gráficos em malhas 3D
• Anotações no gráfico;
–
–
–
–
–
–
–
Title – título do gráfico
Xlabel – título do eixo x
Ylabel – título do eixo y
Zlabel – título do eixo z
Text – insere anotações no gráfico
Gtext – insere anotações com o mouse
Grid – linhas de grade no gráfico
MATLAB - INF01040 - Profa. Patrícia Jaques
83
Exemplos de arquivos.m
• matrizA.m
– Gera matriz A (10x10)
• cartograf.m
– mapeamento de uma parte do fundo do oceano
• circulo.m, exemplo-funcao.m, exfuncao.m , procbasico.m
– usa comando plot, title, xlabel, ylabel….
• distacia.m
– distancia em linha reta entre dois pontos num plano, usa funcao sqrt
• exemploG3D.m, D3Dmesh.m, malha.m, superficies.m
– comandos mesh, surf para gerar gráficos 3D
• exemplopol.m
– Exemplo de polinômios
• G2D.m, G2Dplot.m, G2Dplotmult
– Usa o comando plot, plotar com múltiplas linhas
MATLAB - INF01040 - Profa. Patrícia Jaques
84
Exemplos de arquivos.m (2)
• exif.m
– Comando if-end
• imagem.m
– usa comando imagesc, matriz visualizada como imagem
• linhatrid.m
– Diagrama de linha tridimensional (uso do title, xlabel...)
• matrizex.m
– Exercício do cálculo das medias
• exerciciotemp.m
– Exercício das temperaturas
MATLAB - INF01040 - Profa. Patrícia Jaques
85