Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Tutorial do MATLAB
Steven Levandosky
Departamento de Matemática
Universidade de Stanford
Copyright 2001
Conteúdo
1. Introdução
2. Introdução
3. Variáveis
4. Matrizes e Vetores
5. Dot Products e Cross Products
6. Operações Básicas com Matrizes
7. Formulário Echelon de Linha Reduzida
8. Posto
9. Inversas
10. Autovetores e Autovalores
11. Operações com Componentes
12. Curvas de Plotagem
13. Superfícies de Plotagem
14. Curvas de Nível
15. Campos de Vetores
16. Variáveis e Expressões Simbólicas
17. Resolvendo Equações Algébricas
18.Derivativos
19. M-Files
1 Introdução
O MATLAB, que significa Matrix Laboratory, é um programa muito poderoso para realizar cálculos numéricos e simbólicos, e é
amplamente utilizado em ciência e engenharia, bem como em matemática. Este tutorial foi desenvolvido para fornecer ao leitor uma
compreensão básica de como o MATLAB funciona e como usá-lo para resolver problemas de álgebra linear e cálculo multivariado.
Destina-se a complementar os materiais do curso regular. Portanto, embora muitas vezes lembremos muitas das definições e resultados
básicos, supomos que o leitor já tenha alguma familiaridade com eles. Todos os comandos neste documento foram executados usando
a versão 5.3 e também devem funcionar na versão 6.
2 Primeiros passos
Quando o MATLAB é iniciado (digitando matlab no prompt de comando em uma máquina Unix ou executando o executável em um
PC ou Mac), o prompt do MATLAB
>>
ans =
6,5000
Por padrão, o MATLAB retorna expressões numéricas como decimais com 5 dígitos. A função de formatação é usada para alterar o
formato da saída. Digite format rat para ter o MATLAB retornar expressões racionais.
>> formato rato
>> 5.1-3.3
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 1/32
07/05/2019 Tutorial do MATLAB
ans =
9/5
As quatro operações básicas de adição, subtração, multiplicação e divisão são realizadas usando os símbolos +, -, * e / ,
respectivamente. A exponenciação é realizada por meio do símbolo ^ .
>> 2 ^ 7
ans =
128
O MATLAB possui a maioria das funções matemáticas padrão integradas. A função sqrt calcula a raiz quadrada.
>> formato longo
>> sqrt (2)
ans =
1,41421356237310
As funções trigonométricas básicas ( cos , sin , tan , seg , csc , cot ), suas inversas ( acos , asin , atan , asec , acsc , acot ), a função
exponencial exp e o log logaritmo natural também são embutidas. Por exemplo, ln (4) + cos ( p / 6) é calculado da seguinte maneira.
>> log (4) + cos (pi / 6)
ans =
2,25231976490433
Para obter informações sobre qualquer função do MATLAB, digite help seguido do nome da função.
>> ajuda abs
Métodos sobrecarregados
ajuda sym / abs.m
Para evitar a necessidade de redigitar expressões longas, use a tecla de seta para cima para percorrer as linhas digitadas anteriormente.
Digitar um ou mais caracteres e, em seguida, a tecla de seta para cima exibe as linhas anteriores que começam com esses caracteres.
Para sair do tipo MATLAB, saia .
3 variáveis
Para atribuir um valor a uma variável no MATLAB, simplesmente digite o nome da variável, seguido pelo operador de atribuição, = ,
seguido pelo valor.
>> x = 7
x =
7
Observe que os nomes de variáveis no MATLAB diferenciam maiúsculas de minúsculas, portanto, X e x não são iguais. Podemos
realizar todas as operações usuais com x .
>> x ^ 2-3 * x + 2
ans =
30
>> log (x)
ans =
1,94591014905531
>> sin (x)
ans =
0,665698659871879
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 2/32
07/05/2019 Tutorial do MATLAB
>> y = 8 * x
y =
56
Isso, no entanto, não implica qualquer relação permanente entre x e y . Se mudarmos x , o valor de y não muda.
>> x = x + 5
x =
12
>> y
y =
56
O comando que retorna uma lista de todas as variáveis no espaço de trabalho atual, enquanto quem retorna a mesma lista com
informações mais detalhadas sobre cada variável.
>> quem
ans xy
>> quem
Classe de bytes de tamanho de nome
Observe que o tamanho de cada variável é 1 × 1. Todas as variáveis no MATLAB são matrizes. Escalares como x e y são apenas
matrizes 1 × 1. Vamos explicar como inserir matrizes na próxima seção. Para limpar uma ou mais variáveis da área de trabalho, digite
clear seguido dos nomes das variáveis. Digitando apenas claro limpa todas as variáveis.
>> claro
>> quem
>> x
??? Função indefinida ou variável 'x'.
4 matrizes e vetores
Para inserir uma matriz no MATLAB, use colchetes e separe as entradas em uma linha por espaços e linhas separadas usando ponto e
vírgula.
>> A = [2 1 -1 8; 1 0 8 -3; 7 1 2 4]
A =
2 1 -1 8
1 0 8 -3
7 1 2 4
Frequentemente, não queremos que o MATLAB exiba uma resposta, especialmente quando lidamos com matrizes muito grandes. Para
suprimir a saída, coloque um ponto e vírgula no final da linha. Digitando
>> B = [2 0 -3; -1 1 3];
ainda definirá a variável B contendo uma matriz 2 × 3, mas o MATLAB não fará eco a nada.
>> quem
Classe de bytes de tamanho de nome
Vetores (vetores de coluna) são simplesmente matrizes com uma única coluna.
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 3/32
07/05/2019 Tutorial do MATLAB
>> v = [2; 3; -4]
v =
2
3
-4
Muitas vezes é necessário definir vetores com entradas uniformemente espaçadas. No MATLAB, o cólon ( : ) proporciona um atalho
para a criação de tais vectores.
>> 2: 5
ans =
2 3 4 5
Recorde-se que a transposta da matriz A representa a matriz de um T cuja entrada em linha i coluna j é a mesma que a entrada na linha
de j coluna i de A . No MATLAB, A' representa a transposta da matriz A .
>> A = [5 -2 9; 11 7 8]
A =
5 -2 9
11 7 8
>> A '
ans =
5 11
-2 7
9 8
Para definir vetores de coluna regularmente espaçados, podemos fazer a transposição de um vetor de linha regularmente espaçado.
>> [1: 3: 10] '
ans =
1
4
7
10
>> A (3,2)
ans =
15
Também é possível visualizar várias entradas em qualquer linha ou coluna. Por exemplo, a segunda e quarta entradas na terceira linha
são acessadas da seguinte forma.
>> A (3, [2 4])
ans =
15 9
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 4/32
07/05/2019 Tutorial do MATLAB
-2
As entradas de um vetor (linha ou coluna) podem ser acessadas usando um único índice.
>> w = [7; 13; 11]
w =
7
13
11
>> w (2)
ans =
13
Matrizes com o mesmo número de linhas podem ser concatenadas horizontalmente, e matrizes com o mesmo número de colunas
podem ser concatenadas verticalmente.
>> A = [1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B = [7 8; 9 10]
B =
7 8
9 10
>> [AB]
ans =
1 2 3 7 8
4 5 6 9 10
>> C = [7 8 9]
C =
7 8 9
>> [A; C]
ans =
1 2 3
4 5 6
7 8 9
Para remover linhas ou colunas de uma matriz, basta redefini-las para serem matrizes vazias.
>> A = [4 7 2 1 3; 8 7 12 -2 5; 11 1 14 -2 0]
A =
4 7 2 1 3
8 7 12 -2 5
11 1 14 -2 0
>> A (2,:) = []
A =
4 7 2 1 3
11 1 14 -2 0
>> A (:, [1 3]) = []
A =
7 1 3
1 -2 0
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 5/32
07/05/2019 Tutorial do MATLAB
-12
O comprimento de um vetor também pode ser encontrado diretamente usando a função normal .
>> norma (v)
ans =
28,4077
Lembre-se também que se q é o ângulo entre dois vetores v e w então v · w = || v || || w || cos q . Resolvendo o ângulo, temos q =
arccos (( v · w ) / || v || || w || ).
>> theta = acos (ponto (v, w) / (norma (v) * norma (w)))
teta
1,6144
>> theta * 180 / pi
ans =
92,4971
O produto cruzado v × w é ortogonal para ambos v e w . Podemos verificar isso pegando seu produto escalar com ambos v e w .
Lembre-se de que dois vetores são ortogonais se e somente se seu produto escalar é igual a zero.
>> ponto (x, v)
ans =
0
>> ponto (x, w)
ans =
0
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 6/32
07/05/2019 Tutorial do MATLAB
5 -1 2
3 4 7
>> B = [2 2 1; 5 0 3]
B =
2 2 1
5 0 3
>> A + B
ans =
7 1 3
8 4 10
Observe que apenas matrizes com as mesmas dimensões podem ser somadas.
>> C = [3 1; 6 4]
C =
3 1
6 4
>> A + C
??? Erro ao usar ==> +
As dimensões da matriz devem concordar.
A multiplicação escalar (e a divisão por escalares diferentes de zero) também é executada de maneira componente.
>> 2 * A
ans =
10 -2 4
6 8 14
O produto da matriz A * B é definido quando A é m × n e B é n × k . Ou seja, o número de colunas de A deve ser igual ao número de
linhas de A . Neste caso, o produto A * B é uma matriz m × k .
>> A = [3 1 7 2; 6 -3 4 2; 9 4 -1 -2]
A =
3 1 7 2
6 -3 4 2
9 4 -1 -2
>> B = [1 2; 3 4; 5 6; 7 8]
B =
1 2
3 4
5 6
7 8
>> A * B
ans =
55 68
31 40
2 12
O MATLAB produz uma mensagem de erro se as dimensões da matriz interna não estiverem de acordo.
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 7/32
07/05/2019 Tutorial do MATLAB
>> B * A
??? Erro usando ==> *
Dimensões da matriz interna devem concordar.
A exceção a essa regra é quando uma das matrizes é uma matriz 1 × 1, isto é, uma escalar. Neste caso, o produto é interpretado como
multiplicação escalar.
>> C = [2]
C =
2
>> A * C
ans =
6 2 14 4
12 -6 8 4
18 8 -2 -4
Além disso, o produto A * v é igual à combinação linear das colunas de A cujos coeficientes são os componentes de v .
>> v (1) * A (:, 1) + v (2) * A (:, 2) + v (3) * A (:, 3)
ans =
639
391
Uma matriz quadrada pode ser multiplicada por si mesma e, nesse caso, faz sentido obter poderes da matriz. Por exemplo, A ^ 6 é
igual a A * A * A * A * A * A .
>> A = [0 1; 1 1]
A =
0 1
1 1
>> A * A
ans =
1 1
1 2
>> A ^ 6
ans =
5 8
8 13
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 8/32
07/05/2019 Tutorial do MATLAB
0 0 0 0 0 0
Qualquer problema que possa ser formulado em termos de um sistema de equações lineares pode ser resolvido usando-se rref . Por
exemplo, considere o seguinte conjunto de vetores.
>> v1 = [1; 1; 1]; v2 = [1; -2; 1]; v3 = [1; 2; 3]; v4 = [2; 3; 4]; v5 = [1; -1; -3];
Suponha que queremos escrever v5 como uma combinação linear dos outros vetores. Primeiro definimos a matriz aumentada para o
sistema resultante de equações x v + x v + x v + x v = v .
1 1 2 2 3 3 4 4 5
Qualquer outra escolha de x resultará em uma maneira diferente de escrever v5 como uma combinação linear dos outros vetores.
4
Agora, suponha que queremos escrever v2 como uma combinação linear de v1 , v3 , v4 e v5 .
>> A = [v1 v3 v4 v5 v2]
A =
1 1 2 1 1
1 2 3 -1 -2
1 3 4 -3 1
>> rref (A)
ans =
1 0 1 3 0
0 1 1 -2 0
0 0 0 0 1
Desta vez, a terceira equação reduz para 0 = 1, portanto, não há soluções e, portanto, v2 não é uma combinação linear dos outros
vetores.
Outra maneira de usar rref está na forma [R, p] = rref (A) , que define R como a forma de escalão de linha reduzida de A e p para
ser o vetor listando as colunas de R que contêm pivôs.
>> A = [1 2 1 5; 1 2 2 6; 1 2 3 7; 1 2 4 8]
A =
1 2 1 5
1 2 2 6
1 2 3 7
1 2 4 8
>> [R, p] = rref (A)
R =
1 2 0 4
0 0 1 1
0 0 0 0
0 0 0 0
p =
1 3
Com a forma escalonada reduzida por linhas de A na mão poderíamos facilmente encontrar uma base para o espaço nulo de A . O
comando null faz isso por nós.
>> null (A, 'r')
ans =
-2 -4
1 0
0 -1
0 1
O 'r' significa racional e diz MATLAB para encontrar o espaço nulo da forma escalonada reduzida por linhas de A . Sem o 'r' , o
MATLAB encontra uma base ortonormal para o espaço nulo - isto é, uma base que consiste em vetores de unidade mutuamente
ortogonais.
>> N = nulo (A)
N =
-0,9608 0
0,1601 -0,8165
-0,1601 -0,4082
0,1601 0,4082
Para verificar se esta é uma base ortonormal que formam o produto N '* N . Uma vez que as linhas de n ' são as colunas de N , a
entrada na linha i , coluna j de N' * N é o produto de ponto de coluna i e coluna j de N .
>> N '* N
ans =
1,0000 0
0 1,0000
Os da diagonal indicam que as colunas de N são vetores unitários, e os zeros indicam que são ortogonais entre si.
We can also use rref to find the inverse of an invertible matrix. Recall that a matrix A is invertible if and only if rref(A)=In, the n×n
identity matrix, and that in this case rref[A | In]=[In | A-1]. For example, consider the following matrix.
>> A=[1 1 1; 1 2 3; 1 3 6]
A =
1 1 1
1 2 3
1 3 6
No MATLAB, o n x n matriz de identificação que n é dada por olho (n) . Vamos aumentar A por olho (3) e calcular seu formulário
escalonado de linha reduzida.
>> B = [um olho (3)]
B =
1 1 1 1 0 0
1 2 3 0 1 0
1 3 6 0 0 1
>> rref (B)
ans =
1 0 0 3 -3 1
0 1 0 -3 5 -2
0 0 1 1 -2 1
assim
>> Ainv = [3 -3 1; -3 5 -2; 1 -2 1]
Ainv =
3 -3 1
-3 5 -2
1 -2 1
1 1
é o inverso de uma . Para verificar isso, lembre-se de que A - A = AA - = I n .
>> Ainv * A
ans =
1 0 0
0 1 0
0 0 1
>> A * Ainv
ans =
1 0 0
0 1 0
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 10/32
07/05/2019 Tutorial do MATLAB
0 0 1
8 Rank
Para calcular a classificação de uma matriz, usamos o comando rank . Relembramos brevemente alguns fatos importantes sobre a
classificação de uma matriz.
As colunas de uma matriz são linearmente independentes se e somente se sua classificação for igual ao número de colunas.
Por exemplo,
>> A = [1 2 1 4; 2 3 1 3; 3 2 1 2; 4 3 1 1]
A =
1 2 1 4
2 3 1 3
3 2 1 2
4 3 1 1
>> classificação (A)
ans =
3
Assim, o espaço da coluna de A tem dimensão 3 e as colunas de A acima são linearmente dependentes. Usando rank podemos
determinar quais colunas de A formam uma base para seu espaço de coluna.
>> classificação (A (:, [1 2 3]))
ans =
3
>> classificação (A (:, [1 2 4]))
ans =
3
>> classificação (A (:, [1 3 4]))
ans =
2
>> classificação (A (:, [2 3 4]))
ans =
3
Assim, qualquer escolha de três colunas forma uma base para o espaço de coluna de A, exceto as colunas um, três e quatro. Em
seguida, usamos rank como teste de invertibilidade.
>> A = [11 -21 3; 8 2 1; 16 -12 5]
A =
11 -21 3
8 2 1
16 -12 5
>> classificação (A)
ans =
3
>> B = [3 4 5; 6 7 8; 9 10 11]
B =
3 4 5
6 7 8
9 10 11
>> classificação (B)
ans =
2
Usando a classificação , é possível determinar se um determinado vetor está ou não no espaço da coluna de uma matriz.
>> A = [5 8 -4; 3 19 11; -6 6 0; 12 4 1]
A =
5 8 -4
3 19 11
-6 6 0
12 4 1
>> v1 = [21; 16; -7; 33], v2 = [30; 7; 30; -16
v1 =
21
16
-7
33
v2 =
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 11/32
07/05/2019 Tutorial do MATLAB
30
7
30
-16
>> classificação (A)
ans =
3
Portanto, o espaço da coluna A é tridimensional. Agora considere a matriz aumentada [A v] . Se v está no espaço de coluna de A , então
[A v] tem posto 3. Caso contrário [A v] tem posto 4.
9 inversões
O inverso de uma matriz invertível A pode ser encontrado usando A ^ (- 1) ou inv (A) .
>> A = [2 1 1; 1 2 2; 2 1 2]
A =
2 1 1
1 2 2
2 1 2
>> Ainv = inv (A)
Ainv =
2/3 -1/3 0
2/3 2/3 -1
-1 0 1
O MATLAB fornece uma mensagem de aviso se a matriz for singular (não invertível).
>> B = [1 2 3; 4 5 6; 7 8 9]
B =
1 2 3
4 5 6
7 8 9
>> inv (B)
Aqui o MATLAB retorna um inverso. Para ver que B é realmente singular, calcule sua classificação.
>> classificação (B)
ans =
2
Desde que a classificação de B é menor que 3, B é singular. Lembre-se também de que uma matriz é invertível se e somente se seu
determinante for diferente de zero.
>> det (B)
ans =
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 12/32
07/05/2019 Tutorial do MATLAB
0
De acordo com o MATLAB, a matriz C tem posto 1 e determinante zero e, portanto, é singular. No entanto, se deixarmos que e =
2
0,00000000000001, então det ( C ) = (1+ e ) (1 - e ) - 1 = - e ¹ 0, então C é invertível. O problema é que no formato MATLAB longo
é preciso para 15 lugares e, portanto, reconhece 1+ ee 1 - e como sendo diferente de 1, mas reconhece
2
(1+ e ) (1 - e ) = 1 - e = 0,99999999999999999999999999999
como 1. Este exemplo deve servir como um aviso para não aceitar cegamente tudo o que o MATLAB nos diz.
Para resolver uma equação da forma A x = b onde A é invertível, nós simplesmente multiplicamos pelo inverso de A para obter x = A -
1
b.
>> A = [11 7 -6 8; 3 -1 12 15; 1 1 1 7; -4 6 1 8]
A =
11 7 -6 8
3 -1 12 15
1 1 1 7
-4 6 1 8
>> b = [10; -23; -13; 4]
b =
10
-23
-13
4
>> formato rato
>> x = inv (A) * b
x =
1
5
2
-3
10 Autovetores e Autovalores
O comando eig é usado para encontrar os autovalores de uma matriz quadrada.
>> A = [3 1 1; 1 3 1; 1 1 3]
A =
3 1 1
1 3 1
1 1 3
>> eig (A)
ans =
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 13/32
07/05/2019 Tutorial do MATLAB
2,0000
2,0000
5,0000
Se A é diagonalizáveis, o eig comando também pode ser utilizado para encontrar uma eigenbasis, juntamente com a matriz diagonal
para o qual é semelhante.
>> [Q, D] = eig (A)
Q =
-0,8164 -0,0137 0,5774
0,3963 0,7139 0,5774
0,4201 -0,7001 0,5774
D =
2,0000 0 0
0 2,0000 0
0 0 5,0000
-1
Aqui, as colunas da matriz de Q formam um eigenbasis de um , e Q AQ = D . Vamos checar.
>> inv (Q) * A * Q
ans =
2,0000 0 0,0000
0,0000 2,0000 0,0000
-0,0000 0,0000 5,0000
Se nós apenas quiséssemos encontrar os autovetores da maneira usual, nós usaríamos o comando nulo .
>> C1 = nulo (A-2 * olho (3), 'r')
C1 =
-1 -1
1 0
0 1
>> C2 = nulo (A-5 * olho (3), 'r')
C2 =
1
1
1
Vamos agora verificar se esses três vetores formam uma base de ego.
>> C = [C1 C2]
C =
-1 -1 1
1 0 1
0 1 1
>> inv (C) * A * C
ans =
2,0000 - 0,0000 0,0000
0 2,0000 - 0,0000
0 0 5,0000
Ótimo! Funcionou.
11 Operações Componentwise
O produto componente a componente de duas matrizes A e B é a matriz A. * B cujas entradas são os produtos das entradas
correspondentes de A e B .
>> A = [1 2 3; 4 5 6]
A =
1 2 3
4 5 6
>> B = [3 2 1; -1 2 2]
B =
3 2 1
-1 2 2
>> A. * B
ans =
3 4 3
-4 10 12
A divisão e exponenciação dos componentes são definidas por A./B e A. ^ B , respectivamente. Cada operação componentwise deve
fazer sentido ou o MATLAB produzirá uma mensagem de erro.
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 14/32
07/05/2019 Tutorial do MATLAB
>> A./B
ans =
1/3 1 3
-4 5/2 3
>> A. ^ B
ans =
1 4 3
1/4 25 36
12 curvas de plotagem
The plot function is used to plot data in the plane. Given a vector x of x-coordinates x1 through xn and a vector y of y-coordinates y1
through yn, plot(x,y) graphs the points (x1,y1) through (xn,yn). By default these points are connected in order by straight line
segments. For example, here is how one would plot the quadrilateral with vertices (0,0), (1,1), (4,2) and (5,-1).
>> x=[0 1 4 5 0];
>> y=[0 1 2 -1 0];
>> parcela (x, y)
Pode-se aproximar o gráfico de uma função plotando um grande número de pontos no gráfico. Lembre-se de que j: i: k representa o
3
vetor de linha cujos componentes variam de j a k em incrementos de i . Para plotar o gráfico de y = x no intervalo [ - 2,2], primeiro
definimos um vetor de linha cujos componentes variam de -2 to 2 in increments of .05.
O vetor x é portanto uma matriz de 1 por 81. Isso pode ser visto digitando o tamanho (x) . Em seguida, usamos a exponenciação de
componentes para definir um vetor do mesmo tamanho que x cujos componentes são os cubos dos componentes de x .
>> y = x, ^ 3;
Digitar y = x ^ 3 resultaria em um erro, pois x não é uma matriz quadrada. Finalmente, usamos a função de plotagem para exibir o
gráfico.
>> parcela (x, y)
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 15/32
07/05/2019 Tutorial do MATLAB
Curvas paramétricas no plano podem ser plotadas da mesma maneira. Por exemplo, para traçar a curva r ( t ) = (2 t cos t / ( t +1), 2 t
sin t / ( t +1)) para t Î [0,4 p ], primeiro inserimos o vetor de valores t .
>> t = 0: 1: 4 * pi;
Observe que usamos multiplicação por componente e divisão entre expressões envolvendo o vetor t . Como a multiplicação escalar já
é uma operação componentwise, a multiplicação escalar por 2 não requer o ponto. Agora nós plotamos a curva.
>> parcela (x, y);
>> título ('(2t cos t / (t + 1), 2t sen t / (t + 1))')
Observe que o MATLAB dimensiona automaticamente os eixos para que o gráfico ocupe toda a tela. Para ver o gráfico na escala
adequada, digite axis equal .
>> eixo igual
To plot more than one curve in the same figure, type hold on. For instance, let's plot the two circles x2+y2=4 and (x-1)2+(y-1)2=1.
These are parametrized, respectively, by r1(t)=(2cost,2sint) and r2(t)=(1+cost,1+sint) for t Î [0,2p].
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 16/32
07/05/2019 Tutorial do MATLAB
>> t=0:pi/20:2*pi;
>> plot(2*cos(t),2*sin(t))
>> hold on
>> plot(1+cos(t),1+sin(t))
>> axis equal
>> title('The circles x^2+y^2=4 and (x-1)^2+(y-1)^2=1')
The three dimensional analogue of plot is plot3. For example, the parametric curve r(t)=(cos(t),sin(t),t) for t Î [0,8p] is plotted as
follows.
>> t=0:.1:8*pi;
>> plot3(cos(t),sin(t),t)
>> title('(cos t,sin t,t)')
13 Plotting Surfaces
Para plotar o gráfico de uma função f ( x , y ) sobre um domínio retangular
R = [ a , b ] × [ c , d ] = {( x , y ) | um £ x £ b e c £ y £ d },
precisamos primeiro criar uma grade de pontos dentro do domínio usando a função meshgrid .
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 17/32
07/05/2019 Tutorial do MATLAB
Por exemplo, para subdividir o retângulo [0,4] × [0,3] em retângulos de largura 1 e altura 0,5, primeiro definimos vetores x e y que
determinam o espaçamento da grade.
>> x = 0: 4
x =
0 1 2 3 4
>> y = 0: 0,5: 3
y =
0 0,5000 1,0000 1,5000 2,0000 2,5000 3,0000
Essas matrizes 7 × 5 definem os 35 pontos da grade. A matriz X contém as coordenadas x e Y contém as coordenadas y . Suponha agora
que queremos plotar a função f ( x , y ) = 3 x - 2 y . Nós então definimos a matriz Z de z coordenadas .
>> Z = 3 * X-2 * Y
Z =
0 3 6 9 12
-1 2 5 8 11
-2 1 4 7 10
-3 0 3 6 9
-4 -1 2 5 8
-5 -2 1 4 7
-6 -3 0 3 6
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 18/32
07/05/2019 Tutorial do MATLAB
Não foi necessário neste exemplo definir as variáveis x e y . Poderíamos ter definido a grade diretamente digitando
>> [X, Y] = malha de rede (0: 4,0: .5: 3)
Além disso, se o grid de rede tiver um único vetor como argumento, ele definirá uma grade quadrada com o mesmo espaçamento em
x e y . Então malha de malha (0: 0,5: 2) é equivalente a grade de malha (0: 0,5: 2,0,5: 2) .
2
Em seguida, vamos desenhar o gráfico da função f ( x , y ) = x y - 2 y sobre o retângulo [ - 2,2] × [ - 1,1]. Usaremos uma grade
consistindo de quadrados com comprimento de lado 0,1 e suprimiremos a saída para que o MATLAB não exiba as matrizes 11 × 21
resultantes.
>> [X, Y] = grade de malha (-2: 0,1: 2, -1: 0,1: 1);
Um problema a ter em conta ao traçar superfícies é a divisão por zero. Por exemplo, suponha que pretende representar graficamente o
2 2
gráfico de f ( x , y ) = xy / Ö [( x + y )] sobre o quadrado [ - 1,1] x [ - 1,1].
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 19/32
07/05/2019 Tutorial do MATLAB
>> [X, Y] = grade de malha (-1: 0,1: 1);
>> Z = X. * Y / sqrt (X. ^ 2 + Y. ^ 2);
Aviso: Divida por zero.
Se agora tentarmos traçar a superfície, o ponto da grade em (0,0) está faltando! Para evitar tais dificuldades, podemos simplesmente
deslocar a grade um pouco para que (0,0) não faça parte da grade.
>> [X, Y] = malha de rede (-. 99: .1: 1);
>> Z = X. * Y / sqrt (X. ^ 2 + Y. ^ 2);
>> surf (X, Y, Z)
>> title ('Gráfico de f (x, y) = xy / \ surd (x ^ 2 + y ^ 2)')
>> eixo igual
Por fim, plotamos a superfície e dimensionamos os eixos para que pareçam com uma esfera!
>> surf (X, Y, Z)
>> eixo igual
>> title ('Esfera de unidade em {\ bf R} ^ 3')
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 20/32
07/05/2019 Tutorial do MATLAB
14 curvas de nível
2
Existem várias maneiras de traçar curvas de nível de uma função de duas variáveis. Considere, por exemplo, a função f ( x , y ) = x -
2
y . Para simplesmente traçar as curvas de nível de f no plano, usamos o contorno .
>> [X, Y] = grade de malha (-1: 0,1: 1);
>> Z = X. ^ 2-Y ^ 2;
>> contorno (X, Y, Z)
>> title ('Curvas de nível de f (x, y) = x ^ 2-y ^ 2')
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 21/32
07/05/2019 Tutorial do MATLAB
3
Para mostrar as curvas de nível em R na sua altura real, utilize contour3 .
>> contorno3 (X, Y, Z)
>> title ('Curvas de nível de f (x, y) = x ^ 2-y ^ 2 na altura real.')
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 22/32
07/05/2019 Tutorial do MATLAB
15 campos de vetores
Recall that a vector field on Rn is a function F:Rn®Rn, and that vector fields are represented graphically by placing the vector F(x) at
each point x in Rn. In MATLAB, quiver(X,Y,U,V) plots vectors (U,V) at the points (X,Y). For example, the vector field F(x,y)=(-y,x)
is shown below.
>> [X,Y]=meshgrid(-1:.2:1);
>> quiver(X,Y,-Y,X)
>> axis equal
>> axis([-1 1 -1 1])
Observe, no entanto, que este gráfico não é muito preciso. O vetor em (0,8,0) certamente não é (0, 0,8). O MATLAB dimensiona
automaticamente os vetores para que eles não se sobreponham. Para modificar este escalonamento use quiver (X, Y, U, V, s) , onde
s é o escalonamento desejado. Definir s = 0 remove a escala automática e mostra a imagem "correta".
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 23/32
07/05/2019 Tutorial do MATLAB
Um exemplo importante de um campo vetorial é o gradiente Ñ f de uma função avaliada escalar f : R n ® R. Plotamos o campo
3 2
vetorial gradiente de f ( x , y ) = x - 3 x - 2 y como segue. Primeiro defina uma grade e insira a função.
>> [X, Y] = grade de malha (-2: 0,2: 2, -1: 0,2: 1);
>> Z = X. ^ 3-3 * X-2 * Y. ^ 2;
Próximo,
[DX, DY] = gradiente (Z, 0,2, 0,2);
define [DX, DY] como (aproximadamente) o gradiente de f . A coisa crucial aqui é que o segundo e terceiro argumentos concordam
com o espaçamento na grade de malha anterior . Finalmente, usamos quiver para traçar o campo.
>> quiver (X, Y, DX, DY)
>> eixo igual
>> eixo ([- 2 2 -1 1])
>> title ('Campo vetorial de gradiente de f (x, y) = x ^ 3-3x-2y ^ 2')
Agora vamos traçar as curvas de nível de f na mesma trama. Usando uma grade mais fina torna o gráfico de contorno mais preciso.
>> [X, Y] = grade de malha (-2: 0,1: 2, -1: 0,1: 1);
>> Z = X. ^ 3-3 * X-2 * Y. ^ 2;
>> contorno (X, Y, Z, 10)
>> title ('Campo de vetores de gradiente e curvas de nível de f (x, y) = x ^ 3-3x-2y ^ 2')
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 24/32
07/05/2019 Tutorial do MATLAB
Observe que os vetores de gradiente são perpendiculares às curvas de nível, como esperado. Agora lembre-se de que um ponto no qual
o gradiente de f desaparece é chamado de ponto crítico de f . Das figuras parece que ( - 1,0) e (1,0) são pontos críticos. Também
lembre que o gradiente de f aponta na direção do maior aumento de f . Como todos os vetores de gradientes próximos a ( - 1,0)
apontam para ( - 1,0), concluímos que f deve ter um máximo local em ( - 1,0). Em (1,0), alguns vetores gradientes próximos apontam
para longe de (1,0) e alguns apontam para (1,0). Isso indica que ftem uma sela em (1,0). Isso pode ser visto no gráfico de f .
>> espere
>> surf (X, Y, Z)
>> title ('Gráfico de f (x, y) = x ^ 3-3x-2y ^ 2')
Isso define uma variável simbólica chamada x cujo valor é 'x' . Os dois nomes não precisam ser iguais. Por exemplo, x = sym ('y')
faz sentido, mas é um pouco confuso, especialmente se a variável y for definida. A função syms fornece uma abreviação para definir
variáveis simbólicas. A linha
>> syms xyz
equivale às três linhas x = sym ('x') , y = sym ('y') e z = sym ('z') . Usando variáveis simbólicas, podemos criar expressões
simbólicas.
>> S = x ^ 2-y ^ 2
S =
x ^ 2-y ^ 2
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 25/32
07/05/2019 Tutorial do MATLAB
Isto define a variável simbólica S contendo a expressão x ^ 2-y ^ 2 . Vamos fatorar essa expressão.
>> fator (S)
ans =
(xy) * (x + y)
Esta é a matriz para rotação no sentido anti-horário através do ângulo a . Vamos multiplicar isso pela matriz para rotação através do
ângulo b .
Hmm, simplifique não fez nada. Outra opção é usar simple , que procura a expressão equivalente mais curta.
>> D = simples (C)
D =
[cos (a + b), -sin (a + b)]
[sen (a + b), cos (a + b)]
É tentador pensar em expressões simbólicas como funções das variáveis simbólicas que elas contêm. Eles não são. Suponha que
2 2 2
desejamos inserir f ( x , y ) = (4 x - 1) e - x - y como uma expressão simbólica e computar f (1,2).
>> syms xy
>> f = (4 * x ^ 2-1) * exp (-x ^ 2-y ^ 2)
f =
(4 * x ^ 2-1) * exp (-x ^ 2-y ^ 2)
>> f (1,2)
??? O índice excede as dimensões da matriz.
Como f não é uma função, mas uma variável, o MATLAB lê f (1,2) como a entrada na linha 1, coluna 2 de f . Mas f tem apenas uma
entrada, a expressão (4 * x ^ 2-1) * exp (-x ^ 2-y ^ 2) . Para avaliar uma expressão simbólica, precisamos substituir valores por
suas variáveis simbólicas. Isso é feito usando a função subs .
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 26/32
07/05/2019 Tutorial do MATLAB
>> subs (f, {x, y}, {1,2})
ans =
0,0202
Observamos aqui que existe uma maneira de definir funções no MATLAB que se comportam da maneira usual. Isso é feito usando o
2
comando inline . Por exemplo, a função g ( x , y ) = x - 3 xy 2 é definido como se segue.
>> g = inline ('x ^ 2-3 * x * y + 2')
g =
Função Inline:
g (x, y) = x ^ 2-3 * x * y + 2
A desvantagem das funções embutidas é que elas não podem ser manipuladas simbolicamente.
>> g ^ 2
??? Erro ao usar ==> ^
Função '^' não definida para variáveis da classe 'inline'.
Em expressões com mais de uma variável, podemos resolver uma ou mais variáveis em termos das outras. Aqui encontramos as raízes
2
do machado quadrático + bx + c em x em termos de a , b e c . Por padrão, solve define a expressão dada igual a zero se uma equação
não for dada.
>> resolva ('a * x ^ 2 + b * x + c', 'x')
ans =
[1/2 / a * (- b + (b ^ 2-4 * a * c) ^ (1/2)]]
[1/2 / a * (- b- (b ^ 2-4 * a * c) ^ (1/2)]]
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 27/32
07/05/2019 Tutorial do MATLAB
2 2 2 2
Agora vamos encontrar os pontos de intersecção dos círculos x + y = 4 e ( x - 1) + ( y - 1) = 1.
>> S = solve ('x ^ 2 + y ^ 2 = 4', '(x-1) ^ 2 + (y-1) ^ 2 = 1')
S =
x: [2x1 sym]
y: [2x1 sym]
>> [Sx Sy]
ans =
[5 / 4-1 / 4 * 7 ^ (1/2), 5/4 + 1/4 * 7 ^ (1/2)]
[5/4 + 1/4 * 7 ^ (1/2), 5 / 4-1 / 4 * 7 ^ (1/2)]
18 Derivados
A diferenciação de uma expressão simbólica é realizada por meio da função diff . Por exemplo, vamos encontrar a derivada de f ( x )
= sin ( e x ).
>> syms x
>> f = sin (exp (x))
f =
sin (exp (x))
>> diff (f)
ans =
cos (exp (x)) * exp (x)
Para calcular a derivada parcial de uma expressão em relação a alguma variável, especificamos essa variável como um argumento
3 4
adicional em diff . Seja f ( x , y ) = x y + y sen x .
>> syms xy
>> f = x ^ 3 * y ^ 4 + y * sen (x)
f =
x ^ 3 * y ^ 4 + y * sin (x)
Em seguida, calculamos ¶ f / ¶ y .
>> diff (f, y)
ans =
4 * x ^ 3 * y ^ 3 + sin (x)
3 3
Finalmente, calculamos ¶ f / ¶ x .
>> diff(f,x,3)
ans =
6*y^4-y*cos(x)
The Jacobian matrix of a function f:Rn®Rm can be found directly using the jacobian function. For example, let f:R2®R3 be defined
by f(x,y)=(sin(xy),x2+y2,3x-2y).
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 28/32
07/05/2019 Tutorial do MATLAB
No caso de uma transformação linear, o Jacobiano é bastante simples.
>> A = [11 -3 14 7; 5 7 9 2; 8 12 -6 3]
A =
11 -3 14 7
5 7 9 2
8 12 -6 3
>> syms x1 x2 x3 x4
>> x = [x1; x2; x3; x4]
x =
[x1]
[x2]
[x3]
[x4]
>> T = A * x
= T
[11 * x1-3 * x2 + 14 * x3 + 7 * x4]
[5 * x1 + 7 * x2 + 9 * x3 + 2 * x4]
[8 * x1 + 12 * x2-6 * x3 + 3 * x4]
O Jacobian de T é precisamente A .
Suponhamos que f : R n ® Ré uma função de valor escalar. Então seu jacobiano é apenas seu gradiente. (Bem, quase. Estritamente
falando, eles são a transposição um do outro, pois o jacobiano é um vetor de linhas e o gradiente é um vetor de coluna.) Por exemplo,
2 2 2
seja f ( x , y ) = (4 x - 1) e - x - y .
ans =
[0, 0]
[1/2 * 5 ^ (1/2), 0]
[-1 / 2 * 5 ^ (1/2), 0]
O Hessiano de uma função com valor escalar f : R n ® Ré o n x n matriz de segunda ordem parciais derivados de f . Em MATLAB
2
podemos obter o Hessian de f computando o jacobiano do jacobiano de f . Considere mais uma vez a função f ( x , y ) = (4 x - 1) e - x
2 2
-y .
Agora podemos usar o Segundo Teste Derivativo para determinar o tipo de cada ponto crítico de f encontrado acima.
>> subs (Hf, {x, y}, {0,0})
ans =
10 0
0 2
>> subs (Hf, {x, y}, {1/2 * 5 ^ (1/2), 0})
ans =
-5,7301 0
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 29/32
07/05/2019 Tutorial do MATLAB
0 -2,2920
>> subs (Hf, {x, y}, {- 1/2 * 5 ^ (1/2), 0})
ans =
-5,7301 0
0 -2,2920
Assim, f tem um mínimo local em (0,0) e máximo local nos outros dois pontos críticos. Avaliar f nos pontos críticos fornece os valores
máximo e mínimo de f .
>> subs (f, {x, y}, {0,0})
ans =
-1
>> subs (f, {x, y}, {'1/2 * 5 ^ (1/2)', 0})
ans =
4 * exp (-5/4)
>> subs (f, {x, y}, {'- 1/2 * 5 ^ (1/2)', 0})
ans =
4 * exp (-5/4)
5/4
Assim, o valor mínimo de f é f (0,0) = - 1 e o valor máximo é f ( Ö 5 / 2,0) = f ( - Ö 5 / 2,0) = 4 e - . O gráfico de f é mostrado
abaixo.
As our final example, we solve a Lagrange multiplier problem. For f(x,y)=xy(1+y) let's find the maximum and minimum of f on the
unit circle x2+y2=1. First we enter the function f and the constraint function g(x,y)=x2+y2-1.
>> syms x y mu
>> f=x*y*(1+y)
f =
x*y*(1+y)
>> g=x^2+y^2-1
g =
x^2+y^2-1
Em seguida, vamos ver os pontos críticos encontrados. Nós podemos ignorar m agora.
>> [Sx Sy]
ans =
[1/6 * (22-2 * 13 ^ (1/2)) ^ (1/2), 1/6 + 1/6 * 13 ^ (1/2)]
[-1 / 6 * (22-2 * 13 ^ (1/2)) ^ (1/2), 1/6 + 1/6 * 13 ^ (1/2)]
[1/6 * (22 + 2 * 13 ^ (1/2)) ^ (1/2), 1 / 6-1 / 6 * 13 ^ (1/2)]
[-1 / 6 * (22 + 2 * 13 ^ (1/2)) ^ (1/2), 1 / 6-1 / 6 * 13 ^ (1/2)]
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 30/32
07/05/2019 Tutorial do MATLAB
[0, -1]
Finalmente nós convertemos estes em expressões decimais para identificar o máximo e o mínimo. Isso é feito usando o comando
duplo .
19 arquivos M
MATLAB can also be used as a programming language. MATLAB programs are called M-files, and are saved with the extension .m.
There are two types of M-files, scripts and functions. We will only discuss scripts here. A MATLAB script is a program which simply
executes lines of MATLAB code. Scripts are particularly useful for tasks that require several lines of code. Rather than retyping every
line when we want to make a small change, we can simply change one line of the script. A script consists of a plain text file with a list
of MATLAB commands that we wish to execute. Here is an example of a script.
A=[1 2; 3 4]
B=[5 6; 7 8]
A+B
Depois de criar um arquivo contendo o texto acima, salve-o com o nome do arquivo test.m . No MATLAB, acessamos esse arquivo
digitando test . Observe que, para que isso funcione, devemos ter certeza de que o diretório atual no MATLAB contém o arquivo. Os
comandos Unix ls (listam o conteúdo do diretório atual), cd (change directory) e pwd (nome da lista do diretório atual), todos
funcionam dentro do MATLAB.
>> teste
A =
1 2
3 4
B =
5 6
7 8
ans =
6 8
10 12
O MATLAB executa os comandos no arquivo M em ordem, como se tivéssemos os digitado dentro do MATLAB. Nós também
podemos fazer loops dentro de um script.
% sumsquares.m
% soma os primeiros n quadrados até n = 10
s = 0;
para n = 1: 10
s = s + n ^ 2
fim
Aqui está um último exemplo para tentar. Ele mostra uma animação da curva r ( t ) = (2 t cos t / ( t +1), 2 t sin t / ( t +1)) sendo
plotada. Veja a seção Curvas de plotagem para detalhes sobre os comandos usados.
% curve.m
% Mostra a animação de uma curva paramétrica sendo plotada.
aguente
para T = 0: 1: 4 * pi
t = [T T + 0,1];
parcela (2 * t. * cos (t). / (t + 1), 2 * t. * sen (t). / (t + 1))
eixo igual
eixo ([- 2 2 -2 2])
eixo fora
pausa (.01)
fim
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 32/32