Você está na página 1de 17

TEXAS TECH

U N I V E R S I T Y
Traduzido por Eduardo Tavares de Sousa e
Rafael Perazzo B. Mota
David S. Gillian
Department os Mathematics
Texas Tech University
Lubbock, TX 79409
Matemtica 4330/5344 - # 1
Matlab e Aproximao Numrica
1- Observaes Preliminares
O propsito principal deste curso prover aos estudantes com base e uma experincia necessria
(usando o mtodo de muita prtica) para sentir-se confortvel ao usar o software interativo Matlab.
Aprendendo um novo software que apresenta certos obstculos pela necessidade de memorizar uma
nova sintaxe e tornar familiar o novo ambiente de operao. Entretanto o Matlab bastante fcil de
usar desde que voc j o tenha usado, ns entretanto levamos algum tempo para comear a ficar famili-
arizados com a interface e a sintaxe do Matlab. Isto vai ser consumado vrias vezes. Primeiro o texto
do curso est na Quarta Edio da Cartilha do Matlab por Kermit Sigmon. Este livro contm um
breve mas farta descrio dos aspectos mais elementares do Matlab. Segundo h muitos arquivos no
formato HTML, desenvolvido por L. Schovanec e D. Gilliam que engloba muitos topicos do uso do
Matlab.
2- O Bsico do Xterminal e Matlab
1. Para usar o xterminal no laboratrio voc deve primeiro entrar.
Comandos sero dados no decorrer da aula.
2. Depois voc deve abrir uma janela ferramenta de comando ou janela xterm. Por favor pergunte
como faz-lo caso voc no saiba.
3. O sistema operacional do seu computador o UNIX. So apenas alguns comandos para o sistema
operacional que voc vai precisar nesta aula.
4. Por exemplo, vamos criar um subdiretrio para nosso trabalho m4330 (ou m5344), ex.: digite mkdir
m4330. claro que voc tambm tem que apertar [ENTER] que tem o efeito de dizer ao sistema
operacional o que voc tinha previamente pressionado.
5. Agora mude-se para o novo subdiretrio digitando, cd m4330.
6. Para executar o Matlab, no prompt, simplesmente digite matlab e [ENTER] e sua sesso interativa
do Matlab vai ser iniciada.
7. No Matlab todo objeto uma matriz complexa a qual valores reais so mostrados como reais e in-
teiros como inteiros.
8. A esto alguns mtodos de como inserir uma matriz no espao de trabalho do Matlab:
(a) Voc pode digitar em elementos
A=[2 4 5;2 6 3;-1 6 2]
Constri uma matriz 3x3. Os valores so digitadas em linhas (elementos separados por es-
pao ou vrgula) o ponto-e-vrgula so usados para declarar o inicio de uma nova linha.
(b) Voc tambm pode gerar uma matriz usando os comandos rand(n) ou rand(n,m) para gerar
uma matriz nxn ou nxm no qual os elementos so geralmente distribudos entre 0 e 1.
(c) Os comandos
A=fix(10*rand(5))
B=round(10)rand(5))
Gera matrizes 5x5 com valores reais.
9. Se A=[a
ij
] e B=[b
ij
] so matrizes nxm e C=[c
ij
] uma matriz mxp, ento ns temos as seguintes ope-
raes aritmticas com matrizes:
(a) A+B=[a
ij
+ b
ij
] e A-B=[a
ij
-b
ij
]
(b) A*C=D onde D um matriz nxp com os valores
kj ik
m
k
ij
c a d

1
. Para multiplicao entre
matrizes o nmero de colunas da primeira matriz tem que o mesmo que o nmero de linhas
da segunda.
(c) Para um nmero escalar !, o produto escalar !A=[!a
ij
]
Por exemplo
A=[1 2 5;-2 1 4]
B=[4 2 0;4 2 7]
C=[3 6;-2 1;-4 2]
A+B
A*B
3*A
10. As regras usuais para expoentes inteiros positivos aplica-se para matrizes quadradas, A
2
=A*A,
A
3
=A*A*A, A
r
=A*A*A**A.
r
A=[3 1;5 2]
A^2, A^3
11. Em geral, diviso de matrizes no tem sentido. Mas para matrizes quadradas inversveis possvel
fazer a interpretao da diviso de matrizes. Se A no unitria, ento ela tem uma inversa, ex.: a
matriz A
-1
satisfaz A*A
-1
=A
-1
*A=I onde I a matriz identidade com 1s na diagonal principal e 0s
nos demais locais. A matriz identidade faz a mesma coisa que o nmero 1 na multiplicao
A*I=I*A=A. No Matlab a matriz identidade obtida por eye(n) onde n um inteiro. Se A no
unitria, ento o inverso no Matlab dado por inv(A) ou A^(-1). Neste caso ns podemos
pensar na diviso como B*A
-"
somente como ns fazemos com nmeros ba=b*a
-1
para nmeros
com a"0.
12. Generalizando, neste caso, voc pode computar C=A^(-r).
A=[3 1;5 2]
A^(-1), inv(a)
A*A^(-1)
A=[3 1;5 2]
C=A^(-2)
C*A^2
13. Uma matriz tem uma inversa se e somente se seu determinante no zero. O determinante de uma
matriz quadrada um nmero. Voc pode encontrar a definio deste nmero na maioria dos livros
de lgebra do segundo grau. No Matlab fcil computar os determinantes usando o comando det.
A=[3 1;5 2]
d=det(A)
14. Encontrando para uma matriz 2x2
. det
21 12 22 11
22
12
21
11
a a a a
a
a
a
a

1
]
1

15. O problema de determinar se uma matriz quadrada tem uma inversa no fcil de responder. A
resposta esta precisamente as matrizes inversveis tem inversas. Abaixo so dadas outras caracte-
rizaes de matrizes inversveis. Vamos considerar estas propriedades com dois exemplos.
A=[3 1;5 2]
B=[3 1;6 2]
A matriz A inversvel se e somente se umas das seguintes consideraes:
(a) det A"0
det(A)
det(B)
(b) As operaes com as linhas da matriz A resulta na identidade
rref(A)
rref(B)
(c) A tem uma inversa
inv(A)
inv(B)
(d) A nica soluo da equao Ax=0 x=0, ex.: o espao nulo o vetor zero. O comando
null do Matlab computa uma base para o espao nulo. Nota-se que isto no mostra o vetor
zero.
null(A)
null(B)
(e) A matriz A tem uma ordem. Se a nxn ento a ordem de A n.
Rank(A)
Rank(B)
16. Desde que ns possamos fazer grandes produtos escalares e somas de matrizes ns podemos falar
em matrizes polinomiais. Aqui tem um exemplo. Suponha A sendo uma matriz nxn, c um compo-
nente vetor linha (m+1), ento a expresso da matriz polinomial f=c(m+")*A
m
+c(m)*A
m-
"
++c(2)*A+c(")*eye(n).
17. Eis um exemplo.
A=[3 1;5 2]
C=[-3 2 1 5]
F=C(4)*A^3+C(3)*A^2+C(2)*A+C(1)*eye(2)
G=A*(A*(C(4)*A+C(3)*eye(2))+C(2)*eye(2))+C(1)*eye(2)
% mtodo da diviso sintetica de Horner
18. Um sistema de n equaes lineares e n incgnitas tem a forma

'

+ + +
+ + +
+ + +
n n nn n n
n n
n n
b x a x a x a
b x a x a x a
b x a x a x a
...
...
...
2 2 1 1
2 2 2 22 1 21
1 1 2 12 1 11
! ! ! ! ! ! ! ! ! ! !
o qual pode ser escrito na seguinte forma matricial
Ax=b
onde
1
1
1
1
]
1

nn n n
n
n
a a a
a a a
a a a
A
!
" # " "
$
$
2 1
2 22 21
1 12 11
,
1
1
1
1
]
1

n
x
x
x
x
"
2
1
,
1
1
1
1
]
1

n
b
b
b
b
"
2
1
19. Um sistema de equaes nesta forma pode ser solucionado no Matlab de diferentes formas. Um
meio usar a barra comum sintaxe x=A\b.
A=[3 1;5 2] % ajustando A
b=[2;-9] % ajustando b
x=A\b % resolvendo Ax=b
A*x-b % checando o resultado
20. Este sistema tambm pode ser resolvido usando uma matriz com os argumentos [A b] e computan-
do as operaes com linhas das matrizes, a ultima coluna a soluo.
A=[3 1;5 2] % ajustando A
b=[2;-9] % ajustando b
C=[A b] % ajustando a matriz com os argumentos
rref(C) % calculando as operaes com as linhas da matriz
21. Um sistema de equaes na forma xA=c onde x e c so vetores linhas pode ser resolvido no Matlab
usando a barra invertida sintaxe x=c/A.
A=[3 1;5 2] % ajustando A
c=[2;-9] % ajustando c
x=c/A % resolvendo xA=c
x*A-c % checando o resultado
22. Informaes adicionais e exemplos podem ser encontradas na Cartilha do Matlab e/ou acessando os
arquivos do tutorial on-line na rede usando o netscape. Para usar o netscape abra outro comando ou
xterm e digite netscape. Na janela URL (Recurso Universal de Localizao) digite
http://texas.math.ttu.edu
e tecle [ENTER]. Este link vai at a minha home-page e de l at as sesses do Matlab.
23. Para a tarefa seguinte vai ser muito til usar o comando diary no Matlab. O comando usado
para salvar entrada e sada em um arquivo de texto. A sintaxe diary on abilita a cpia e diary off de-
sabilita a cpia. Voc pode abilitar e desabilitar o diary quando voc quizer e toda hora que voc
ligar um novo dado vai aparecer para o arquivo do dirio corrente em seu subdiretrio. O arquivo
do dirio pode ser carregado em seu processador de textos e editado.
EXERCCIO 1
1. Crie as matrizes
1
]
1

3 1
4 2
A ,
1
]
1

4 0
1 2
B ,
1
]
1

1 2
1 3
C
e faa o seguinte:
(a) Verifique se (A+B)+C=A+(B+C).
(b) Verifique se (AB)C=A(BC).
(c) Verifique se A(B+C)=AB+AC.
(d) Determine se AB equivalente a BA.
(e) Encontre (A+B)
2
, (A
2
+2AB+B
2
) e (A
2
+AB+BA+B
2
).
(f) Encontre A
2
-B
2
, (A-B)(A+B) e (A
2
+AB-BA+B
2
).
2. Entre
1
]
1

2 / 1 2 / 1
2 / 1 2 / 1
A ,
1
]
1

2 / 1 2 / 1
2 / 1 2 / 1
B
e faa o seguinte:
(a) Compute A
2
, A
3
, etc. . Voc pode dizer como A
n
vai ser ? Explique porque isso verdade.
(b) Compute B
2
, Voc pode dizer porque isso verdade. O que isto pode dizer a voc sobre multi-
plicao de matrizes se isto diferente de nmeros quadrados?
(c) Encontre AB e BA. O que voc aprendeu com isso se isso no verdade para a multiplicao de
nmeros? (dica: se a um nmero real e a
2
=0, ento a=0).
3. Encontre o inverso das matrizes (se que existem) e cheque se o resultado est correto multiplican-
do as matrizes pelo seu inverso.
a)
1
]
1

0 1
1 1
A , b)
1
]
1

3 1
5 2
B , c)
1
1
1
]
1

3 0 1
0 3 0
5 0 2
C , d)
1
1
1
]
1

3 8 3
1 6 2
3 3 1
D .
4. Gere uma matriz 8x8 e um vetor 8x1 com valores inteiros por
A=round("0*rand(8)), b=round("0*rand(8,")),
(a) Use flops para contar o nmeros de operaes com pontos flutuantes necessrias para resolver
Ax=b usando a notao \.
(b) Reajuste o flops para zero e resolva o sistema usando as operaes com linhas da matriz de ar-
gumentos [A b] (ex.: U=rref([A b])). A ultima coluna de U (chame-a de y) a soluo para o
sistema Ax=b. Conte os flops necessrios para obter o resultado.
(c) Que metodo mais eficiente?
(d) As solues x e y aparentam ser a mesma mas se olharmos com mais digitos veremos que no
este caso. No prompt de comando digite format long. Agora olhe para x e y, ex.: digite [x y].
Outro meio de ver isso digitando x-y.
(e) Qual dos mtodos mais preciso ? Para ver a resposta compute os chamados residuais, r=b-Ax e
s=b-Ay. Qual o menor ?
Quando voc terminar reajuste o formato para curto format short.
5. Dadas as matrizes
1
]
1

2 3
3 5
A ,
1
]
1

4 2
2 6
B ,
1
]
1

3 6
2 4
C ,
resolva as equaes matriciais:
(a) AX+B=C,
(b) AX+B=X,
(c) XA+B=C,
(d) XA+C=X.
6. Assuma A= round(10*rand(6)). Mude a sexta coluna como segue. Ajuste
B=A % (obtenha a transposta de A)
Agora digite A(:,6)=-sum(B(1:5,:))
Voc pode dizer o que este ltimo comando faz ? Compute
det(A)
rref(A)
rank(A)
Voc pode explicar porque A no inversvel?
7. Assuma A=round(10*rand(5)) e B=round(10*rand(5)). Compare os seguintes pares de nmeros.
(a) det(A) e det(A).
(b) det(A+B) e det(A)+det(B).
(c) det(AB) e det(A)det(B).
(d) det(A
-1
) e 1/det(A).
8. Olhe a ajuda no magic e ento compute det(magic(n)) para n=3,4,5,,10. O que voc v que est
acontecendo? Cheque n=24 e 25 para ver se os modelos esto em domnio. Pelo modelo eu posso
tentar descrever em palavras o que eu vejo que est acontecendo a esses determinantes.
Matemtica 4330/534 - # 2
Vetores, Pontos, Traando Grficos,
Operaes Hadamard, e Sprintf
1- Observaes Preliminares
Maior parte do material nesta lio vem de um texto suplementar para o curso Introducton to Sci-
entific Computing por C. Van Loan.
O objetivo desta lio introduzi-lo a vrios meios de construo de vetores, funes de vetores,
escrevendo loops for, construindo e traando grficos de funes. Vrios exemplos de instrues so
usados para motivar o material.
2- Lio e Exemplos
1. Um vetor de x partes de um intervalo [a,b] dado por
a=x
1
< x
2
< < x
n
=b
e vetor de valores de uma funo f(x) dado por y
j
=f(x
j
). Traando o grfico de uma linha poli-
gonal com os pontos (x
j
,y
j
), j=1,2,,n ento dada uma aproximao para o grfico de y=f(x)
em [a,b].
2. Por exemplo no matlab podemos entrar com um vetor linha com trs entradas como
x=[10.2 20.2 30.3]
ou um vetor coluna como
x=[10.1;20.2;30.3]
3. Se voc entrar com essa expresso no Matlab o resultado vai definir x para ser o alinhado
apropriadamente e depois mostrar o resultado na tela. Se voc no quer mostrar o resultado
simplesmente coloque no fim da linha um ponto-e-vrgula. Por exemplo,
x=[10.1 20.2 30.3]
vai deixar o x igual ao alinhamento mas vai suprimir a impresso e sada.
4. Da x foi definido e pode ser mostrado qualquer hora simplesmente digitando x e [ENTER].
5. Para transformar um vetor linha de nmeros reais x em um vetor coluna de nmeros reais y
simplesmente compute a transposta que dada por uma aspa simples assim
y=x
6. Um grfico de somente trs termos poderia no ser to informativa. E ns temos nos confron-
tado com a necessidade de construir longos vetores. Ns podemos por exemplo, escrevemos
um vetor de 11 elementos para o intervalo [0,1] como
x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]
7. Construindo vetores deste modo poderia ser muito trabalho para longos vetores. Por esta razo
vamos primeiro introduzir uma noo de um loop for. A sintaxe neste caso simples poderia
ser dado por
for j=1:11 % para j indo de 1 at 11
x(j)=(j-1)/10; % compute o j-simo termo
end % indicao de final
Primeiro note o uso do % o qual usado para adicionar comentrios nos programas. O Matlab
ignora tudo na linha que sucede o smbolo de percentagem. Depois voc ver o primeiro uso
da notao de coluna. A expresso
J=1:11
Produz um vetor com os ndices
J=[1 2 3 4 5 6 7 8 9 10 11]
O comando for simplesmente diz: execute todos os comandos que seguem o for at encontrar
o end para todo ndice jJ.
8. Usando loops mais fcil que entrar cada elemento do vetor manualmente. Loops podem ainda
serem usados para construir um vetor com valores de uma funo. Vamos considerar a funo
f(x)=sin(2x).
Suponha que queremos construir um vetor y cuja a j-sima entrada f(x(j)). Ento podemos es-
crever
for j=1:11
y(j)=sin(2*pi*x(j));
end
9. Para traar o grfico em ordem os vetores x versus y no Matlab digite
plot(x,y)
10. No comando for abaixo ns dissemos a notao 1:11. Esta mesma notao pode ser usada
para gerar x. Assim ns podemos escrever
x=0:.1:1
Mas genericamente, vetores de elmentos com espaos iguais podem ser gerados um formato ge-
ral:
{nmero inicial} : {nmero de incremento} : {ltimo nmero}
Se o passo 1 ento o mesmo pode ser omitido
{nmero inicial} : {ltimo nmero}
da x=1:6 o vetor x=[1 2 3 4 5 6]. Voc tambm pode usar um incrementador negativo,
se o primeiro nmero menor que o ltimo. Por exemplo
x=10:-1:1
constri o vetor [10 9 8 7 6 5 4 3 2 1].
11. Se voc digitar
x=10:1
Matlab vai devolver
x=
[]
onde [\,] (abre colchete fecha colchete) representa a matriz vazia, matriz sem nenhum valor.
Isso mostra que a matriz vazia muito til na programao.
12. Voc tambm pode construir o vetor x abaixo usando o comando linspace ;
LINSPACE vetor linearmente espaado
Linspace(x1,x2) gera um vetor de 100 elementos entre x1 e
x2 com mesma distancia;
Linspace(x1,x2,N) faz o mesmo s que um vetor de N elemen-
tos.
x=linspace(0,1,11)
LOGSPACE vetor logaritmicamente espaado
Logspace(d1,d2) gera um vetor de 50 elementos logaritmica-
mente espaados entre 10
d1
e 10
d2
.
Logspace(d1,d2,N) faz mesmo s que com N elementos.
x=logspace(.01,1,15)
y=log(x)
plot(x,y,x,y,*)
13. De fato agora uma boa hora para lembrar voc denovo da ajuda on-line: Voc pode olhar
para
(a) help who : Lista as variveis que esto sendo usadas no momento;
(b) help whos: Lista as variveis seus tipos e tamanhos;
(c) help clear: Apaga todas a variveis que esto presentes na memria;
(d) help for: Repete um bloco m nmero especfico de vezes;
(e) help zeros: Cria uma matriz cuja todos os elementos so zeros;
(f) help ones: Cria uma matriz cuja todos os elementos so uns;
(g) help eye: Cria uma matriz identidade;
(h) help ; : Evita que o resultado do comando seja mostrado na tela;
(i) help []: Resulta na matriz vazia;
(j) help linspace: Cria um vetor de pontos eqidistantes;
(k) help logspace: Cria um vetor de pontos logaritmicamente eqidistantes;
(l) help elfun: Funes matemticas elementares;
(m) help plot: Cria um grfico de uma varivel por outra;
(n) help length: Retorna o tamanho de um vetor;
(o) help size: Retorna dois valores o nmero de linhas e de colunas de uma matriz;
14. Ento, vamos voltar a traar grficos testar funes de notao de ponto. Voc tem visto agora
como ns podemos usar a notao de pontos, melhor do que laos de repetio, para criar veto-
res. Isso chamado vetorizao . Considere o seguinte:
x=linspace(0,1,11);
y=sin(2*pi*x);
plot(x,y);
O primeiro comando cria o vetor x o seguinte cria um vetor y onde a funo sin foi apicada a
um vetor (ou matriz). De fato f uma das funes construtoras o Matlab (veja help elfun)
e A uma matriz.

,
_

nn n n
n
n
a a a
a a a
a a a
A
!
" # " "
$
$
2 1
2 22 21
1 12 11
,

,
_

) ( ) ( ) (
) ( ) ( ) (
) ( ) ( ) (
) (
2 1
2 22 21
1 12 11
nm n n
m
m
a f a f a f
a f a f a f
a f a f a f
A f
!
" # " "
$
$
.
15. Como um segundo exemplo simples vamos ver um meio comum de gerar conjuntos de dados
ruidosos.
x=0:.025:2;
y=sin(pi*x);
yn=y+.25*(rand(size(x)) - .5);
plot(x,y,x,yn)
title([dashed line: sin(pi*x), ,solid line: noisy data])
xlabel([noise is random from [-1/81/8]])
16. Isto nos mostra que h muitos meios de como a notao de pontos usada no calculo de veto-
res. importante tentar usar esse conceitos o mais cedo possvel pois ele facilitam muito a
programao no Matlab. Aqui outro exemplo. O objetivo reduzir pela metade o nmero de
funes seno necessrias para construir (sin2**x) no intervalo [0,1].
m=5; n=4*m+1; x=linspace(0,1,n);
% [x(1), x(2), x(21)], x(j)-x(j-1)=.05
y=zeros(1,n);
xf=x(1:(2*m+1));
% os valores [0, .05, , .5]
y(1:(2*m+1))=sin(2*pi*xf);
y((2*m+2):n)= -y(2:(2*m+1));
% aqui ns estamos explorando o fato de sin(x+pi)=-sin(x)
plot(x,y)
17. O ponto este: Se J=[J(1),J(2),,J(k)] um vetor de indices de um vetor x=[x(1),x(2),,x(n)]
ento w=x(J) o vetor w=[x(J(1)),,x(J(k))].
18. Mais geralmente, considere a seguinte discusso para um matriz A
nxm
:
(a) para obter o tamanho , nmero de linhas e colunas, digite [n,m]=size(A)
(b) a isima linha A(i,:)
(c) a jsima coluna A(:,j)
(d) se 1 i j n e 1 p q m, a passagem B=A(i:j,p:q) devolve a matriz
1
1
1
]
1

jq jp
iq ip
a a
a a
B
!
" # "
!
(e) a passagem B=A(1,p:q) devolve a matriz
B=[a
ip
a
iq
]
(f) a passagem B=A(i:j,p) devolve a matriz
1
1
1
]
1

jp
ip
a
a
B "
(g) a passagem B=A(i:j,:) retorna a matriz
1
1
1
]
1

jm j
im i
a a
a a
B
!
" # "
!
1
1
(h) a passagem B=A(:,p:q) devolve a matriz
1
1
1
]
1

nq np
q p
a a
a a
B
!
" # "
!
1 1
19. Em ordem para produzir uma sada agradvel de um clculo voc pode usar o comando sprintf
(veja tambm fprintf para sada em um arquivo).
20. Ns s podemos considerar um breve desenvolvimento da sintaxe do sprintf (para um maior
aprofundamento veja o manual de programao em C no tpico fprintf). A sintaxe bsica pare-
ce isto
S=sprintf(FORMAT,A,)
21. Considere o simples exemplo
S=sprintf(rho if %5.3f,(1+sqrt(5))/2)
(a) O FORMAT um string (falaremos sobre strings depois) por enquanto o nosso
material so simples citaes. Isto consiste de algumas palavras e ento o jeito da
expresso %5.3f. Esta uma parte crucial.
(b) A expresso % o marcador de ponto para uma varivel (elas esto sempre listadas
no final da string formatada) nesse caso somente (1+sqrt(5))/2.
(c) A prxima parte 5.3f so atualmente 3 partes:
(1) o 5 diz para ocupar exatamente cinco dgitos de espao,
(2) o .3 diz para mostrar 3 casas decimais
(3) o f diz o formato especfico (nivelado a direita).
22. Aqui est segundo exemplo:
disp( n sum(1:n) n*(n+1)/2 )
disp(------------------------------)
for n=1:10
disp(sprintf( %3.0f %5.0f %5.0f ,n,sum(1:n)
,n*(n+1)/2;
end
23. Vamos considerar um exemplo onde ns comeamos com os valores
x=linspace(0,1,11);
y=sin(2*pi*x);
plot(x,y)
com os valores x(k) dados em grau em vez de radianos. Este exemplo foi tirado do [2].
%Script File SinTable.m
%
%Imprime uma pequena tabela de avaliaes de seno
%
n=21;
x=linspace(0,1,n);
y=sin(2*pi*x);
disp( )
disp( k x(k) sin(x(k)));
disp(------------------------);
for k=1:21
degrees=(k-1)*(360/(n-1);
disp(sprintf( %2.0f %3.0f %6.3f
,k , degrees, y(k)));
end
disp( );
disp(x(k) dado em graus.)
disp(Um grau=%5.3e Radianos,pi/180))
O resultado dos comandos executados
K x(k) Sin(x(k))
1 0 0.000
2 18 0.309
3 36 0.588
4 54 0.809
5 72 0.951
6 90 1.000
7 108 0.951
.
.
.
21 360 0.000
X foi dado em graus
Um Grau= 1.745e-02 Radianos
24. No exemplo SineTable abaixo h trs variaveis para imprimir e elas tem trs % partes
%2.0f %3.0f %6.3f
Note como o espao entre os termos determinado pelos espaos esquerda dos trs termos
formatados. Seguindo isso vemos que aqueles trs valores k, x(k) e sen(2**x(k)) os quais fo-
ram impressos no local dos % indicadores de lacais.
25. Diga o que acontece quando as variveis so matrizes (ou vetores).
x=(1:5)*2*pi;
sprintf( %5.3f,x)
agora compare isto com
x=(1:5)*2*pi;
sprintf( %5.3f\n,x)
A expresso \n d uma alimentao de linha.
26. O ultimo tpico desta lio vai ser o uso das operaes Hadamard (ou de ponto). A multipli-
cao .* ou diviso ./ ou exponenciao .^ de Hadamard so muito teis e poderosas.
C=A.*B tem valor de c
ij
=a
ij
b
ij
C=A./B tem valor de c
ij
=a
ij
/b
ij
C=A.\B tem valor de c
ij
=b
ij
/a
ij
C=A.^B tem valor de c
ij
=a
ij
^b
ij
C=A.^r tem valor de c
ij
=a
ij
^r, onde r um nmero.
C=r.^A tem valor de c
ij
=r^a
ij
Para um exemplo, tome
A=[2 1;3 2]
B=[-4 1;3 2]
E compute
A.*B
e
A./B
e
A.^B
e
A.^2
E
2.^B
Isto muito til no teste de funes vetoriais que tem produtos de funes elementares.
27. Suponha por exemplo que voc queira traar o grfico da funo y=x.sen(x
2
) no intervalo de [-
4,4]. Ns poderamos usar um loop como segue
x=-4:.01:4;
lx=length(x);
for j=1:lx
y(j)=x(j)*sin(x(j)^2);
end
plot(x,y)
Mas no to eficiente como
x=-4:.01:4;
y=x.*sin(x.^2);
plot(x,y)
28. Aqui um exemplo final de mltiplos grficos tirados de [2]. O novo ingrediente usar o sub-
grfico para gerar mltiplas janelas de grficos.
% Script File Polgonos
%
% Desenha o polgono regular selecionado.
close all;
% fecha todas as janelas de figuras corrente
clc %limpa a tela
theta=linspace(0,2*pi,361);
c=cos(theta);
s=sin(theta);
k=0;
for sides = [3 4 5 6 8 10 12 18 24]
stride=360/sides;
k=k+1;
subplot(3,3,k)
plot(c(1:stride:361),s(1:stride:361))
xlabel(sprintf(n= %2.0f,sides));
axis([-1.2 1.2 1.2 1.2])
axis(quadrado)
% configura a taxa para o quadrado
% para uma perspectiva melhor
pause(.01)
% .01 segundos de pausa entre cada desenho
end
EXERCCIO 2
1. Construa o vetor v=[100,95,90, ,-95,-100]
2. Construa o vetor v=[sen(), sen(2), , sen(10)]
3. Construa o vetor 1 x 10 v=[0,1,1, ,1,1,]
4. Construa o vetor v=[1
2
,2
2
,3
2
,,10
2
]
5. Construa o vetor v=[2,4,,2
8
]
6. Construa o vetor com os valores complexos v=[1+i,1+2i,1+3i, , 1+10i]
dica: i=sqrt(-1) construdo no matlab, lembre-se 1+v adiciona um a cada valor de v.
7. Dada a matriz 6x9
A=[1 2 3 4 5 6 7 8 9
1 1 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0
9 8 7 6 5 4 3 2 1
-1 1 1 1 1 1 1 1 1
2 1 2 1 2 1 2 1 1]
(a) Construa a submatriz B consistindo na primeira e quarta linhas e da terceira at a sexta coluna
de A.
Dica: considere o exemplo
A1=fix(10*rand(4))
S=A1(1:2,3:4)
(b) Construa a matriz C consistindo em todas as linhas numeradas de A.
Dica: considere o exemplo
A1=fix(10*rand(7))
E=A1([2,4,6],:)
(c) Reformate a matriz A para uma nova matriz D que 2 por 27.
Dica: considere o exemplo
A1=fix(10*rand(3,4))
R=resape(A1,2,6)
(d) Primeiro defina AA=A e use a matriz vazia para omitir a primeira, segunda e Quarta linhas de
AA.
Dica: considere o exemplo
A1=fix(10*rand(6,4))
A1([1,3,6],:)=[]
(e) Construa a matriz F consistindo nas colunas de A na ordem inversa
Dica: dado o vetor
v=[1 2 3 4 5]
u=v(5:-1:1)
Voc tambm pode ver help fliplr.Aqui est um exemplo
A1=fix(10*rand(6,4))
R1=A1(:,[4:-1:1])
(f) Crie a matriz G que consiste na matriz A em todos os valores nas linhas numeradas substitu-
dos por 0
Dica: considera o exemplo
A1=fix(10*rand(6,4))
A1([2,4,6],:)=zeros(3,4)
(g) Construa uma matriz H 8 por 11 na qual a matriz A com as bordas dos quatro lados com 1
Dica: considere o exemplo
A1=fix(10*rand(2,4))
A2=[1 1 1 1;A1;ones(1,4)]
H1=[ones(4,1) A2 ones(4,1)]
8. Construa o vetor 1 por 200
v=[0,1,0,2,0, ,0,99,0,100]
\begin{verbatim}
(dica: voc pode associar o valor da matriz por)
\begin{verbatim} v=([1 3 5])=1:3
e os valores de v(2) e v(4) so automaticamente colocados iguais a 0.
9. Dado um intervalo (a,b) isto muitas vezes til para construir um partio consistindo de (n-1) in-
tervalos desencaixados [x(j),x(j+1)] de tamanho 1/(n-1). Isto pode ser consumado usando a partio
de n pontos no intervalo. A ajuste de pontos semelhantes obtido de x(j)=a+(b-a)*((j-1)/(n-1)) onde
j varia de 1 at n.
Dado o intervalo [-7,9] use o Matlab para construir esse vetor x quando n=21.
Dica: considere o exemplo
a=1; b=2; n=6; h=(b-a)/(n-1); x1=a+h*(0:(n-1))
10. No mesmo desenho axes sin(j*pi*t) para j=1..5. Use t=0:.025:1.
Dica: Para traar alguns grficos no mesmo eixo voc pode usar diversas aproximaes:
(a) Uma aproximao se no h muitos grficos usar um nico comando plot listando cada grfi-
co como o exemplo seguinte
t=0:.025:1;
plot(t, sin(pi*t), t, sin(2*pi*t), , t, sin(5*pi*t))
(b) Uma segunda alternativa usar um loop e o comando hold on (veja help hold) e quando tiver
pronto tenha certeza de ter usado o hold off.
t=0:.025:1;
plot(t,sin(pi*t))
hold on
for j=2:5
plot(t,sin(j*pi*t)
end
hold off
(c) Um terceiro mtodo poderia construir uma matriz com os valores
n
k j
k t pi j
, 5
1 , 1
)} ( * * {sin(

onde
n=length(t) o tamanho de t. Vamos fazer no estilo Matlab
t=0:.025:1;
lt=length(t);
A=(1:5)*pi*t;
plot(t,sin(A))
11. Aqui um exerccio interessado em traar uma funo com assimptotas verticais. Trace a funo
y =sec(x)=1/cos(x) no intervalo de /2 at 11/2.
Dica: o exemplo seguinte foi tirado de [2]:
% Traando a Funo tg(x), -pi/2 <= x <= 9pi/2
ymax=10;
x=linspace(-pi/2,pi/2,40);
y=tan(x);
plot(x,y);
axis([-pi/2 9*pi/2 ymax ymax])
Title(A funo tangente)
xlabel(x)
ylabe(tg(x))
hold on
for k=1:4
xnew=x+k*pi;
plot(xnew,y);
end
grid
hold off
12. Desenhe as funes racionais
) 4 (
) (
2

x
x
x y , e
) 4 (
) (
2
2

x
x
x y
no intervalo [-6,6].
Dica: Aqui h um exemplo mostrando vrios meios em que isto pode ser feito para
) 3 )( 1 (
) 1 (
2

x x
x
y .
x=-6:.01:6;
y=(x-1).^2./((x-3).*(x+2));
plot(x,y)
axis([-6 6 3 7]);
grid
obs.: Note o comunicado divide by zero. Uma coisa conveniente a saber em Matlab eps o qual
basicamente o menor nmero maior que a preciso da mquina zero.
x=-6:.01:6;
y=(x-1).^2./((x-3).*(x+2)+eps);
plot(x,y)
axis([-6 6 3 7]);
grid
ou voc pode ficar alheio das assimptotas traando o grfico em partes
d=.001;
x1=-6:.01:(-2-d);
x2=(-2+d):.01:(3-d)
x3=(3+d):.01:6;
y1=(x1-1).^2./((x1-3).*(x1+2));
y2=(x2-1).^2./((x2-3).*(x2+2));
y3=(x3-1).^2./((x3-3).*(x3+2));
plot(x1,y1,x2,y3,x3,y3)
axis([-6 6 3 7]);
grid
13. Use o comando sprintf para imprimir uma tabela de valores interos k de 1 at 10 e os valores de
k
2
, ) (k , log(k).
Bibliografia
[1] The Matlab Primer, Kermit Sigmon
[2] Introduction to scientific computing: a matrix vector approach using Matlab, Printice Hall, 1997,
Charles Van Loan
[3] Mastering Matlab, Printice Hall, 1996, Duane Hanselman and Bruce Littlefeld
[4] Advanced Mathematics and Mechanics Applications Using Matlab, CRC Press, 1994, Howard B.
Wilson and Louis H. Turcotte
[5] Engineering Problem Solving with Matlab, Printice Hall, 1993, D.M Etter
[6] Solving Problems in Scientific Computing Using Maple and Matlab, Walter Gander and Jiri Hrebi-
cek
[7] Computer Exercises for Linear Algebra, Printice Hall, 1996, Steven Leon, Eugene Herman, Ri-
chard Faulkenberry.
[8] Contemporary Linear Systems using Matlab, PWS Publishing Co., 1994, Robert D. Strum, Donald
E. Kirk

Você também pode gostar