Sei sulla pagina 1di 32

07/05/2019 Tutorial do MATLAB

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
>>

aparece. Todos os comandos do MATLAB são executados a partir desse prompt.


>> 2,3 + 4,2

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

Para eliminar o formato de espaçamento extra compacto .


>> formato compacto
>> 5 * 7
ans =
35

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

ABS Valor absoluto


ABS (X) é o valor absoluto dos elementos de X. Quando
X é complexo, ABS (X) é o módulo complexo (magnitude) do
os elementos do X.

Veja também SIGN, ANGLE, UNWRAP.

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

Novas variáveis podem ser definidas usando variáveis existentes.

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

Suas variáveis são:

ans xy

>> quem
Classe de bytes de tamanho de nome

ans 1x1 8 matriz dupla


x 1x1 8 matriz dupla
y 1x1 8 matriz dupla

O total geral é de 3 elementos usando 24 bytes

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

Um arranjo duplo 3x4 96


B 2x3 48 matriz dupla
v array duplo de 3x1 24

O total geral é de 21 elementos usando 168 bytes

Para visualizar o conteúdo da variável B , basta digitar seu nome.


>> B
B =
2 0 -3
-1 1 3

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

Um vetor de linha é uma matriz com uma única linha.


>> w = [3 -2 5 11]
w =
3 -2 5 11

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

Digitando j: i: k define um vetor de linha com incremento i começando em j e terminando em k .


>> 3: 2: 9
ans =
3 5 7 9

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 entrada na linha i , coluna j de uma matriz A é A (i, j) .


>> A = [3 -2 7 8; 4 3 2 1; 10 15 -2 9]
A =
3 -2 7 8
4 3 2 1
10 15 -2 9

>> 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

A linha i de A é A (i, :) e a coluna j de A é A (:, j) .


>> A (3, :)
ans =
10 15 -2 9
>> A (:, 3)
ans =
7
2

www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 4/32
07/05/2019 Tutorial do MATLAB
-2

Em seguida, exibimos a primeira, segunda e quarta colunas.


>> A (:, [1 2 4])
ans =
3 -2 8
4 3 1
10 15 9

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

Produtos de 5 pontos e produtos cruzados


A função dot calcula o produto escalar de dois vetores em R n .
>> v = [7; 23; 15; 2], w = [5; -2; 1; -8]
v =
7
23
15
2
w =
5
-2
1
-8
>> ponto (v, w)
ans =

www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 5/32
07/05/2019 Tutorial do MATLAB
-12

Observe que o produto escalar é simétrico.


>> ponto (w, v)
ans =
-12

Lembre-se de que o comprimento de um vetor v é || v || = Ö { v · v }.


>> vlength = sqrt (ponto (v, v))
vlength =
28,4077

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

Então o ângulo entre v e w é de cerca de 92,5 ° .


3
A função transversal calcula o produto vectorial de dois vectores em R .

>> v = [3; 2; 1], w = [4; 15; 1]


v =
3
2
1
w =
4
15
1
>> x = cruz (v, w)
x =
-13
1
37

Produtos cruzados são anti-simétricos. Ou seja, w × v = - v × w .


>> cruz (w, v)
ans =
13
-1
-37

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

6 operações básicas da matriz


A adição (e subtração) de matrizes das mesmas dimensões é realizada de maneira componente.
>> A = [5 -1 2; 3 4 7]
A =

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 * na multiplicação escalar não é opcional.


>> 2A
??? 2
|
Operador, vírgula ou ponto-e-vírgula ausente.

Adição vetorial e multiplicação escalar são realizadas da mesma maneira.


>> v = [3; 5], w = [- 2; 7]
v =
3
5
w =
-2
7
>> 10 * v-5 * w
ans =
40
15

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

A entrada na linha i , coluna j de A * B é o produto de ponto de linha i de A com a coluna j de B .


>> ponto (A (2, :), B (:, 1))
ans =
31

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

Os produtos matrizes vetoriais são casos especiais de produtos matriciais.


>> A = [13 -11 21; 16 9 10], v = [19; -7; 15]
A =
13 -11 21
16 9 10
v =
19
-7
15
>> A * v
ans =
639
391

Como acima, as entradas de A * v são os produtos de pontos das linhas de A com v .


>> [ponto (A (1, :), v); ponto (A (2, :), v)]
ans =
639
391

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

7 Formulário Echelon de Linha Reduzida


O comando rref é usado para calcular o formulário escalonado de linha reduzida de uma matriz.
>> A = [1 2 3 4 5 6; 1 2 4 8 16 32; 2 4 2 4 2 4; 1 2 1 2 1 2]
A =
1 2 3 4 5 6
1 2 4 8 16 32
2 4 2 4 2 4
1 2 1 2 1 2
>> rref (A)
ans =
1 2 0 0 -4 -4
0 0 1 0 -1 -6
0 0 0 1 3 8

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

>> A = [v1 v2 v3 v4 v5]


A =
1 1 1 2 1
1 -2 2 3 -1
1 1 3 4 -3

A forma de escalão de fila reduzida produz então a (s) solução (ões).


>> rref (A)
ans =
1 0 0 1 3
0 1 0 0 0
0 0 1 1 -2

A variável x é uma variável livre, então vamos escolher x = 0. Então x = 3, x = 0 e x = - 2 e, portanto, v = 3 v - 2 v .


4 4 1 2 3 5 1 3
Vamos checar.
3 * v1-2 * v3
ans =
1
-1
-3

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

Extrair as colunas de articulação de um dá uma base para o espaço de coluna de um .


>> A (:, p)
ans =
1 1
1 2
1 3
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 9/32
07/05/2019 Tutorial do MATLAB
1 4

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.

A classificação de uma matriz é igual à dimensão do espaço da coluna.

As colunas de uma matriz são linearmente independentes se e somente se sua classificação for igual ao número de colunas.

Um n × n matriz quadrada é inversível se e somente se sua posição é igual a n .

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

A matriz A é invertível, mas B não é.

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.

>> classificação ([A v1])


ans =
4
>> classificação ([A v2])
ans =
3

Assim v2 está no espaço de coluna de A , mas v1 não é.

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

Vamos verificar o resultado.


>> A * Ainv
ans =
1 0 0
0 1 0
0 0 1
>> Ainv * A
ans =
1 0 0
0 1 0
0 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)

Aviso: a matriz está perto de singular ou mal dimensionada.


Os resultados podem ser imprecisos. RCOND = 2,055969e-018.
ans =
1,0e + 016 *
-0,4504 0,99007 -0,4504
0,9007 -1,8014 0,9700
-0,4504 0,99007 -0,4504

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

Infelizmente, existem matrizes invertíveis que o MATLAB considera como singular.


>> formato longo
>> C = [1,0000000000000001 1; 1 .99999999999999]
C =
1.00000000000001 1.00000000000000
1.00000000000000 0.99999999999999
>> inv (C)
Aviso: A matriz é singular para precisão de trabalho.
ans =
Inf Inf
Inf Inf
>> classificação (C)
ans =
1
>> det (C)
ans =
0
>> rref (C)
ans =
1.00000000000000 0.99999999999999
0 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

Vamos verificar este resultado.


>> A * x
ans =
10
-23
-13
4

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

A matriz Q na verdade contém uma base ortonormal de autovetores.


>> Q '* Q
ans =
1,0000 0,0000 -0,0000
0,0000 1,0000 - 0,0000
-0,0000 -0,0000 1,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.

>> x = -2: 0,05: 2;

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)

Agora vamos dar um título à nossa figura.


>> título ('Gráfico de f (x) = x ^ 3')

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;

Em seguida, inserimos as coordenadas x e y e plotamos a curva.


>> x = 2 * t. * cos (t). / (t + 1);
>> y = 2 * t * sin (t). / (t + 1);

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

O próximo grid de malha define os pontos na grade.


>> [X, Y] = malha de rede (x, y)
X =
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
Y =
0 0 0 0 0
0,5000 0,5000 0,5000 0,5000 0,5000
1,0000 1,00 € 1,00 € 1,00 1,0000
1,5000 1,5000 1,5000 1,5000 1,5000
2,0000 2,0000 2,00 € 2,00 € 2,0000
2,5000 2,5000 2,5000 2,5000 2,5000
3,0000 3,0000 3,0000 3,00 3,00

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

Finalmente, usamos surf para traçar a superfície.


>> surf (X, Y, Z)
>> title ('Gráfico de f (x, y) = 3x-2y')

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);

Em seguida, usamos exponenciação componente a componente e multiplicação para definir Z .


>> Z = (X. ^ 2). * Y-2 * Y;

Finalmente, plotamos a superfície.


>> surf (X, Y, Z)
>> title ('Gráfico de f (x, y) = x ^ 2y-2y')

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

Parametric surfaces are plotted similarly. Given a parametrization


r(u,v)=(x(u,v),y(u,v),z(u,v))
of some surface, where the domain for (u,v) is some rectangle, we first create a grid in the parameters u and v, and then define the x, y
and z coordinates in terms of this meshgrid using the parametrization. For instance, the sphere of radius r centered at the origin in R3
is parametrized by
r ( f , q ) = ( r sin f cos q r sin f sin q , r cos f ) 0 £ f £ p , 0 £ q £ 2 p .
Vamos usar isso para traçar a esfera unitária. Primeiro nós definimos o meshgrid nos parâmetros f e q .
>> phi = 0: pi / 20: pi;
>> teta = 0: pi / 10: 2 * pi;
>> [Phi, Theta] = meshgrid (phi, theta);

Em seguida, usamos a parametrização acima, com r = 1.


>> X = sin (Phi). * Cos (Theta);
>> Y = sin (Phi). * Sin (Theta);
>> Z = cos (Phi);

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')

As linhas a seguir adicionam rótulos às curvas de nível.


>> [C, h] = contorno (X, Y, Z);
>> clabel (C, h)
>> title ('Curvas de nível de f (x, y) = x ^ 2-y ^ 2 com rótulos.')

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.')

Para mostrar as curvas de nível abaixo do gráfico da função, use surfc .


>> surfc (X, Y, Z)
>> title ('Curvas de nível e gráfico de f (x, y) = x ^ 2-y ^ 2')

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".

>> quiver (X, Y, -Y, X, 0)

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')

16 Variáveis Simbólicas e Expressões


Um dos pacotes mais poderosos do MATLAB é o Symbolic Math Toolkit, que contém várias funções para executar cálculos
simbólicos. Variáveis simbólicas são definidas usando a função sym .
>> x = sym ('x')
x =
x

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)

Em seguida, vamos ao cubo S e expandimos o resultado.


>> S ^ 3
ans =
(x ^ 2-y ^ 2) ^ 3
>> expandir (ans)
ans =
x ^ 6-3 * x ^ 4 * y ^ 2 + 3 * x ^ 2 * y ^ 4-y ^ 6

A função simplificar é bastante útil para lidar com expressões simbólicas.


>> S = (x ^ 3-4 * x) / (x ^ 2 + 2 * x)
S =
(x ^ 3-4 * x) / (x ^ 2 + 2 * x)
>> simplifique (S)
ans =
x-2

Expressões simbólicas também podem ser vetores e matrizes.


>> syms ab
>> A = [cos (a) -sin (a); sin (a) cos (a)]
A =
[cos (a), -sin (a)]
[sin (a), cos (a)]

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 .

>> B = [cos (b) -sin (b); sin (b) cos (b)]


B =
[cos (b), -sin (b)]
[sin (b), cos (b)]
>> C = A * B
C =
[cos (a) * cos (b) -sin (a) * sen (b), -cos (a) * sen (b) -sin (a) * cos (b)]
[sen (a) * cos (b) + cos (a) * sen (b), cos (a) * cos (b) -sin (a) * sin (b)]

Esta deve ser a matriz de rotação através do ângulo a + b (Por quê?).


>> simplifique (C)
ans =
[cos (a) * cos (b) -sin (a) * sen (b), -cos (a) * sen (b) -sin (a) * cos (b)]
[sen (a) * cos (b) + cos (a) * sen (b), cos (a) * cos (b) -sin (a) * sin (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)]

Como esperado, esta é a matriz para a rotação através do ângulo 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

Não é necessário substituir todas as variáveis em uma expressão simbólica.


>> subs (f, x, 3)
ans =
35 * exp (-9-y ^ 2)

Os valores substituídos também podem ser expressões simbólicas.


>> syms uv
>> subs (f, {x, y}, {u + v, uv})
ans =
(4 * (u + v) ^ 2-1) * exp (- (u + v) ^ 2- (uv) ^ 2)

O comando subs fornece, assim, um método para formar funções compostas.

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

Agora podemos avaliar g (2,3) da maneira usual.


g (2,3)
ans =
-12

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'.

17 Resolvendo equações algébricas


O comando solve é usado para encontrar soluções de equações envolvendo expressões simbólicas.

>> solve ('sin (x) + x = 5')


ans =
5.6175550052726989176213921571114

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)]]

Sistemas de equações também podem ser manipulados por resolver .


>> S = solve ('x + y + z = 1', 'x + 2 * yz = 3')
S =
x: [1x1 sym]
y: [1x1 sym]

A variável S contém a solução, que consiste em x e y em termos de z .


>> Sx
ans =
-3 * z-1
>> Sy
ans =
2 * z + 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)]

Os pontos de intersecção são, portanto, ((5 - Ö 7) / 4, (5 + Ö 7) / 4) e ((5 + Ö 7) / 4, (5 - Ö 7) / 4).

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)

O n th derivado de f é diff (F, N) .


>> diff (f, 2)
ans =
-sin (exp (x)) * exp (x) ^ 2 + 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)

Primeiro nós calculamos ¶ f / ¶ x .


>> diff (f, x)
ans =
3 * x ^ 2 * y ^ 4 + y * cos (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).

>> f=[sin(x*y); x^2+y^2; 3*x-2*y]


f =
[ sin(y*x)]
[ x^2+y^2]
[ 3*x-2*y]
>> Jf=jacobian(f)
Jf =
[ cos(y*x)*y, cos(y*x)*x]
[ 2*x, 2*y]
[ 3, -2]

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]

Agora vamos encontrar o Jacobian da T .


>> JT = jacobiano (T)
JT =
[11, -3, 14, 7]
[5, 7, 9, 2]
[8, 12, -6, 3]

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 .

>> syms xy real


>> f = (4 * x ^ 2-1) * exp (-x ^ 2-y ^ 2)
f =
(4 * x ^ 2-1) * exp (-x ^ 2-y ^ 2)
>> gradf = jacobiano (f)
gradf =
[8 * x * exp (-x ^ 2-y ^ 2) -2 * (4 * x ^ 2-1) * x * exp (-x ^ 2-y ^ 2), -2 * (4 * x ^ 2-1) * y * exp (-x ^ 2-y ^ 2)]

Em seguida, usamos solve para encontrar os pontos críticos de f .


>> S = resolver (gradf (1), gradf (2));
>> [Sx Sy]

ans =
[0, 0]
[1/2 * 5 ^ (1/2), 0]
[-1 / 2 * 5 ^ (1/2), 0]

Assim, os pontos críticos são (0,0), ( Ö 5 / 2,0) e ( - Ö 5 / 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 .

>> syms xy real


>> Hf = jacobiana (jacobiana (f));
>> Hf = simples (Hf)
Hf =
[2 * exp (-x ^ 2-y ^ 2) * (2 * x + 1) * (2 * x-1) * (2 * x ^ 2-5), 4 x * y * exp (- x ^ 2-y ^ 2) * (- 5 + 4 * x ^ 2)]
[4 * x * y * exp (-x ^ 2-y ^ 2) * (- 5 + 4 * x ^ 2), 2 * exp (-x ^ 2-y ^ 2) * (- 1 + 2 * y ^ 2) * (2 * x + 1) * (2 * x-1)]

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, resolver o Lagrange equações multiplicadores Ñ f ( x , y ) - m Ñ g ( x , y ) = 0 e restrição equação g ( x , y ) = 0 para a x , y


em.
>> L = jacobiano (f) -mu * jacobiano (g)
L = [y * (1 + y) -2 * mu * x, x * (1 + y) + x * y-2 * mu * y]
>> S = resolver (L (1), L (2), g)
S =
mu: [5x1 sym]
x: [5x1 sym]
y: [5x1 sym]

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]

Em seguida, precisamos avaliar f em cada um desses pontos.


>> valores = simples (subs (f, {x, y}, {Sx, Sy}))
valores =
[1/216 * (22-2 * 13 ^ (1/2)) ^ (1/2) * (1 + 13 ^ (1/2)) * (7 + 13 ^ (1/2)]]
[-1 / 216 * (22-2 * 13 ^ (1/2)) ^ (1/2) * (1 + 13 ^ (1/2)) * (7 + 13 ^ (1/2)]]
[1/216 * (22 + 2 * 13 ^ (1/2)) ^ (1/2) * (- 1 + 13 ^ (1/2)) * (- 7 + 13 ^ (1/2)) ]
[-1 / 216 * (22 + 2 * 13 ^ (1/2)) ^ (1/2) * (- 1 + 13 ^ (1/2)) * (- 7 + 13 ^ (1/2) )]
[0]

Finalmente nós convertemos estes em expressões decimais para identificar o máximo e o mínimo. Isso é feito usando o comando
duplo .

>> duplo (valores)


ans =
0,8696
-0,8696
-0.2213
0,2213
0

Assim, o máximo de f é de cerca de 0,8696 e o mínimo é de cerca de - 0,8696.

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.

% <-- The % is for comments.


% MATLAB ignores everything following it on the same line.
% test.m

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á o que isso parece no MATLAB.


>> sumsquares
s =
1
s =
5
www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 31/32
07/05/2019 Tutorial do MATLAB
s =
14
s =
30
s =
55
s =
91
s =
140
s =
204
s =
285
s =
385

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

Arquivo traduzido de T E X por T T H , versão 2.92.


Em 23 de setembro de 2001, 23:14.

www.ic.unicamp.br/~rdahab/cursos/matlab/Welcome_files//tutoriais/Levandosky-tutorial.html#1 32/32

Potrebbero piacerti anche