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

Traduzido por Eduardo Tavares de Sousa e Rafael Perazzo B. Mota

David S. Gillian Department os Mathematics Texas Tech University Lubbock, TX 79409

Matemática 4330/5344 - # 1 Matlab e Aproximação Numérica

1- Observações Preliminares

O propósito principal deste curso é prover aos estudantes com base e uma experiência necessária (usando o método de muita prática) para sentir-se confortável ao usar o software interativo Matlab. Aprendendo um novo software que apresenta certos obstáculos pela necessidade de memorizar uma nova sintaxe e tornar familiar o novo ambiente de operação. Entretanto o Matlab é bastante fácil de usar desde que você já o tenha usado, nós entretanto levamos algum tempo para começar a ficar famili- arizados com a interface e a sintaxe do Matlab. Isto vai ser consumado várias vezes. Primeiro o texto do curso está na Quarta Edição da “Cartilha do Matlab” por Kermit Sigmon. Este livro contém um breve mas farta descrição 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 Básico do Xterminal e Matlab

1. Para usar o xterminal no laboratório você deve primeiro entrar. Comandos serão 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ê não saiba.

3. O sistema operacional do seu computador é o UNIX. São apenas alguns comandos para o sistema operacional que você vai precisar nesta aula.

4. Por exemplo, vamos criar um subdiretório para nosso trabalho m4330 (ou m5344), ex.: digite mkdir m4330. É claro que você também 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 subdiretório digitando, cd m4330.

6. Para executar o Matlab, no prompt, simplesmente digite matlab e [ENTER] e sua sessão interativa do Matlab vai ser iniciada.

7. No Matlab todo objeto é uma matriz complexa a qual valores reais são mostrados como reais e in- teiros como inteiros.

8. Aí estão alguns métodos de como inserir uma matriz no espaço de trabalho do Matlab:

(a) Você pode digitar em elementos A=[2 4 5;2 6 3;-1 6 2] Constrói uma matriz 3x3. Os valores são digitadas em linhas (elementos separados por es- paço ou vírgula) o ponto-e-vírgula são usados para declarar o inicio de uma nova linha.

(b) Você também pode gerar uma matriz usando os comandos rand(n) ou rand(n,m) para gerar uma matriz nxn ou nxm no qual os elementos são geralmente distribuídos 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 ] são matrizes nxm e C=[c ij ] é uma matriz mxp, então nós temos as seguintes ope- rações aritméticas com matrizes:

(a)

(b) A*C=D onde D é um matriz nxp com os valores

A+B=[a ij + b ij ] e A-B=[a ij -b ij ]

d

ij

=

m

k = 1

a

ik

c

kj

. Para multiplicação entre

(c)

matrizes o número de colunas da primeira matriz tem que o mesmo que o número de linhas da segunda.

Para um número 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.

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.

r

A=[3 1;5 2] A^2, A^3

11. Em geral, divisão de matrizes não tem sentido. Mas para matrizes quadradas inversíveis é possível fazer a interpretação da divisão de matrizes. Se A não é unitária, então ela tem uma inversa, ex.: a matriz A -1 satisfaz A*A -1 =A -1 *A=I onde I é a matriz identidade com 1’s na diagonal principal e 0’s nos demais locais. A matriz identidade faz a mesma coisa que o número 1 na multiplicação A*I=I*A=A. No Matlab a matriz identidade é obtida por eye(n) onde n é um inteiro. Se A não é unitária, então o inverso no Matlab é dado por inv(A) ou A^(-1). Neste caso nós podemos pensar na divisão como B*A -1 somente como nós fazemos com números b÷a=b*a -1 para números 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 não é zero. O determinante de uma matriz quadrada é um número. Você pode encontrar a definição deste número na maioria dos livros de álgebra do segundo grau. No Matlab é fácil computar os determinantes usando o comando det. A=[3 1;5 2] d=det(A)

14. Encontrando para uma matriz 2x2

det

a

a

11

21

a

a

12

22

=

a

11

a

22

a

12

a

21

.

15. O problema de determinar se uma matriz quadrada tem uma inversa não é fácil de responder. A resposta é esta precisamente as matrizes inversíveis tem inversas. Abaixo são dadas outras caracte- rizações de matrizes inversíveis. Vamos considerar estas propriedades com dois exemplos. A=[3 1;5 2] B=[3 1;6 2] A matriz A é inversível se e somente se umas das seguintes considerações:

(a)

det A 0 det(A) det(B)

(b)

As operações 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 solução da equação Ax=0 é x=0, ex.: o espaço nulo é o vetor zero. O comando “null” do Matlab computa uma base para o espaço nulo. Nota-se que isto não mostra o vetor zero. null(A) null(B)

(e)

A matriz A tem uma ordem. Se a é nxn então a ordem de A é n. Rank(A) Rank(B)

16. Desde que nós possamos fazer grandes produtos escalares e somas de matrizes nós podemos falar em matrizes polinomiais. Aqui tem um exemplo. Suponha A sendo uma matriz nxn, c é um compo-

polinomial f=c(m+1 )*A m +c(m)*A m-

nente

vetor

linha

(m+1),

então

a

expressão

da

matriz

1 +…+c(2)*A+c(1 )*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)

% método da divisão sintetica de Horner

18. Um sistema de n equações lineares e n incógnitas tem a forma

a

a

x

11 1

x

21 1

+

+

a

a

x

12

2

22

x

2

+

+

+

+

a

1

n

x

n

a

2

n

x

n

=

=

b

1

b

2

!!!!!!!!!!!

a

n

1

x

1

+

a

n

2

x

2

+

+

a

nn

x

n

=

b

n

o qual pode ser escrito na seguinte forma matricial Ax=b

onde

a

a

a

a

1 n

2 n

"

a

nn

,

x =

x

b

11

21

"

n

1

a

a

12

22

"

a

n

2

$

$

#

!

1

1

b

"

2

b

n

x

"

2

x

n

A =

,

b =

a

19. Um sistema de equações 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 também pode ser resolvido usando uma matriz com os argumentos [A b] e computan- do as operações com linhas das matrizes, a ultima coluna é a solução. 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 operações com as linhas da matriz

21. Um sistema de equações na forma xA=c onde x e c são 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. Informações 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 Localização) digite

e tecle [ENTER]. Este link vai até a minha home-page e de lá até as sessões do Matlab.

23. Para a tarefa seguinte vai ser muito útil usar o comando “diary” no Matlab. O comando é usado para salvar entrada e saída em um arquivo de texto. A sintaxe diary on abilita a cópia e diary off de- sabilita a cópia. 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 diário corrente em seu subdiretório. O arquivo do diário pode ser carregado em seu processador de textos e editado.

1. Crie as matrizes

e faça o seguinte:

EXERCÍCIO 1

A =

2

1

4

3

,

B =

− 2

0

1

4

,

C =

3

2

(a)

Verifique se (A+B)+C=A+(B+C).

(b)

Verifique se (AB)C=A(BC).

(c)

Verifique se A(B+C)=AB+AC.

1

1

(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

e faça o seguinte:

A =

1/

1/

2

2

1/

1/

2

2

,

B =

 − 1/ 2

1/ 2

1/ 2

1/ 2

(a)

Compute A 2 , A 3 ,

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- plicação de matrizes se isto é diferente de números quadrados?

(c)

Encontre AB e BA. O que você aprendeu com isso se isso não é verdade para a multiplicação de

números? (dica: se a é um número real e a 2 =0, então 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)

A =

− 1

1

1

0

,

b)

B =

2

1

5

3

,

c)

C =

1

2

0

0

3

0

0

3

5

,

d)

D =

 −

2

3

1

3

6

8

3

1

3

.

4. Gere uma matriz 8x8 e um vetor 8x1 com valores inteiros por

A=round(1 0*rand(8)), b=round(1 0*rand(8, 1 )),

(a)

Use flops para contar o números de operações com pontos flutuantes necessárias para resolver Ax=b usando a notação ‘\’.

(b)

Reajuste o flops para zero e resolva o sistema usando as operações com linhas da matriz de ar- gumentos [A b] (ex.: U=rref([A b])). A ultima coluna de U (chame-a de y) é a solução para o sistema Ax=b. Conte os flops necessários para obter o resultado.

(c)

Que metodo é mais eficiente?

(d)

As soluções x e y aparentam ser a mesma mas se olharmos com mais digitos veremos que não é 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 métodos é 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

A =

5

3

resolva as equações matriciais:

(a)

AX+B=C,

(b)

AX+B=X,

(c)

XA+B=C,

(d)

XA+C=X.

3

2

,

B =

6

2

2

4

,

C =

 − 6

4

2

3

,

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 é não inversível?

7.

Assuma A=round(10*rand(5)) e B=round(10*rand(5)). Compare os seguintes pares de números.

(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 então 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 estão em domínio. Pelo modelo eu posso tentar descrever em palavras o que eu vejo que está acontecendo a esses determinantes.

Matemática 4330/534 - # 2 Vetores, Pontos, Traçando Gráficos, Operações Hadamard, e Sprintf

1- Observações Preliminares

Maior parte do material nesta lição vem de um texto suplementar para o curso “Introducton to Sci- entific Computing” por C. Van Loan. O objetivo desta lição é introduzi-lo a vários meios de construção de vetores, funções de vetores, escrevendo loops “for”, construindo e traçando gráficos de funções. Vários exemplos de instruções são usados para motivar o material.

2- Lição 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 função f(x) é dado por y j =f(x j ). Traçando o gráfico de uma linha poli- gonal com os pontos (x j ,y j ), j=1,2,…,n então é dada uma aproximação para o gráfico de y=f(x) em [a,b].

2. Por exemplo no matlab podemos entrar com um vetor linha com três 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 expressão no Matlab o resultado vai definir x para ser o alinhado apropriadamente e depois mostrar o resultado na tela. Se você não quer mostrar o resultado simplesmente coloque no fim da linha um “ponto-e-vírgula”. Por exemplo, x=[10.1 20.2 30.3] vai deixar o x igual ao alinhamento mas vai suprimir a impressão e saída.

4. Daí x foi definido e pode ser mostrado qualquer hora simplesmente digitando x e [ENTER].

5. Para transformar um vetor linha de números reais x em um vetor coluna de números reais y simplesmente compute a transposta que é dada por uma “aspa simples” assim y=x’

6. Um gráfico de somente três termos poderia não ser tão informativa. E nós temos nos confron- tado com a necessidade de construir longos vetores. Nós 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 razão vamos primeiro introduzir uma noção de um “loop for”. A sintaxe neste caso simples poderia ser dado por

for j=1:11

x(j)=(j-1)/10;

end

Primeiro note o uso do % o qual é usado para adicionar comentários nos programas. O Matlab ignora tudo na linha que sucede o “símbolo de percentagem”. Depois você verá o primeiro uso da notação de “coluna”. A expressão

J=1:11

Produz um vetor com os índices

% para j indo de 1 até 11 % compute o j-ésimo termo % indicação de final

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 fácil que entrar cada elemento do vetor manualmente. Loops podem ainda serem usados para construir um vetor com valores de uma função. Vamos considerar a função

f(x)=sin(2πx).

Suponha que queremos construir um vetor y cuja a j-ésima entrada é f(x(j)). Então podemos es- crever for j=1:11

y(j)=sin(2*pi*x(j));

end

9. Para traçar o gráfico em ordem os vetores x versus y no Matlab digite plot(x,y)

10. No comando “for” abaixo nós dissemos a notação 1:11. Esta mesma notação pode ser usada para gerar x. Assim nós podemos escrever

x=0:.1:1

Mas genericamente, vetores de elmentos com espaços iguais podem ser gerados um formato ge- ral:

{número inicial} : {número de incremento} : {último número} Se o passo é 1 então o mesmo pode ser omitido {número inicial} : {último número} daí x=1:6 é o vetor x=[1 2 3 4 5 6]. Você também pode usar um incrementador negativo, se o primeiro número é menor que o último. Por exemplo

x=10:-1:1

constrói 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 programação.

12. Você também pode construir o vetor x abaixo usando o comando “linspace” ; LINSPACE vetor linearmente espaçado 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 espaçado Logspace(d1,d2) gera um vetor de 50 elementos logaritmica- mente espaçados 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 variáveis que estão sendo usadas no momento;

(b)

help

whos: Lista as variáveis seus tipos e tamanhos;

(c)

help

clear: Apaga todas a variáveis que estão presentes na memória;

(d)

help

for: Repete um bloco m número específico de vezes;

(e)

help

zeros: Cria uma matriz cuja todos os elementos são zeros;

(f)

help

ones: Cria uma matriz cuja todos os elementos são 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 eqüidistantes;

(k)

help

logspace: Cria um vetor de pontos logaritmicamente eqüidistantes;

(l) help elfun: Funções matemáticas elementares;

(m)help

plot: Cria um gráfico de uma variável por outra;

(n)

help

length: Retorna o tamanho de um vetor;

(o)

help

size: Retorna dois valores o número de linhas e de colunas de uma matriz;

14. Então, vamos voltar a traçar gráficos testar funções de notação de ponto. Você tem visto agora como nós podemos usar a notação de pontos, melhor do que laços de repetição, para criar veto- res. Isso é chamado vetorização . 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 função “sin” foi apicada a

elfun)

um vetor (ou matriz). De fato f é uma das funções construtoras o Matlab (veja help e A é uma matriz.

A =

a

a

a

11

21

"

n

1

a

a

12

22

"

a

n

2

$

$

#

!

a

a

1 n

2 n

a

"

nn

,

f

(

A

) =

f

f

f

(

(

(

a

a

"

a

11

21

n

1

)

)

)

f

f

f

(

(

(

a

a

"

a

12

22

n

2

)

)

)

$

$

#

!

f

f

f

(

(

(

a

a

"

a

1 m

2 m

nm

)

)

)

.

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 notação de pontos é usada no calculo de veto- res. É importante tentar usar esse conceitos o mais cedo possível pois ele facilitam muito a programação no Matlab. Aqui é outro exemplo. O objetivo é reduzir pela metade o número de

funções seno necessárias 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 nós 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)] então w=x(J) é o vetor w=[x(J(1)),…,x(J(k))].

18. Mais geralmente, considere a seguinte discussão para um matriz A nxm :

(a)

(b)

(c)

(d)

(e)

(f)

(g)

(h)

para obter o tamanho , número de linhas e colunas, digite [n,m]=size(A)

a iésima linha é A(i,:)

a jésima coluna é A(:,j)

se 1 i j n e 1 p q m, a passagem B=A(i:j,p:q) devolve a matriz

a

!

" #

ip

a

B =

a

a passagem B=A(1,p:q) devolve a matriz B=[a ip … a iq ]

a passagem B=A(i:j,p) devolve a matriz

a

jp

!

B =

a

a

ip

"

jp

iq

"

jq

a passagem B=A(i:j,:) retorna a matriz

B =

a

"

i

a

j

1

1

!

#

!

a

im

"

a

jm

a passagem B=A(:,p:q) devolve a matriz

B =



a

1

p

a

np

!

" #

a

1

q

"

nq

! a

19. Em ordem para produzir uma saída agradável de um cálculo você pode usar o comando sprintf (veja também fprintf para saída em um arquivo).

20. Nós só podemos considerar um breve desenvolvimento da sintaxe do sprintf (para um maior aprofundamento veja o manual de programação em C no tópico fprintf). A sintaxe básica 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 são simples citações. Isto consiste de algumas palavras e então o jeito da expressão %5.3f. Esta é uma parte crucial.

(b)

A expressão % é o marcador de ponto para uma variável (elas estão sempre listadas no final da string formatada) nesse caso é somente (1+sqrt(5))/2.

(c)

A próxima parte 5.3f são atualmente 3 partes:

(1) o 5 diz para ocupar exatamente cinco dígitos de espaço, (2) o .3 diz para mostrar 3 casas decimais (3) o f diz o formato específico (nivelado a direita).

22. Aqui está segundo exemplo:

disp(‘

disp(‘------------------------------‘) for n=1:10

disp(sprintf(‘ %3.0f

n

sum(1:n) n*(n+1)/2 ‘)

%5.0f

%5.0f’… ,n,sum(1:n)

,n*(n+1)/2;

end

23. Vamos considerar um exemplo onde nós começamos 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 avaliações 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á três variaveis para imprimir e elas tem três % partes

%2.0f

%3.0f

%6.3f

Note como o espaço entre os termos é determinado pelos espaços à esquerda dos três termos formatados. Seguindo isso vemos que aqueles três 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 variáveis são 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 expressão \n dá uma alimentação de linha.

26. O ultimo tópico desta lição vai ser o uso das operações Hadamard (ou “de ponto”). A multipli- cação .* ou divisão ./ ou exponenciação .^ de Hadamard são 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 número. 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 funções vetoriais que tem produtos de funções elementares.

27. Suponha por exemplo que você queira traçar o gráfico da função y=x.sen(x 2 ) no intervalo de [- 4,4]. Nós poderíamos 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 não é tão eficiente como

x=-4:.01:4;

y=x.*sin(x.^2);

plot(x,y)

28. Aqui é um exemplo final de múltiplos gráficos tirados de [2]. O novo ingrediente é usar o sub- gráfico para gerar múltiplas janelas de gráficos.

%

%

%

%

Script File Polígonos

Desenha o polígono 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

EXERCÍCIO 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) é construído 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ê também pode ver help

A1=fix(10*rand(6,4))

R1=A1(:,[4:-1:1])

fliplr.Aqui está um exemplo

(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) são automaticamente colocados iguais a 0.

9. Dado um intervalo (a,b) isto é muitas vezes útil para construir um partição consistindo de (n-1) in- tervalos desencaixados [x(j),x(j+1)] de tamanho 1/(n-1). Isto pode ser consumado usando a partição

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 traçar alguns gráficos no mesmo eixo você pode usar diversas aproximações:

(a)

Uma aproximação se não há muitos gráficos é usar um único comando plot listando cada gráfi- co como o exemplo seguinte

t=0:.025:1;

plot(t, sin(pi*t), t, sin(2*pi*t), … , t, sin(5*pi*t))

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

onde

n=length(t) é o tamanho de t. Vamos fazer no estilo Matlab

t=0:.025:1;

(b)

(c) Um terceiro método poderia construir uma matriz com os valores

{sin(

j

*

pi

* t ( k

)}

5, n

j

=

1,

k

=

1

lt=length(t);

A=(1:5)’*pi*t;

plot(t,sin(A))

11. Aqui é um exercício interessado em traçar uma função com assimptotas verticais. Trace a função

y =sec(x)=1/cos(x) no intervalo de –π/2 até 11π/2. Dica: o exemplo seguinte foi tirado de [2]:

% Traçando a Função 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 função 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 funções racionais

2

y

(

x

) =

x

y

(

x

) =

x

(

2

x

4)

4)

no intervalo [-6,6]. Dica: Aqui há um exemplo mostrando vários meios em que isto pode ser feito para

(

x 2

, e

y =

(

x

1) 2

(

x

1)(

x

3)

.

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 número maior que a precisão da máquina 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 traçando o gráfico 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

para imprimir uma tabela de valores interos k de 1 até 10 e os valores de

13. Use o comando sprintf

k 2 ,

uma tabela de valores interos k de 1 até 10 e os valores de 13. Use

(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