Você está na página 1de 53

..

Introduca o ao MATLAB

Marcelo A. Trindade

Departamento de Engenharia Mecanica, Laboratorio


de Dinamica,
Escola de Engenharia de Sao Carlos, Universidade de Sao Paulo (EESC-USP),
Av. Trabalhador Sao-Carlense, 400, 13566-590, Sao Carlos, Brasil
trindade@mec.puc-rio.br

Rubens Sampaio

Departamento de Engenharia Mecanica, Laboratorio


de Dinamica e Vibracoes,

Pontifcia Universidade Catolica


do Rio de Janeiro (PUC-Rio),
rua Marques de Sao Vicente, 225, 22453-900 Rio de Janeiro, Brasil
rsampaio@mec.puc-rio.br

3 de Setembro de 2010

Conteudo

Introduca o

Comandos Basicos do MATLAB


2.1 Entrando no MATLAB . . . . . .
2.2 Primeiros passos . . . . . . . . .
basicas com matrizes
2.3 Operacoes
2.4 Gravaca o e recuperaca o de dados

2.5 Zeros de polinomios


. . . . . . .
2.6 Criaca o e edica o de graficos . . .
2.7 Programando em MATLAB . . .
2.7.1 Arquivos .m . . . . . . . .
2.7.2 O comando global . . . .
2.7.3 O comando if . . . . . . .
2.7.4 O comando for . . . . . .

4
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

Aplicacoes

3.1 Programas interativos . . . . . . . . . . . . . . . .

3.2 Zeros de funcoes


. . . . . . . . . . . . . . . . . . .
3.3 Calculando Integrais . . . . . . . . . . . . . . . . .
3.3.1 Regra trapezoidal . . . . . . . . . . . . . . .
3.3.2 Regra de Simpson . . . . . . . . . . . . . .
diferenciais . . . . . . . . . . . . . . . . .
3.4 Equacoes
3.4.1 Sistema massa-mola-amortecedor . . . . .
3.4.2 Pendulo simples . . . . . . . . . . . . . . .
3.4.3 Sistema com mais de um grau de liberdade
Outros comandos
4.1 Formato de sada .
4.2 Comando diary . .
4.3 Comando cputime
4.4 O comando fprintf
4.4.1 Exemplo . .

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.

6
6
6
11
18
19
20
25
25
28
29
31

.
.
.
.
.
.
.
.
.

33
33
34
34
35
35
37
37
39
40

.
.
.
.
.

45
45
45
48
49
49


CONTEUDO
A Um programa para sistemas de equacoes
lineares

A.1 Sistema com soluca o unica


. . . . . . . . . . . . . . . . . . . . . . . .

A.2 Sistema com infinitas solucoes


. . . . . . . . . . . . . . . . . . . . .
A.3 Sistema sem soluca o . . . . . . . . . . . . . . . . . . . . . . . . . . .

3
51
52
53
53

Captulo 1
Introduca o
O MATLABR pode ser usado como uma linguagem de programaca o ou como
uma ferramenta de calculo interativa. Em ambos os casos, o ambiente MATLAB
permite realizaca o de calculos, visualizaca o de resultados e desenvolvimento de

algoritmos usando uma sintaxe muito proxima


da notaca o matematica standard.
O nome MATLAB vem de MATrix LABoratory e representa bem o seu modo
de funcionamento. Todas as variaveis sao definidas de forma matricial, o que faz
com que este ambiente seja ideal para resolver problemas de calculo envolvendo
matrizes e vetores. Ele e desenvolvido pela empresa The MathWorks, Inc. Mais
podem ser obtidas no endereco http://www.mathworks.com.
informacoes
Um arquivo de programa MATLAB recebe a extensao .m e, por isso, tambem
e chamado de m-file ou arquivo .m. Ele pode ser criado e/ou modificado no edi
tor proprio
do MATLAB, MATLAB Editor/Debugger, que possui caractersticas
que auxiliam bastante a edica o de programas como auto-colorizaca o de palavras
de acordo com a sintaxe e interaca o com o ambiente de calculo do MATLAB.
sao escritas em
Uma das grandes virtudes do MATLAB e que todas suas funcoes
m-files, sendo que a maioria delas podem ser editadas/modificadas. Este fato
especficas a determinapossibilitou a criaca o de diversos conjuntos de funcoes
das a reas, como controle, analise de sinais, financas, entre outras. Estes conjuntos
ou de m-files, sao chamados de toolbox. Toolboxes direcionados para
de funcoes,

diversas a reas sao distribudos pela propria


MathWorks e inumeros
outros sao
desenvolvidos em todo o mundo, com e sem reconhecimento da MathWorks, e
podem geralmente ser encontrados na internet.
Enquanto que o programa principal do MATLAB depende da plataforma (Unix,
e programas, sao
Windows, Macintosh) os arquivos .m, que constituem as funcoes
independentes da plataforma e podem portanto ser utilizados em todas elas. Esta
e outra razao para o estabelecimento do MATLAB como ferramenta de calculo
matricial de predileca o entre os profissionais do meio academico e industrial. De
fato, nao e incomum encontrar um toolbox na internet bem adaptado ao problema especfico que se quer resolver. E mesmo que ele tenha sido desenvolvido
em ambiente Unix, pode ser utilizado em ambiente Windows.
A linguagem de programaca o do MATLAB e muito intuitiva. Por esta razao,
o objetivo deste trabalho e iniciar a aprendizagem da utilizaca o do ambiente MA4

CAPITULO
1. INTRODUC
AO

TLAB, dos comandos basicos e de construca o de programa. A partir da, esperamos que o usuario seja capaz de desenvolver e direcionar os conhecimentos
adquiridos para sua a rea especfica.
Marcelo A. Trindade
Rubens Sampaio

Captulo 2
Comandos Basicos do MATLAB
2.1

Entrando no MATLAB

O MATLAB pode ser executado pressionando o cone correspondente, criado na


instalaca o do programa, ou atraves da barra de tarefas. Quando executado, a janela principal do MATLAB, chamada MATLAB Command Window, e aberta. O
smbolo >> na tela indica que O MATLAB esta pronto para receber um comando.
Assim, esta janela funciona como um ambiente interativo no qual comandos sao
fornecidos pelo usuario e executados instantaneamente pelo MATLAB. Uma linha de comandos e finalizada pressionando a tecla [Enter]. Os comandos fornecidos sao memorizados e podem ser listados usando as setas para cima e para
baixo do teclado.

2.2

Primeiros passos

Uma variavel pode ser definida dando-se valores a ela. O tipo da variavel e automaticamente definido pelo MATLAB em funca o do valor dado a ela. A sintaxe
e a seguinte
>> t=1
t =
1
Neste caso, t e definido como um escalar pelo usuario. No entanto, o MATLAB
interpreta a variavel t como uma matriz de uma coluna e uma linha. Assim,
vetores e matrizes tambem sao definidos da mesma maneira.
>> T=[0 1 2 3 4 5 6 7 8 9 10]
T =
0

10

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

Esta ultima
definica o tambem pode ser realizada de uma maneira mais simples,
fornecendo o valor inicial, o incremento e o valor final,
>> T=0:1:10
T =
0

10

As variaveis t e T foram armazenadas na memoria


do MATLAB. Isto pode
ser verificado atraves da funca o whos que mostra o nome, o tamanho e classe de

todas as variaveis presentes na memoria.


>> whos
Name

Size

Bytes

T
t

1x11
1x1

88
8

Class
double array
double array

Grand total is 12 elements using 88 bytes

Cabe ressaltar que o MATLAB faz diferenca entre variaveis maiusculas


e minusculas.
Assim, t e T sao variaveis distintas para o MATLAB. Pode-se observar que a
dimensao das duas variaveis e dada em linhas x colunas. Portanto, a variavel
escalar t e definida como uma matriz de uma linha e uma coluna. Ja a variavel T
tem uma linha e dez colunas. O elemento (i x j) da matriz T, T(i,j), pode ser
recuperado atraves do seguinte comando
>> T(1,5)
ans =
4

A variavel ans armazena o valor do ultimo


calculo realizado quando este nao
e associado a uma variavel. Neste caso, como a variavel T possui apenas uma
linha, o comando T(5) tambem forneceria o mesmo resultado. E possvel tambem
recuperar varios elementos de T ao mesmo tempo usando vetores dos ndices
correspondentes,
>> T(1,[1 3:6 10])
ans =
0

Note que o vetor de ndices e definido da mesma maneira que uma variavel.
realizadas pelo MATLAB consideram variaveis matriciTodas as operacoes
ais, assim sendo a sintaxe do comando independe da dimensao da variavel. Por
exemplo, podemos calcular o seno de t e T usando a mesma sintaxe,

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

>> x = sin(t)
x =
0.8415
>> X = sin(T)
X =
Columns 1 through 7
0

0.8415

0.9093

0.1411

-0.7568

-0.9589

-0.2794

Columns 8 through 11
0.6570

0.9894

0.4121

-0.5440

Desta maneira, as novas variaveis x e X, relativas a t e T, sao matrizes com dimensao de t e T respectivamente, cujos elementos sao os senos dos elementos t e
T.
podem ser realizadas da mesma maneira
Outras operacoes
>> a = 2*T
a =
0

10

12

14

16

18

20

complexos da mesma forma que com numeros

O MATLAB opera com numeros


reais. A variavel i representa 1 desde que nao tenha sido definida anteriormente pelo usuario.
>> a=1+i, b=5+2i,
a =
1.0000 + 1.0000i
b =
5.0000 + 2.0000i
soma, produto e divisao sao realizadas da seguinte maneira
As operacoes

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

>> e=a+b, g=a*b, f=a/b,


e =
6.0000 + 3.0000i
g =
3.0000 + 7.0000i
f =
0.2414 + 0.1034i

O modulo
e o argumento de um numero
complexo podem ser encontrados
com os comandos abs e angle. Estes comandos sao de especial interesse para o

estudo de vibracoes.
>> h=abs(b)
h =
5.3852
>> d=angle(b)
d =
0.3805
Note que o argumento e dado em radianos. A passagem para graus e feita da
seguinte maneira
>> d/pi*180
ans =
21.8014

As variaveis armazenadas na memoria


do MATLAB podem ser removidas

da memoria
atraves do comando clear. Este comando e bastante interessante

quando se deseja liberar uma quantidade de memoria


do MATLAB e/ou para

manter na memoria
apenas as variaveis de maior interesse para facilitar o controle das mesmas. Quanto usado sem parametros, remove todas as variaveis da

memoria.
>> clear
>>

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

10

>> whos
>>
Este comando pode tambem ser usado para remover apenas algumas variaveis
selecionadas. Primeiro, definimos algumas variaveis
>> a=1; b=[2 3]; A=b*b;
>>
Atraves do comando whos, pode-se ver que estas variaveis foram armazenadas

na memoria
do MATLAB
>> whos
Name

Size

A
a
b

2x2
1x1
1x2

Bytes
32
8
16

Class
double array
double array
double array

Grand total is 7 elements using 56 bytes

Vamos agora remover a variavel a da memoria


usando o comando clear e listar

novamente as variaveis presentes na memoria


>> clear a, whos,
Name

Size

A
b

2x2
1x2

Bytes
32
16

Class
double array
double array

Grand total is 6 elements using 48 bytes


Os comandos basicos gerais do MATLAB estao resumidos na tabela abaixo a
seguir.
Nome
cd
clc
clear
delete
demo
dir
help
helpwin
lookfor
quit
whos

Funca o

Muda diretorio
corrente
Limpa a janela de comandos

Apaga todas as variaveis da memoria


do MATLAB
Apaga arquivos
Executa programas de demonstraca o das capacidades do MATLAB

Lista arquivos no diretorio


corrente

Lista os topicos
de ajuda disponveis

Abre janela a navegaca o nos topicos


de ajuda
Procura arquivos .m por palavra chave
Encerra a sessao do MATLAB
sobre as variaveis armazenadas na memoria

Mostra informacoes

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

2.3

11

Operacoes
basicas com matrizes

As matrizes sao tratadas da mesma maneira que escalares e vetores no MATLAB,

ja que estes ultimos


sao tratados como casos particulares de matrizes. Por ser
o elemento fundamental do MATLAB, nesta seca o trataremos com mais detalhe
com
de definica o, inserca o e extraca o de linhas e colunas, rearranjo e operacoes
matrizes.
A definica o de uma matriz pode ser feita da seguinte maneira
>> A=[1 2 3; 4 5 6]
A =
1
4

2
5

3
6

Elementos podem ser extrados de uma matriz usando o mesmo procedimento utilizado anteriormente para vetores, lembrando que a sintaxe do MATLAB e A(i,j) com i e j denotando linha e coluna respectivamente.
>> A(2,3)
ans =
6
Linhas e colunas inteiras podem tambem ser extradas de uma matriz atraves da
utilizaca o o smbolo de dois pontos : para denotar todos os elementos.
>> A(1,:), A(:,2)
ans =
1

ans =
2
5
Pode-se tambem remover linhas e colunas de uma matriz usando a matriz vazia
[]
>> A(:,2)=[ ]
A =
1
4

3
6

Neste caso, a segunda coluna da matriz A foi removida e o resultado armazenado

na propria
matriz A. Poderamos tambem criar uma nova matriz B eliminando a

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

12

segunda coluna de A, com o comando B=A(:,[1 3])1 . Desta forma, a matriz B e


formada apenas pelas colunas 1 e 3 da matriz A, ou seja, a coluna 2 e eliminada.
Da mesma forma, pode-se inserir novas linhas e colunas em uma matriz. Isto
pode ser feito simplesmente associando valores aos novos elementos da matriz.
>> A(3,:)=[7 8 9]
A =
1
4
7

2
5
8

3
6
9

Este mesmo procedimento pode ser realizado para modificar valores de elementos especficos de uma matriz
>> A(3,2)=10
A =
1
4
7

2
5
10

3
6
9

sePodemos tambem concatenar matrizes no MATLAB desde que as dimensoes


jam apropriadas,
>> [A A(:,1); A(1:2,:) A(2:3,2)]
ans =
1
4
7
1
4

2
5
10
2
5

3
6
9
3
6

1
4
7
5
10

basicas de matrizes, como tranposica o, determinante e inversao,


Operacoes
sao bastante simples no MATLAB. O operador de transposica o e representado
por
>> A
ans =
1
2
3

4
5
6

7
10
9

Lembrando que o operador fornece na verdade o complexo conjugado transposto. No caso de variaveis complexas, o operador . e uma opca o para transposica o
1 Lembre-se

de redefinir A, pois pelo ultimo


comando a segunda coluna ja foi eliminada.

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

13

simples.
Os comandos para calcular o determinante e a inversa de uma matriz sao os
seguintes
>> det(A), inv(A)
ans =
12
ans =
-1.2500
0.5000
0.4167

1.0000
-1.0000
0.3333

-0.2500
0.5000
-0.2500

Note que estes comandos so funcionam para matrizes quadradas evidentemente.


de uma variavel armazenada na memoria

Para se conhecer as dimensoes


do MATLAB, pode-se usar o comando size
>> [l,c]=size(A)
l =
3
c =
3

As duas variaveis l e c fornecidas pelo MATLAB representam o numero


de linhas
com matrizes sao listadas digitando-se
e colunas da matriz A. Outras operacoes
help matfun.
do MATLAB se aplicam individualmente a` cada coluna da
Algumas funcoes
matriz fornecida produzindo um vetor linha cujos elementos correspondem ao
podem ser aplicadas as linhas de uma
resultado de cada coluna. Estas funcoes
matriz, fornecendo-se a transposta da matriz como entrada. Algumas destas
sao apresentadas na tabela abaixo.
funcoes
max
maior componente de um vetor
mean media dos componentes de um vetor
min
menor componente de um vetor
prod produto dos componentes de um vetor
sort
ordena o vetor em ordem crescente
std
desvio padrao dos componentes de um vetor
sum
soma dos componentes de um vetor
Cabe observar que para um vetor a complexo, a funca o sort ordena seus com
ponentes por ordem crescente de modulo.
Os valores maximos, mnimos e medios
globais de uma matriz podem ser obtidos usando a sintaxe max(max(A)).

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

14

O MATLAB possui tambem algumas matrizes especiais muito uteis,


cujos ele
mentos de entrada sao numero
de linhas e colunas. Quando apenas um elemento
e fornecido, a matriz produzida sera quadrada com a dimensao requerida. Algu sao apresentadas na tabela abaixo, outras podem ser enconmas destas funcoes
tradas digitando help elmat.
eye
ones
rand
zeros

matriz identidade
matriz com todos elementos iguais a` 1

matriz com elementos aleatorios


distribudos entre 0 e 1
matriz nula

de adica o/subtraca o e multiplicaca o de matrizes podem ser reAs operacoes


alizadas com os mesmos operadores utilizados para escalares e vetores. Os principais operadores aritmeticos do MATLAB sao listados digitando-se help ops.
Sejam as matrizes
>> A=[1 2 3; 4 5 6], B=[1 3 ; 4 6; 3 4],
A =
1
4

2
5

1
4
3

3
6
4

3
6

B =

Uma nova matriz C pode ser definida como resultado da multiplicaca o das matrizes A e B da seguinte maneira
>> C=A*B
C =
18
42

27
66

E claro que a multiplicaca o de matrizes so e definida quando o numero


de colunas

da primeira matriz e igual ao numero


de linhas da segunda. Assim, se tentarmos
efetuar a operaca o A*A, o MATLAB produzira uma mensagem de erro. Pode-se
tambem multiplicar matrizes elemento por elemento atraves da operaca o A.*A
>> A.*A
ans =
1
16

4
25

9
36

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

15

das matrizes devem ser as mesmas. As operacoes


eleJa neste caso, as dimensoes

mento por elemento podem ser muito uteis.


Assim, o ultimo
calculo tambem
pode ser realizado usando o comando A.^2. Note a diferenca entre as duas
de multiplicaca o
operacoes
>> D=C*C, E=C.*C
D =
1458
3528

2268
5490

324
1764

729
4356

E =

Os autovalores e autovetores de uma matriz podem ser calculados atraves do


comando eig. Este comando produz uma matriz diagonal D de autovalores e uma
matriz V cujas colunas sao os autovetores correspondentes, tal que C*V=V*D.
>> [V,D]=eig(C)
V =
-0.8412
0.5406

-0.3818
-0.9242

D =
0.6479
0

0
83.3521

O problema de autovalores generalizados C*V=E*V*D tambem pode ser resolvido com a mesma funca o fornecendo adicionalmente a matriz E.
>> [V,D]=eig(C,E)
V =
0.9341
-0.3570

-0.8258
0.5640

D =
0.1693
0

0
0.0025

Pode-se tambem utilizar o comando svd para produzir uma decomposica o em


valores singulares

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

16

>> [U,S,V] = svd(C)


U =
0.3831
0.9237

-0.9237
0.3831

84.6912
0

0
0.6376

S =

V =
0.5395
0.8420

-0.8420
0.5395

S e uma matriz diagonal com a mesma dimensao de C e elementos nao negativos


em ordem decrescente na diagonal, e U e V sao matrizes unitarias, tal que C =
U*S*V.
O comando usado para produzir a decomposica o LU e
>> [L,U]=lu(C)
L =
0.4286
1.0000

1.0000
0

42.0000
0

66.0000
-1.2857

U =

U e uma matriz triangular superior e L e uma matriz quase triangular inferior


isto e , seria uma matriz triangular inferior se A fosse substituda por PA onde P e
e nao
uma matriz de permutaca o. A razao disto tem a ver com a escolha do pivo,
sera discutido aqui. Outra forma deste comando e

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

17

>> [L,U,P]=lu(C)
L =
1.0000
0.4286

0
1.0000

42.0000
0

66.0000
-1.2857

U =

P =
0
1

1
0

U e uma matriz triangular superior, L, uma matriz triangular inferior e P uma


matriz de permutaca o, tal que PA=LU. Note a diferenca entre L no primeiro e no
segundo caso.
Outra operaca o de simples realizaca o no MATLAB e de muita utilidade na
pratica e a resoluca o de sistemas lineares do tipo A*x=b. Alem da maneira natural,
porem definitivamente nao recomendada, de resolver o problema x=inv(A)*b, o
MATLAB possui uma operaca o de divisao a` esquerda, representada pelo operador \ . Assim, a soluca o x=A\b e calculada fazendo eliminaca o de Gauss de A e
retrosubstituica o. Isto e feito fatorando A na forma LU. O sistema fica LUx=b e o
sistema e resolvido calculando y do sistema Ly=Pb e entao x do sistema Ux=y. Se a
matriz A nao for quadrada, o MATLAB utiliza a ortogonalizaca o de Householder
com pivotamento de colunas. O valor de x e calculado pelo metodo dos mnimos
quadrados.
>> A=[1 2; 3 4]; b=[5; 6];
x=A\b
x =
-4.0000
4.5000
Esta e a soluca o do sistema linear
x + 2y = 5
3x + 4y = 6

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

2.4

18

Gravaca o e recuperaca o de dados

O MATLAB permite ao usuario de gravar dados no disco e recuperar dados do


disco. Estes dados sao geralmente variaveis resultantes de um calculo realizado
no MATLAB que se pretende arquivar por diversos motivos. Os dados podem ser

gravados num arquivo em formato texto (ASCII) ou em formato binario proprio


ao MATLAB usando o comando save. O formato padrao e o binario, que origina um arquivo com extensao .mat. A sintaxe do comando save e mostrada no
exemplo a seguir
>> A=[1 2 3; -4 5 -6; 7 9 11]; b=[1; 3; 5]; x=A\b;
>> save dados A b x
>> dir dados*
dados.mat
Vemos entao que basta fornecer o nome do arquivo, sem extensao, no qual queremos gravar as variaveis. O MATLAB executa o comando criando um arquivo

chamado dados.mat que contem as variaveis A, b e x e que e gravado no diretorio

corrente. Verifique o diretorio


em que esta trabalhando com cd antes de gravar
o arquivo para poder encontra-lo depois! E importante ressaltar que o arquivo
criado e um arquivo binario, isto e , nao e possvel edita-lo num editor de texto.
Como o arquivo foi gravado em disco, podemos fechar o MATLAB que os dados
nao serao perdidos. Para recuperar os dados, utilizamos o comando load, com a
seguinte sintaxe
>> clear
>> load dados
>> whos
Name
A
b
x

Size
3x3
3x1
3x1

Bytes
72
24
24

Class
double array
double array
double array

Grand total is 15 elements using 120 bytes


Se nao especificassemos as variaveis a gravar, todas as variaveis armazenadas na

memoria
do MATLAB seriam gravadas no arquivo dados.mat.
Algumas vezes precisamos exportar os dados do MATLAB para um outro
aplicativo. Nestes casos, geralmente precisamos gravar os dados em formato ASCII. Isto pode ser feito usando o parametro -ascii no comando save. No entanto,
precisa-se tomar alguns cuidados ao gravar varias variaveis no mesmo arquivo.
Facamos, por exemplo,

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

19

>> save dados.txt A b x -ascii


>> type dados.txt
1.0000000e+000
-4.0000000e+000
7.0000000e+000
1.0000000e+000
3.0000000e+000
5.0000000e+000
1.1000000e-001
5.8000000e-001
-9.0000000e-002

2.0000000e+000 3.0000000e+000
5.0000000e+000 -6.0000000e+000
9.0000000e+000 1.1000000e+001

Podemos observar que os elementos das variaveis A, b e x foram gravados linhaa-linha no arquivo texto dados.txt. Este formato so deve realmente ser utilizado
dois problemas para
para exportar dados para outros aplicativos, pois ele impoe

recuperaca o dos dados no proprio


MATLAB. O primeiro deles e que se perdeu a
informaca o de a que variaveis os elementos pertencem. Assim, se tentarmos recuperar os dados atraves do comando load dados.txt, este so podera criar uma

variavel de nome dados. O segundo problema e que ao tentar criar uma unica
variavel com os elementos do arquivo dados.txt, o MATLAB sera incapaz pois as

linhas tem diferentes numeros


de colunas. A opca o seria gravar um arquivo por
variavel,
>> save A.txt A -ascii
>> save b.txt b -ascii
>> save x.txt x -ascii
>> clear
>> load A.txt, load b.txt, load x.txt,
Evidentemente, este formato so faria sentido no caso de importaca o de dados de
outro aplicativo para o MATLAB ou exportaca o de dados do MATLAB para outro
aplicativo.

2.5

Zeros de polinomios

Algumas vezes precisamos calcular as razes de um polinomio.


Isto pode ser
feito no MATLAB atraves do comando roots. Como exemplo, vamos calcular os

zeros do seguinte polinomio


p( x ) = 5/8x5 5x4 3x3 + 2x 10. Um polinomio
e definido no MATLAB atraves de um vetor contendo os seus coeficientes. Neste
caso, temos

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

20

>> p=[5/8 -5 -3 0 2 -10];


>> x=roots(p)
x =
8.5587
-0.9890
-0.9890
0.7097
0.7097

+
+
-

0.8316i
0.8316i
0.7848i
0.7848i

Como podemos notar, este comando fornece todas as razes do polinomio


p ( x ).
O processo inverso tambem pode ser realizado. Assim, para achar os coeficientes

do polinomio
que tem as razes x usamos o comando poly,
>> p=poly(x)
p =
1.0000

-8.0000

-4.8000

-0.0000

3.2000

-16.0000

Notamos que nao obtemos os mesmos coeficientes iniciais. No entanto, podemos

obte-los fazendo >> 5/8*p mostrando que o polinomio


fornecido p( x ) = x5
4
3

8x 4.8x + 3.2x 16 e tal que p( x ) = 5/8p( x ) . Isto e verdadeiro ja que p( x ) =


0 implica p( x ) = 0 e a razao do = 8/5 escolhido pelo MATLAB vem do fato

que o comando poly encontra o polinomio


cujo primeiro coeficiente e unitario.

2.6

Criaca o e edica o de graficos

permitindo tambem
O MATLAB, alem de realizar calculos, possui diversas funcoes
a partir de dados fornecidos. O procedicriar graficos em duas e tres dimensoes
mento usual para a construca o de um grafico no MATLAB e apresentado a seguir
1. Preparaca o dos dados
>> x = 0:0.3:30;
>> y1 = exp(-.01*x).*sin(x); y2 = exp(-.05*x).*sin(.7*x); y3 =
exp(-.1*x).*sin(.5*x);
2. Escolha de uma janela para tracar o grafico e utilizaca o de uma das funcoes

graficas do MATLAB
>> figure(1)
>> h = plot(x,y1,x,y2,x,y3);
3. Seleca o de tipos de linha e marcadores para as diferentes curvas
>> set(h,LineWidth,2,LineStyle,--;:;-.)
>> set(h,Color,r;g;b)

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

21

4. Definica o de limites dos eixos e inclusao de grid


>> axis([0 20 -1 1]);
>> grid on
5. Adica o de anotacoes
no grafico como identificaca o dos eixos, ttulo, legendas
e texto
>> xlabel(Tempo); ylabel(Amplitude);
>> legend(h,Primeiro,Segundo,Terceiro); title(Resposta no
Tempo);
>> text(8.35,0.85,\leftarrow e^{(-0.05x)}sen(0.7x),...
HorizontalAlignment,left)
6. Exportaca o do grafico para algum aplicativo (de processamento de texto, por
exemplo)
>> print -depsc -r600 myplot
Resposta no Tempo
1
Primeiro
Segundo
Terceiro

(0.05x)

@e

0.8

sen(0.7x)

0.6

0.4

Amplitude

0.2

0.2

0.4

0.6

0.8

10
Tempo

12

14

16

18

20

Figura 2.1: Exemplo de grafico com diferentes tipos de linhas.


Convem ressaltar que a seleca o de tipos e cores das linhas pode ser realizada
diretamente no comando grafico plot. Assim, o mesmo resultado poderia ser
obtido fazendo

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

22

>> h = plot(x,y1,r--,x,y2,g:,x,y3,b-.);
As espessuras das linhas no entanto so podem ser definidas a posteriori neste
caso com o comando set, como mostrado anteriormente.
Podemos tambem adicionar uma outra curva no grafico ja existente usando

o comando hold. Quando ligado (hold on), todos os proximos


graficos serao
colocados sobre aqueles ja existentes ate que o hold seja desligado (hold off) ou
que a janela seja fechada.
>> hold on
>> plot(x,-y3,m>--);
>> hold off
A legenda pode ser atualizada re-executando o comando legend, agora com mais
um parametro (legend(Primeiro,Segundo,Terceiro,Quarto)).
O comando axis permite, entre outras coisas, mostrar apenas uma certa regiao
do grafico. Para isso, basta fornecer os intervalos em x e y (e em z para graficos
3D) que se deseja mostrar.
>> axis([0 2 -1 1])
Neste caso, apenas os limites do eixo x foram modificados. Note que o restante
do grafico nao e perdido, so nao esta sendo mostrado. A visualizaca o original
pode ser recuperada com o comando axis auto. Em alguns casos, tambem e
interessante modificar o valores usados na marcaca o dos eixos. Isto pode ser
feito com o comando set.
>> set(gca,XTick,[0:0.25:2],YTick,[-1:0.25:1])
O comando set pode ser utilizado para ajustar quaisquer propriedades de graficos
no MATLAB. Aqui, usamos gca para denotar o eixo corrente. Digitando-se set(gca),
obtemos todas as propriedades do eixo que podem ser modificadas e seus valores
possveis.

Existem diversos comandos para tracar graficos tambem em tres dimensoes


no MATLAB. Seguem alguns exemplos de como tracar graficos 3D. O primeiro
exemplo consiste em tracar uma curva em 3D com o comando plot3.
>> t=0:0.1:10; x=exp(-t/5).*cos(3*t); y=exp(-t/5).*sin(3*t);
>> plot3(x,y,t,k-,x,y,t,r*),
>> hold on, plot3(x,y,zeros(size(t)),m--,ones(size(x)),y,t,r--,
x,ones(size(y)),t,b--), hold off
>> grid
>> title(Gr
afico 3D com plot3 -- Proje
co
~es)
>> xlabel(X (mm)), ylabel(Y (mm)), zlabel(T (seg)),
>> print -depsc plot3
Na verdade, neste exemplo, cinco curvas sao tracadas pelo MATLAB no mesmo
grafico. A primeira chamada do comando plot3 imprime no grafico os pontos

(x,y,t) duas vezes, primeiro conectados por uma linha solida


de cor preta e de
pois com estrelas de cor vermelha. A segunda chamada de plot3 traca projecoes

da curva (x,y,t) no mesmo grafico 3D, gracas ao comando hold on. As projecoes
foram feitas, tracando os seguintes conjuntos pontos: (x,y,0), (1,y,t) e (x,1,t). Para

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

23

isso foram utilizadas as matrizes especiais zeros e ones que dao origem neste
caso a vetores compostos de elementos nulos e unitarios respectivamente, do
mesmo tamanho dos vetores x, y e t.
Grfico 3D com plot3 Projees

10

T (seg)

0
1
1

0.5
0.5

0
0
0.5
Y (mm)

0.5
1

X (mm)

Figura 2.2: Grafico 3D com projecoes.


E interessante realizar o mesmo grafico com o comando comet3. Este comando

traca a trajetoria
animada tipo cometa dos pontos (x,y,t) e pode ser muito util
para facilitar a visualizaca o de curva complexas no espaco tridimensional.
>> comet3(x,y,t)

Seguem agora dois exemplos de graficos de superfcie 3D usando variacoes


do comando mesh.
>> figure(Position,[232 20 330 250],PaperPositionMode,auto)
>> h=surfl(x,x,y2*y3);
>> shading interp
>> colormap(copper)
>> xlabel(Eixo {\bf x}), ylabel(Eixo {\bf y}), zlabel(Eixo
{\bf z})
>> print -depsc surfl

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

24

Eixo z

1
20

20

10
Eixo y

10
0

Eixo x

Figura 2.3: Exemplo de grafico de superfcie 3D.


Neste exemplo, posica o e tamanho da figura sao definidos na propriedade
Position. A propriedade seguinte PaperPositionMode definida como auto
permite que o tamanho da figura seja mantido na impressao. Como pode ser
observado, o comando surfl produz uma superfcie iluminada a partir de uma

direca o pre-determinada, sendo que a aparencia solida


da superfcie e dada pela
interpolaca o do mapa de cores (comando shading). O mapa de cores a ser utili de mapas de cores
zado e selecionado atraves do comando colormap. As opcoes
pre-definidos no MATLAB e listada com help graph3d.
No exemplo a seguir, utilizamos o comando subplot para tracar dois graficos
na mesma figura. Fazendo subplot(n,m,j) ou subplot(nmj), divide-se a figura
corrente em nm eixos dispostos em n linhas e m colunas, sendo que o eixo j

sera utilizado para tracar o proximo


grafico (a contagem e feita da esquerda para
direita de linha em linha).
>> figure(Position,[232 20 340 400],PaperPositionMode,auto)
>> subplot(211), meshc(x,x,y2*y3),
>> xlabel(Eixo {\bf x}), ylabel(Eixo {\bf y}), zlabel(Eixo
{\bf z})
>> subplot(212), waterfall(x,x,y2*y3), view(-65,45)
>> xlabel(\Theta = \Sigma i \alpha i \Gamma i), ylabel(x = 2 \pi
\xi), zlabel(\Psi 2^T \Psi 3)
>> colormap(cool)
Os comandos graficos 3D utilizados neste exemplo sao meshc e waterfall. O
primeiro e uma combinaca o dos comandos mesh, que traca uma malha colorida
de acordo com o colormap, e contour, que traca as curvas de contorno. O comando waterfall tambem e uma variaca o do comando mesh mas sem tracar as
linhas correspondentes a` s colunas (ou eixo y). Pode-se observar tambem que o
segundo grafico tem uma rotaca o diferente do primeiro. A posica o do observa-

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

25

Eixo z

1
0
1
20
10
Eixo y

20
10
0

Eixo x

^2 ^3

1
0

1
20

20
15

10
10
5
x=2/j

O = Yi _i Ki

Figura 2.4: Exemplo de grafico de superfcie 3D.


dor de graficos em 3D pode ser modificado com o comando view, com o qual
define-se o a ngulo de observaca o e a altura do observador. Enfim, pode-se colocar textos com formataca o mais complexa nos ttulos, como aqueles apresentados
no segundo grafico, utilizando comandos TEX.
Os principais comandos para tracar, editar e modificar graficos no MATLAB
sao apresentados nas tabelas seguintes.

2.7
2.7.1

Programando em MATLAB
Arquivos .m

No primeiro captulo, os comandos basicos do MATLAB foram apresentados.


Neste caso, o ambiente MATLAB foi utilizado como uma ferramenta de calculo
interativa, no sentido que varias linhas de comandos foram digitadas e executadas, uma por vez, com o objetivo de gerar um ou mais resultados numericos
ou graficos. No entanto, e facil imaginar que a medida que a serie de comandos aumenta em complexidade, e/ou em quantidade, este procedimento se torna
cansativo e pouco pratico. Felizmente, o MATLAB tambem permite que se cons
trua e execute programas na linguagem MATLAB. Neste caso, a sequencia
de
comandos digitadas e executadas, uma por vez, anteriormente pode ser concentrada em um arquivo programa .m que ao ser executado no MATLAB, executa
cada linha do programa, composta pelas linhas de comandos usadas anterior-

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

26

Tabela 2.1: Principais comandos graficos do MATLAB.


Comandos para tracar graficos
plot
Grafico 2D em escala linear para ambos eixos
loglog
Grafico 2D em escala logartmica para ambos eixos
semilogx Grafico 2D em escala logartmica para o eixo x e linear para y
semilogy Grafico 2D em escala linear para o eixo x e logartmica para y
plotyy
Grafico 2D com eixos y diferentes a` direita e a` esquerda

comet
Traca trajetoria
animada 2D dos pontos (x,y)
bar
Grafico de barras
hist
Histograma
polar
Grafico usando coordenadas polares com a ngulo em radianos
stairs
Grafico em forma escada

stem
Grafico 2D com sequencia
discreta de y
plot3
Traca curvas em 3D

comet3
Traca trajetoria
animada 3D dos pontos (x,y,z)
mesh
Traca uma malha colorida em 3D, meshc (+ contorno)
surf
Traca uma superfcie colorida em 3D, surfc (+ contorno)
Comandos para editar e modificar graficos
axis
Controla a escala e a visualizaca o dos eixos
colormap Especifica o mapa de cores utilizado
grid
Adiciona ou remove linhas de grelha do grafico corrente
hold
Mantem o grafico corrente (futuros graficos sao sobrepostos a este)
legend
Adiciona e define uma legenda no grafico corrente
subplot
Divide uma figura em varias sub-figuras e seleciona uma delas
text
Coloca um texto no grafico corrente
title
Ttulo do grafico corrente
xlabel
Ttulo do eixo x corrente
ylabel
Ttulo do eixo y corrente
mente, tambem uma por vez. Desta forma, o metodo de execuca o das linhas de
comandos e o mesmo. No entanto, se de varias linhas de comandos queremos
encia de comandos, neste caso basta moalterar apenas uma delas e repetir a sequ
dificar a linha correspondente no arquivo e re-executar o programa. Este arquivo
programa recebe o nome de roteiro (script) ja que ele informa ao MATLAB o ro encia de linhas de comandos contidas no
teiro a ser seguido na execuca o da sequ
arquivo programa.
Um arquivo .m pode ser criado usando-se qualquer editor de texto. Antes de

criar um novo arquivo, assegure-se que o diretorio


corrente e de seu uso pessoal.
E altamente recomendado que cada usuario trabalhe em um diretorio

de uso pessoal para evitar conflito com arquivos de outros usuarios. O procedimento para

mudar de diretorio
e verificar o diretorio
corrente e o seguinte:

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

27

>> cd c:\users\myname
>> cd
c:\users\myname

O usuario pode ainda listar os programas contidos no diretorio


corrente de

duas maneiras. O comando dir lista todos os arquivos no diretorio


corrente enquanto que o comando what lista somente os arquivos especficos do MATLAB
>> dir
.
..
ap2.m
ap2result.mat
ap3.m

ap3l.m
ap4.m
ap4l.m
d1 bode.m
mm1.m

mm2.m
odecomp.m
p1.m
p11.m
p12.m

p2.m
p eqlin.m
pend.m
pend eq.m
sample.tex

teste.eps
teste.m

>> what
M-files in the current directory d:\trindade\cursos\Vib
ap2
ap3
ap3l

ap4
ap4l
d1 bode

mm1
mm2
odecomp

p1
p11
p12

p2
p eqlin
pend

pend eq
teste

MAT-files in the current directory d:\trindade\cursos\Vib


ap2result
mais atuais do MATLAB (5.x e 6.x) possuem um editor de texto
As versoes
integrado. Para criar um novo arquivo .m, selecione no menu principal do MATLAB File/New/M-file ou pressione o botao Folha em branco. Para fixar o
procedimento, digite o programa seguinte no arquivo recem-criado:
clear all
t=0:0.1:10;
y=sin(t).*cos(t);
plot(t,y,bo-)
Grave o arquivo com um nome qualquer (por exemplo, exemplo1.m) selecionando File/Save no menu. O programa pode agora ser executado na janela

de comandos do MATLAB fazendo >> exemplo1 . Certifique-se que o diretorio


corrente e o mesmo utilizado para gravar o arquivo .m. Este programa traca

t [0, 10] contra y(t) = sin t cos t com linha solida


e crculos azuis.
Assim como os comandos do MATLAB, o usuario tambem pode criar progra
mas que atuam como funcoes,
isto e fornecem um ou mais resultados quando
sao tambem arquivos .m e poum ou mais parametros sao fornecidos. Funcoes
dem ser criadas da mesma maneira que os programas roteiro. Para exemplificar,
criemos uma funca o sc( x ) = sin x cos x num novo arquivo .m:

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

28

function f = sc(x)
f = sin(x).*cos(x);
E preciso gravar este arquivo com o mesmo nome da funca o, isto e sc.m. Note
que agora a recem-criada funca o sc pode ser utilizada no MATLAB da mesma
(comandos) do MATLAB.
maneira que as funcoes
>> a = sc(2)
a =
-0.3784
E interessante observar que as variaveis utilizadas na funca o, f e x, sao internas a`
funca o. De fato, executando-se o comando whos veremos que estas variaveis nao

foram armazenadas na memoria


do MATLAB. A variavel a assume o resultado
da funca o e o parametro x utilizado pela funca o e igual ao valor fornecido pelo
usuario, neste caso 2.
Podemos tambem utilizar esta nova funca o para reescrever o programa roteiro
exemplo1 da seguinte forma:
clear all
t=0:0.1:10;
y=sc(t);
plot(t,y,bo-)

2.7.2

O comando global

criadas no MATLAB so utilizarem variaveis internas a`


Apesar de as funcoes
funca o em questao ou locais, pode-se tambem utilizar variaveis armazenadas na

memoria
do MATLAB atraves do comando global <var1> <var2> .... Este comando determina que as variaveis <var1> <var2> ... sao globais, ou seja podem ser utilizadas em outros programas.
function f = sc(x) % Arquivo sc.m
global p
f = sin(p*x).*cos(x);
clear all % Arquivo principal.m (chama arquivo fun
ca
~o sc.m)
global p
p=3;
t=0:0.1:10;
y=sc(t);
plot(t,y,bo-)

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

2.7.3

29

O comando if

O comando if permite que se utilize comandos condicionais no MATLAB, tanto

no Command Window como no interior de roteiros ou funcoes.


A melhor maneira de entender a sintaxe deste comando e atraves de um exemplo. Considere a funca o sc definida anteriormente. Suponha que a funca o agora tenha
um valor limite para o parametro p, de forma que se p < 1 a funca o retorna
sc( x ) = sin x cos x e nao sc( x ) = sin px cos x. Isto pode ser realizado modificando
novamente o arquivo sc.m e incluindo o comando if.
function f = sc(x) % Arquivo sc.m
global p
if p<1
f = sin(1*x).*cos(x);
else
f = sin(p*x).*cos(x);
end
O MATLAB interpreta esta funca o da seguinte maneira: 1) o valor de p de
finido na memoria
do MATLAB e recuperado, 2) se o valor de p for menor que
1, a funca o executa a linha f = sin(1*x).*cos(x); e retorna o valor de f como
resposta, 3) se o valor de p for maior que ou igual a 1, a funca o executa a linha f
= sin(p*x).*cos(x); e retorna o valor de f como resposta.
Desta forma, mesmo que p seja definido menor que 1 no programa principal.m,
o mnimo valor de p considerado na funca o sc e 1. O programa seguinte ilustra
a utilizaca o da nova funca o sc com o comando if includo.
clear all % Novo arquivo principal.m (chama arquivo fun
c~
ao sc.m)
global p
t=0:0.1:10;
p= 3; y1=sc(t);
p= 1; y2=sc(t);
p=0.1; y3=sc(t); % p<1
plot(t,y1,bo-,t,y2,r-,t,y3,gs)
xlabel(x),
ylabel(sc(x) = sin(px) cos(x), com p maior ou igual a 1),
legend(p=3,p=1,p=0.1,3)
Executando o arquivo principal.m no MATLAB, a seguinte figura e produzida.
podem ser consideradas utilizando o coAlternativamente, varias condicoes
mando if em conjunca o com elseif. O exemplo seguinte ilustra esta utilizaca o
do comando if.

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

30

sc(x) = sin(px) cos(x), com p maior ou igual a 1

0.8

0.6

0.4

0.2

0.2

0.4

0.6

0.8

p=3
p=1
p=0.1
0

5
x

10

Figura 2.5: Grafico da funca o sin( px ) cos( x ) para diferentes valores de p.


function f = sc(x) % Arquivo sc.m
global p
if p<1
f = sin(1*x).*cos(x);
elseif p<2
f = sin(2*x).*cos(x);
elseif p<3|p==7
f = sin(3*x).*cos(x);
else
f = sin(p*x).*cos(x);
end

Os operadores relacionais e os conectivos logicos


que podem ser usados com
o comando if sao listados na tabela a seguir.

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

31

Operadores relacionais
<
menor que
>
maior que
<= menor que ou igual a
>= maior que ou igual a
== igual a
= diferente de

Conectivos logicos
&
e
|
ou

nao
xor ou excludente

2.7.4

O comando for

O comando for permite que se repita uma serie de comandos para diferentes
valores de uma ou mais variaveis. A sintaxe do comando for e a seguinte:
for k=ki:dk:kf
comandos
end
onde a linha comandos e executada para cada um dos seguintes valores da variavel

controladora k: ki, ki+dk, ki+2dk, ..., kf. Note que se (kf-ki) nao for multiplo

de dk, o ultimo
valor assumido por k e ki+N dk, onde N e o maximo valor inteiro
para o qual ki+N dk e menor que kf.
O valor do incremento dk pode tambem ser negativo desde que kf seja menor
que ki. Sempre que o incremento dk nao e fornecido, utilizando por exemplo
que dk e igual a 1. Tente reproduzir os exemplos
for k=ki:kf, o MATLAB supoe
2
abaixo :
for k=1:0.5:3
disp(k)
end
1
1.5000
2
2.5000
3
Aqui k comeca em 1 e e incrementado de 0.5 ate chegar em 3.
2 Lembre-se

que voce pode usar o comando for no command window ou em roteiros ou


(.m). Reproduza estes exemplos das duas maneiras.
funcoes

CAPITULO
2. COMANDOS BASICOS
DO MATLAB

32

for k=1:-0.4:-1
disp(k)
end
1
0.6000
0.2000
-0.2000
-0.6000
-1
Aqui k comeca em 1 e e decrementado de 0.4 ate chegar em -1.
for k=1:3.5
disp(k)
end
1
2
3
Aqui k comeca em 1 e e incrementado de 1 ate chegar em 3. Ele nao chega a

3.5 porque o proximo


valor incrementado seria 4.

Captulo 3
Aplicacoes

3.1

Programas interativos

Muitas vezes e interessante fazer um programa interativo de forma que o usuario


possa executa-lo entrando os dados necessarios ao programa via teclado sem ter
que editar o arquivo .m do programa. Isto pode ser feito atraves do comando
input. Considere por exemplo que voce quer fazer um programa que calcula
valores para a funca o f ( x ) = ae2x+b , e plota x versus f ( x ), a partir dos valores
inicial e final de x (xi e x f ) e dos parametros a e b. No entanto, voce tambem quer
que o usuario entre com estes valores sem ter que alterar o seu programa. Isto
pode ser feito da seguinte maneira:
function [y,x] = interat
clear
disp(Programa Interat - Vers~
ao 1.0 )
a = input(Entre com o valor de a = );
b = input(Entre com o valor de b = );
xi= input(Entre com o valor inicial de x = );
xf= input(Entre com o valor final de x = );
x = xi:(xf-xi)/99:xf; % define 100 valores de x entre xi e xf
y = a*exp(-2*x+b);
plot(x,y,ro-)
Quando o usuario executar o programa interat, os valores de a, b, xi e x f
sao pedidos ao usuario pelo programa. O usuario pode fornecer os valores simplesmente digitando o valor pedido seguido de < Enter >. Assim que os quatro
valores sao fornecidos o programa calcula os valores de f ( x ) e plota o grafico.
Note que a funca o interat tambem fornece como sada os valores de x e f ( x ).
Se o usuario executar o programa fazendo >> interat os valores de x e f ( x )
execuca o do programa. Se o usuario
sao imprimidos no comand window apos
executar o programa fazendo >> f=interat; os valores de f ( x ) sao armazena
dos na memoria
do MATLAB na variavel f. Os valores nao sao impressos na
tela e os valores de x sao perdidos. Se o usuario executar o programa fazendo

[f,x]=interat; os valores de x e f ( x ) sao armazenados na memoria


do MA33

CAPITULO
3. APLICAC
OES

34

TLAB nas variaveis x e f respectivamente.

3.2

Zeros de funcoes

usando o comando fzero. A funca o, da qual


O MATLAB acha zeros de funcoes
deseja-se encontrar os zeros, deve ser definida em um arquivo .m como definido
previamente. Considere a seguinte funca o f ( x ) = sin x cos x. A funca o apl1 e
entao escrita
function f=apl1(x)
f=sin(x)-cos(x);
A raiz pode ser determinada usando o comando fzero no comand window
do MATLAB ou no interior de um outro programa.
>> fzero(apl1,1)
ans =
0.7854
Note que o segundo argumento 1 e um chute inicial para o calculo da raiz.
Note tambem que o valor do a ngulo x que satisfaz f ( x ) = 0 esta em radianos
(0.7854 radianos = 45 graus). No entanto, existem outros valores de x para os
quais f ( x ) = 0, isto e , a funca o f ( x ) tem outras razes. Dando o chute inicial 3,
por exemplo, tem-se
>> fzero(apl1,3)
ans =
3.9270
ou, em graus, 225. Este comando pode ser utilizado com qualquer outra funca o
escrita no MATLAB.

3.3

Calculando Integrais

Pode-se tambem calcular integrais de uma funca o no MATLAB. Existem varios


metodos de aproximaca o numerica de integrais definidas implementados no MATLAB. Considere a seguinte integral
I=

Z b
a

f ( x ) dx

Esta integral pode ser aproximada usando a regra de Simpson com o comando
quad ou usando a regra trapezoidal com o comando trapz. Os dois comandos
trabalham de maneira bem diferente.

CAPITULO
3. APLICAC
OES

3.3.1

35

Regra trapezoidal

O comando trapz aproxima a integral usando os pontos da funca o definidos pelo


usuario. Assim, para usar este comando primeiro deve-se definir os vetores x, no
intervalo [ a, b], e f, os valores da funca o correspondentes aos valores definidos
no vetor x. Considere, por exemplo, a seguinte integral
I=

Z 1
0

2xe x dx

A aproximaca o para esta integral pode ser calculada atraves do seguinte programa:
function I=integral(dx)
x=0:dx:1;
f=2*x.*exp(-x.^2);
I=trapz(x,f);
Este programa cria um vetor x de a = 0 ate b = 1, com incremento dx definido
pelo usuario, calcula os valores de f ( x ) nestes pontos e usa o comando trapz para
aproximar a integral de f ( x ). A figura seguinte mostra graficamente a funca o
para dx = 0.1 e para dx = 0.02. A a rea sob a curva e a integral definida da funca o
f ( x ).
O calculo da integral e feito no MATLAB, usando a recem-definida funca o
integral, da seguinte maneira
>> integral(.1)
ans =
0.6298
>> integral(.02)
ans =
0.6320
da integral I para dx = 0.1 e dx = 0.02 sao
Observe que as aproximacoes
diferentes. De fato, usando o incremento menor dx = 0.02 aproxima-se melhor
a a rea sob a curva f ( x ). O valor exato desta integral e Iexato = 1 e1 ou calculando no MATLAB I = 0.63212055882856. Observando o grafico da funca o, e
facil imaginar porque a diminuica o do incremento dx melhora a aproximaca o da

integral. No entanto, na proxima


seca o, um metodo mais eficiente para o calculo
da integral e apresentado.

3.3.2

Regra de Simpson

O comando quad permite que se calcule a integral I usando a regra de Simpson.


A sintaxe deste comando e a seguinte:
quad(fc,a,b,tol)

CAPITULO
3. APLICAC
OES

36

0.9

0.8

0.7

0.6

f(x)

0.5

0.4

0.3

0.2

0.1

0.1

0.2

0.3

0.4

0.5
x

0.6

0.7

0.8

0.9

Figura 3.1: Representaca o da aproximaca o da integral de uma funca o.


sendo que fc e o arquivo .m que define a funca o da qual se quer calcular a
integral. a e b sao os limites de integraca o e tol e a tolerancia de erro exigida
para a aproximaca o da integral. Mostra-se mais adiante que, quanto menor a
tolerancia de erro exigida, mais preciso e o calculo da integral.
Primeiro, cria-se o programa apl2.m que define a funca o f ( x ).
function y=apl2(x) % fun
ca
~o apl2.m
y=2*x.*exp(-x.^2);
O calculo da integral I pode ser efetuado usando a tolerancia usual que e de
Neste caso, e desnecessario definir tol no comand window.
>> quad(apl2,0,1)

103 .

ans =
0.63212053454568
Calculando agora com uma tolerancia de 108
>> quad(apl2,0,1,1e-8)
ans =
0.63212055882677

CAPITULO
3. APLICAC
OES

37

Note que, comparando-se com o valor exato apresentado na seca o anterior,


quando diminui-se a tolerancia melhora-se a aproximaca o da integral.

3.4

Equacoes
diferenciais

diNo MATLAB existem diversas algoritmos para resolver sistemas de equacoes


ferenciais ordinarias de primeira ordem. Estes sao mostrados na tabela abaixo.
ode45
ode23
ode113
ode15s
ode23t
ode23s
ode23tb

diferenciais ordinarias
Integradores de equacoes
Runge-Kutta explcito de ordem 4/5 (Dormand-Prince)
Runge-Kutta explcito de ordem 2/3 (Bogacki-Shampine)
Preditor-corretor de passo variavel (Adams-Bashforth-Moulton)
BDF de passo quase constante para EDOs rgidas (Klopfenstein-Shampine)
Implementaca o da regra trapezoidal
Implementaca o de um par Rosenbrock (2,3) modificado para EDOs rgidas
Runge-Kutta implcito trapezoidal/BDF (Bank-Rose-Hosea-Shampine)

diferenciais ordinarias sao


A seguir, alguns exemplos de soluca o de equacoes
apresentados.

3.4.1

Sistema massa-mola-amortecedor

Considere um sistema massa-mola-amortecedor descrito pela equaca o diferencial


ordinaria seguinte
m x + c x + kx = f sin t
Note que esta equaca o diferencial ordinaria possui ordem 2 (pois x e derivada
segunda de x no tempo, d2 x/dt2 ). No entanto, esta equaca o pode ser escrita como
de primeira ordem da seguinte forma
um sistema de duas equacoes
y1 = x y 1 = x
y2 = y 1 = x y 2 = x =

f
m

sin t

c
m x

mk x =

f
m

sin t

c
m y2

mk y1

de primeira ordem
Em resumo, tem-se duas equacoes
y 1 = y2
f
y 2 = m sin t

c
m y2

mk y1

Primeiro, escreve-se uma funca o que calcula y 1 e y 2 a partir dos valores de


t, y1 e y2 . Esta funca o e chamada diversas vezes no processo de integraca o do
diferenciais.
sistema de equacoes
function dydt=apl3(t,y,opt,P)
m = P(1); c = P(2);
k = P(3); f = P(4);
dydt = [y(2); (f*sin(t) - c*y(2) - k*y(1))/m];

CAPITULO
3. APLICAC
OES

38

Note que as variaveis y1 , o deslocamento da massa, e y2 , a velocidade da


massa, foram agrupadas no vetor y. Assim, a sada da funca o apl3 tem como
elementos y 1 e y 2 :
 
 
y 1
y1
; dydt =
y=
y 2
y2
A sintaxe para a utilizaca o dos comandos ode* na integraca o da equaca o
diferencial do massa-mola-amortecedor e a seguinte
>> [t,Y]=ode45(apl3,[ti tf],Yi);
sendo que ti e tf sao os instantes de tempo inicial e final e Yi e o vetor de
iniciais. Note que Yi deve ser um vetor coluna (neste caso, com duas
condicoes
linhas) tal que

 

y 1 | t =0
x (0)
Yi =
=
x (0)
y 2 | t =0
de integraca o de EDOs, retorna
A funca o ode45, assim como as outras funcoes
um vetor coluna t contendo os instantes de tempo em que a soluca o foi calculada

e uma matriz Y com mesmo numero


de linhas que t. Cada coluna de Y corresponde ao comportamento de uma variavel no tempo. No caso deste exemplo, a
primeira coluna representa os deslocamentos da massa assumidos em cada instante de tempo e a segunda coluna representa as velocidades da massa assumidas
em cada instante de tempo.
pode
A linha de comando utilizada para executar a integraca o das equacoes
tambem ser parte de um outro programa. Considere, por exemplo, o seguinte
programa
function mma(m,c,k,f,xi,vi,ti,tf)
parametros = [m c k f];
Yi = [xi; vi];
[t,Y] = ode45(apl3,[ti tf],Yi,[],parametros);
subplot(221)
plot(t,Y(:,1));
xlabel(Tempo); ylabel(Deslocamento);
subplot(223)
plot(t,Y(:,2));
xlabel(Tempo); ylabel(Velocidade);
subplot(122)
plot(Y(:,1),Y(:,2))
xlabel(Deslocamento); ylabel(Velocidade);
Note que os parametros m, c, k e f sao passados do programa principal mma
atraves do vetor parametros. O recebimento dos
para a integraca o das equacoes
parametros pela funca o que calcula dydt e feita atraves do argumento extra P.
O parametro opt nao tem utilidade mas e necessario devido a` sintaxe de chamada do integrador. E possvel tambem fazer o mesmo programa utilizando ou-

CAPITULO
3. APLICAC
OES

39

tros integradores de EDOs. Para isto, basta substituir ode45 por outro integrador
(ode15s por exemplo).
Assim, pode-se executar o programa principal no comand window do MATLAB
>> mma(1,.5,2,.5,1,0,0,10)

Deslocamento

sendo que o primeiro valor corresponde a` massa m, o segundo ao amortecedor c,


o terceiro a` rigidez k, o quarto a` amplitude da forca f , o quinto ao deslocamento
inicial x (0), o sexto a` velocidade inicial x (0), o setimo ao instante inicial ti e o

oitavo ao instante final t f . A proxima


figura apresenta o resultado.
1

0.8

0.5

0.6

0.4

0.2

0.5

0
0

10
Tempo

15

20

Velocidade

0.2

0.4

0.5
Velocidade

0.6
0
0.8
0.5
1

1
1.5

10
Tempo

15

20

1.2
1

0.5

0
0.5
Deslocamento

Figura 3.2: Resposta livre de um sistema de um grau de liberdade tipo massa iniciais.
mola-amortecedor a um conjunto de condicoes

3.4.2

Pendulo simples

A dinamica do pendulo simples e representada pela seguinte equaca o diferencial


ordinaria
g
+ sin = 0
l

CAPITULO
3. APLICAC
OES

40

Seguindo a metodologia apresentada na seca o anterior, esta equaca o pode ser


integrada usando um programa principal que explicite o metodo de integraca o e
de um programa auxiliar que defina a equaca o a resolver. Primeiramente, deve-se
de primeira ordem.
transformar a equaca o anterior em um sistema de equacoes
y 1 = y2
g
y 2 = l sin y1
O programa principal pendulo.m e entao muito similar a` quele utilizado para
o problema do sistema massa-mola-amortecedor.
function pendulo(g,l,xi,vi,ti,tf)
parametros = [g l];
Yi = [xi; vi];
[t,Y] = ode45(apl4,[ti tf],Yi,[],parametros);
subplot(221)
plot(t,Y(:,1));
xlabel(Tempo); ylabel(Deslocamento);
subplot(223)
plot(t,Y(:,2));
xlabel(Tempo); ylabel(Velocidade);
subplot(122)
plot(Y(:,1),Y(:,2))
xlabel(Deslocamento); ylabel(Velocidade);
e o programa auxiliar que define a equaca o do pendulo e
function dydt=apl4(t,y,opt,P)
g = P(1); l = P(2);
dydt = [y(2); -g/l*sin(y(1))];
Pode-se entao executar o programa principal pendulo no comand window do
MATLAB:
>> pendulo(9.81,10,1,0,0,20)
Experimente aumentar o valor de xi de 1 para 2 e 3, para ver o que acontece
com os graficos. Voce consegue distinguir o comportamento deste sistema naolinear daquele do sistema linear massa-mola-amortecedor. As figuras a seguir
iniciais.
apresentam o resultado para estas e outras condicoes

41
2

0.5

0.8

0.6

0.5

0.4

0.2

Deslocamento

Deslocamento

CAPITULO
3. APLICAC
OES

1.5

0
1

10
Tempo

15

20

10
Tempo

15

20

0.2

0.4

0.6

0.5

0.8

10
Tempo

15

1
1

20

0.5

0.5
1
Velocidade

Velocidade

Velocidade

Velocidade

0.5
1

1
0
1.5

0.5

0
0.5
Deslocamento

10
Tempo

15

20

2
2

0
Deslocamento

Deslocamento

2
1
2
0
1
1

10
Tempo

15

20

Velocidade

Velocidade

1
0
2
1
2
3

10
Tempo

15

20

3
3

Deslocamento

1
0
1
Deslocamento

0
2
2

10
Tempo

15

20

Velocidade

1
4

4
1

Velocidade

2
2
0
3

10
Tempo

15

20

4
4

0
Deslocamento

Figura 3.3: Resposta livre de um pendulo sujeito a deslocamentos angulares iniciais de 1, 2 e 3 rad e considerando varias velocidades angulares iniciais.

CAPITULO
3. APLICAC
OES

3.4.3

42

Sistema com mais de um grau de liberdade

Procure na biblioteca de arquivos .m os programas mmola.m e pduplo.m. Execute


estes arquivos no MATLAB e, em seguida, veja como eles foram feitos (>> type
mmola) e (>> type pduplo). Apesar de serem mais extensos e usarem alguns comandos novos, estes dois programas utilizam a mesma metodologia apresentada

para resolver as equacoes


diferenciais de um sistema
nas ultimas
duas secoes
massa-mola-amortecedor com 3 graus de liberdade e de um pendulo duplo.
2

Amplitude (dB)

20

1.5
1o modo (0.09 Hz) = [0.500, 0.707, 0.500]
1

10
0
10
20

0.5

30
1

10

2o modo (0.32 Hz) = [0.707, 0.000, 0.707]

10

0
20

0.5
Fase (graus)

40

3o modo (0.54 Hz) = [0.500, 0.707, 0.500]


1

60
80
100
120
140

1.5

160
1

10

0.5

1.5

2.5

3.5

4.5

5.5

10
Frequencia (Hz)

Condicao Inicial 3o modo

Forcamento Harmonico de Frequencia 1 rad/s

0.8

0.5
Massa 1
Massa 2
Massa 3

0.6

Massa 1
Massa 2
Massa 3

0.4

0.3
0.4

Deslocamento (m)

Deslocamento (m)

0.2
0.2

0.2

0.1

0.1

0.2
0.4
0.3
0.6

0.8

0.4

10
12
Tempo (seg.)

14

16

18

20

0.5

10

20

30

40
Tempo (seg.)

50

60

70

80

Figura 3.4: Sistema massa-mola-amortecedor com tres graus de liberdade: modos de vibraca o, resposta em frequencia, vibraca o livre, resposta com forcamento

harmonico.

CAPITULO
3. APLICAC
OES

43

10
Posicao da massa B

Posicao da massa A

8
1

6
4
2
0
2

10

15

20

25

10

10

15

20

25

10

15

20

25

15
Velocidade da massa B

Velocidade da massa A

10

10

15

20

25

10
5
0
5
10

Figura 3.5: Resposta livre de um pendulo duplo.

Captulo 4
Outros comandos
4.1

Formato de sada

Ainda que todos os calculos em MATLAB sejam feitos com precisao dupla, o
:
formato da sada na tela pode ser modificado com as seguintes instrucoes
format short
format long
format short e
format long e

da quatro decimais (o usual)


da quatorze decimais
notaca o cientfica com 4 decimais
notaca o cientfica com quinze decimais.

Quando um formato e prescrito este e mantido ate que seja prescrito outro formato.

Como exemplo escreveremos o numero


com os quatro formatos discutidos:
short
3.1416
3.14159265358979
long
3.1416e+000
short e
3.141592653589793e+000 long e.

4.2

Comando diary

O comando diary <nome de arquivo> faz com que tudo o que aparecer na tela,
daquele momento em diante, (exceto graficos), seja guardado no arquivo <nome
de arquivo> ate que ordenemos diary off. Para continuar guardando os dados
escrevemos diary on. Por exemplo
>>
>>
>>
>>

clear
diary ss
a=[1 2 3 4 5 6];
b=a.^2

44


CAPITULO
4. OUTROS COMANDOS

45

b =
1
>>

16

25

36

c=[1 2 3; 4 5 6]

c =
1
4

2
5

3
6

>> d=c
d =
1
2
3

4
5
6

>> diary off


No arquivo ascii ss ficam guardados todos estes comandos. Abrindo este arquivo com um editor de texto temos
a=[1 2 3 4 5 6];
b=a.^2

b =
1

c=[1 2 3; 4 5 6]

c =
1
4

2
5

1
2
3

4
5
6

d=c

d =

diary off

3
6

16

25

36


CAPITULO
4. OUTROS COMANDOS

46

Fazendo na tela do MATLAB


>> diary on
>> d=[1 2; 3 4];
>> e=inv(d)
e =
-2.0000
1.5000

1.0000
-0.5000

>> diary off


o arquivo fica
a=[1 2 3 4 5 6];
b=a.^2

b =
1

c=[1 2 3; 4 5 6]

c =
1
4

2
5

1
2
3

4
5
6

3
6

d=c

d =

diary off
d=[1 2; 3 4];
e=inv(d)

e =
-2.0000

1.0000

16

25

36


CAPITULO
4. OUTROS COMANDOS
1.5000

47

-0.5000

diary off

4.3

Comando cputime

O comando cputime da o tempo de CPU, em segundos, dos processos do MATLAB desde o comeco da seca o .
Consideremos o programa a seguir
t=cputime;

operacoes
cputime-t
espeDesta maneira obtemos o tempo de CPU gasto para executar as operacoes
cificadas.
Este comando serve para testar a eficiencia de nossos programas.
Como aplicaca o, consideremos o programa
1. clear
t=cputime;
a1=0:5000;
a2=0:2:10000;
a3=10000:15000;
A=[a1 ; a2; a3];
for i=1:3
for j=1:5001
C(i,j)=A(i,j)^3;
end
end
cputime-t
Ao executar este programa obtemos o tempo de CPU gasto, que foi de
5.0600 seg.
2.

clear
t=cputime;
a1=0:5000;
a2=0:2:10000;
a3=10000:15000;
A=[a1 ; a2; a3];
C=A.^3;
cputime-t
A executar este programa obtemos o tempo de CPU gasto, que foi de 0.1100
seg.


CAPITULO
4. OUTROS COMANDOS

48

Notemos que os tempos dependem da configuraca o de seu computador, mas as


magnitudes sao proporcionais. Os dois programas fazem as mesmas contas, mas
de maneiras diferentes. Observamos, porem, que a maneira utilizada no segundo
programa e mais eficiente que no primeiro, pois utiliza a forma matricial de tratar
os dados.

4.4

O comando fprintf

Este comando serve para mostrar a sada de um programa. A sintaxe do comando


e : fprintf(formato de sada,variaveis). O formato de sada contem o texto e o formato
desejado para as variaveis especificadas em variaveis. Usamos %e, %f e %g para

formatar a sada . Se %e e usado, os conteudos


das variaveis a serem impressas

estarao em notaca o exponencial e com %f os conteudos


das variaveis serao mos
trados na notaca o comum de numeros
reais. Com %g e usada a notaca o %e ou %f
dependendo do caso. Se o carater \n aparecer no formato de sada, a impresao
continuara na linha seguinte. O formato de sada usual deve terminar com um
\n. Para esclarecer melhor este comando consideremos o seguinte exemplo.

4.4.1

Exemplo

Consideremos A uma matriz quadrada. Desejamos encontrar seus autovalores e


seus autovetores.
function pp1(A)
n=length(A(:,1));
[V,D]=eig(A);
for i=1:n
fprintf(Valor proprio Lambda(%g) = %f \n,i,D(i,i))
fprintf(Vetor proprio associado ao valor Lambda(%g),\n v(%g) = \n ,i,i);
disp(V(:,i))
pause(2)
end
Neste programa disp(V(:,i)) e usado para evitar na sada do vetor (coluna) a palavra ans. O comando pause(2) faz com que o programa espere dois segundos
para executar o comando seguinte. Se usamos so pause, a execuca o e interrompida ate que seja pressionada uma tecla. A execuca o e a sada deste programa sao
mostradas a seguir.
>> A=[1 2 3 1 0; 3 -10 4 5 6; 0 1 0 1 2; 3 -10 4 5 6; 1 2 3 4 5 ];
>> pp1(A)
Valor proprio Lambda(1) = 9.644410
Vetor proprio associado a valor Lambda(1),
v(1) =
0.2271


CAPITULO
4. OUTROS COMANDOS
0.4149
0.2394
0.4149
0.7395
Valor proprio
Vetor proprio
v(2) =
0.1777
-0.6680
0.0941
-0.6680
0.2592
Valor proprio
Vetor proprio
v(3) =
0.9323
0.1148
-0.2666
0.1148
-0.1830
Valor proprio
Vetor proprio
v(4) =
-0.8392
-0.1105
0.5207
-0.1105
-0.0110
Valor proprio
Vetor proprio
v(5) =
0.6968
0.0942
-0.4519
0.4708
-0.2825

Lambda(2) = -8.689421
associado a valor Lambda(2),

Lambda(3) = 0.511543
associado a valor Lambda(3),

Lambda(4) = -0.466532
associado a valor Lambda(4),

Lambda(5) = 0.000000
associado a valor Lambda(5),

49

Apendice A
Um programa para sistemas de
equacoes
lineares
lineares AX = b queremos saber se o sistema tem
Dado um sistema de equacoes

ou nao soluca o . Se tiver soluca o desejamos saber se ela e unica


ou nao . Se

a soluca o for unica


desejamos conhecer a soluca o. Se o sistema tiver infinitas
desejamos conhecer pelo menos uma soluca o .
solucoes
O programa a seguir discute, para um sistema dado, se a soluca o existe ou nao e

quando existir se e unica


ou nao, fornecendo tambem a soluca o (quando e unica)

e forncendo ao menos uma soluca o (quando nao e unica).


Quando o sistema
nao tiver soluca o desejamos que o programa encontre um vetor X que minimize
o erro pelo metodo dos mnimos quadrados.
Para saber se o sistema tem ou nao soluca o o programa compara o posto da matriz A com o posto da matriz [ A : b]. O sistema tera soluca o quando ambos os
postos forem iguais. Para a unicidade precisamos ainda que o posto da matriz A

seja igual ao numero


de incognitas
do sistema, caso contrario o sistema tera infi . O programa encontra, neste caso, pelo menos uma soluca o . No
nitas solucoes
caso do sistema nao ter soluca o o programa encontra um vetor X que minimiza
o erro do sistema AX = b pelo metodo dos mnimos quadrados.
function sist1(A,b)
n=rank(A);%Da o posto da matriz A
fprintf(Posto da matriz A= %g \n,n);
m=rank([A b]);%Da o posto de [A:b]
fprintf(Posto da matriz [A:b]= %g \n,m);
if n==m & n==length(A(1,:))
disp(O sistema tem sol unica)
X2=pinv(A)*b;
disp(X2);
elseif n==m & n<length(A(1,:))
disp(O sistema tem infinitas sols)
50

APENDICE
A. UM PROGRAMA PARA SISTEMAS DE EQUAC
OES
LINEARES51
disp(Usando divisao a esquerda uma solu\c c\~ao e)
X1=A\b;
disp(X1);
disp(Usando inversa generalizada uma solu\c c\~ao e)
X2=pinv(A)*b;
disp(X2);
else
disp(O sistema nao tem sol)
disp(Usando divisao a esquerda uma aproximacao e)
X1=A\b;
disp(X1);
e1=b-A*X1;
J1=e1*e1/2;
fprintf(Erro da divisao a esquerda = %f \n,J1)
disp(Usando inversa generalizada uma aproximacao e)
X2=pinv(A)*b;
disp(X2);
e2=b-A*X2;
J2=e2*e2/2;
fprintf(Erro da inversa generalizada = %f \n,J2)
end
Para olhar o funcionamento do programa consideremos os seguintes exemplos

A.1

Sistema com soluca o unica

Consideremos o sistema

x + 2y + 3z = 2
2x y + z = 3
3x y + 2z = 0

Para achar a soluca o do sistema fazemos


>> A=[1 -2 3;2 -1 1;3 -1 2];
>> b=[2;3;0];
>> sist1(A,b)
de onde temos
Posto da matriz A= 3
Posto da matriz [A:b]= 3
O sistema tem sol unica
0.2500
-5.7500
-3.2500

APENDICE
A. UM PROGRAMA PARA SISTEMAS DE EQUAC
OES
LINEARES52

A.2

Sistema com infinitas solucoes

Consideremos o sistema
x + 2y + 3z + w = 1
2x y + z w = 0
3x y + 2z + 2w = 0
Para achar a soluca o do sistema fazemos
>> A=[1 -2 3 1;2 -1 1 -1;3 -1 2 2];
>> b=[1;0;0];
>> sist1(A,b)
de onde temos
Posto da matriz A= 3
Posto da matriz [A:b]= 3
O sistema tem infinitas sols
Usando divisao a esquerda uma solu\c cao e
-0.2500
0
0.4375
-0.0625
Usando inversa generalizada uma solu\c cao e
-0.2500
-0.2115
0.2788
-0.0096

A.3

Sistema sem soluca o

Consideremos o sistema
x + 2y + 3z + w =
2x y + z w =
3x y + 2z + 2w =
x + y + 10z + w = 2
2x y + z w =

1
0
0
2

Para achar a soluca o do sistema fazemos


>> A=[1 2 3 1;2 -1 1 -1;3 -1 2 2; 1 1 10 1;2 -1 1 -1];
>> b=[1;0;0;2;2];
>> sist1(A,b)
de onde temos

APENDICE
A. UM PROGRAMA PARA SISTEMAS DE EQUAC
OES
LINEARES53
Posto da matriz A= 4
Posto da matriz [A:b]= 5
O sistema nao tem sol
Usando divisao a esquerda uma aproximacao e
0.3125
0.3125
0.1875
-0.5000
Erro da divisao a esquerda = 1.000000
Usando inversa generalizada uma aproximacao e
0.3125
0.3125
0.1875
-0.5000
Erro da inversa generalizada = 1.000000

Você também pode gostar