calc num a03 gr zbzmz 020909

28
Cálculo Numérico Sistemas de equações lineares Autores aula 03 DISCIPLINA Marcelo Gomes Pereira Roberto Hugo Bielshowsky Calc_Num_A03_RF_ZBZMZ_090909.indd Capa1 Calc_Num_A03_RF_ZBZMZ_090909.indd Capa1 02/09/09 09:52 02/09/09 09:52

Upload: bruno-lopes

Post on 15-Feb-2015

27 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Calc Num a03 Gr Zbzmz 020909

Cálculo Numérico

Sistemas de equações lineares

Autores

aula

03

D I S C I P L I N A

Marcelo Gomes Pereira

Roberto Hugo Bielshowsky

Calc_Num_A03_RF_ZBZMZ_090909.indd Capa1Calc_Num_A03_RF_ZBZMZ_090909.indd Capa1 02/09/09 09:5202/09/09 09:52

Page 2: Calc Num a03 Gr Zbzmz 020909

Todos os direitos reservados. Nenhuma parte deste material pode ser utilizada ou reproduzidasem a autorização expressa da UFRN - Universidade Federal do Rio Grande do Norte.

Divisão de Serviços Técnicos

Catalogação da publicação na Fonte. UFRN/Biblioteca Central “Zila Mamede”

Coordenadora da Produção dos MateriaisVera Lucia do Amaral

Coordenador de EdiçãoAry Sergio Braga Olinisky

Projeto Gráfi coIvana Lima

Revisores de Estrutura e Linguagem

Eugenio Tavares Borges

Janio Gustavo Barbosa

Thalyta Mabel Nobre Barbosa

Revisora das Normas da ABNT

Verônica Pinheiro da Silva

Revisores de Língua Portuguesa

Janaina Tomaz Capistrano

Kaline Sampaio de Araújo

Samuel Anderson de Oliveira Lima

Revisoras Tipográfi cas

Adriana Rodrigues Gomes

Margareth Pereira Dias

Nouraide Queiroz

Arte e Ilustração

Adauto Harley

Carolina Costa

Heinkel Hugenin

Leonardo Feitoza

Diagramadores

Elizabeth da Silva Ferreira

Ivana Lima

Johann Jean Evangelista de Melo

José Antonio Bezerra Junior

Mariana Araújo de Brito

Adaptação para Módulo Matemático

Joacy Guilherme de A. F. Filho

Governo Federal

Presidente da RepúblicaLuiz Inácio Lula da Silva

Ministro da EducaçãoFernando Haddad

Secretário de Educação a Distância – SEEDCarlos Eduardo Bielschowsky

ReitorJosé Ivonildo do Rêgo

Vice-ReitoraÂngela Maria Paiva Cruz

Secretária de Educação a DistânciaVera Lucia do Amaral

Secretaria de Educação a Distância- SEDIS

Pereira, Marcelo Gomes.

Cálculo numérico: matemática / Marcelo Gomes Pereira, Roberto Hugo Bielschowsky. – Natal, RN: EDUFRN, 2009.

260 p.

ISBN: 978 - 85 - 7273 - 521 - 6

Conteúdo: Aula 01 – Aritmética de ponto fl utuante; Aula 02 – Introdução ao Scilab; Aula 03 – Sistemas de equações lineares; Aula 04 – SEVs do n, bases e ajustes de modelos com quadrados mínimos; Aula 05 – Autovalores e valores singulares; Aula 06 – Valores singulares e erros numéricos ao resolver Ax=b; Aula 07 – Algoritmos e programação com o Scilab (Parte 1); Aula 08 – Algoritmos e programação com o Scilab (Parte 2); Aula 09 – Zeros de funções; Aula 10 – Interpolação polinomial; Aula 11 – Integração numérica; Aula 12 – Introdução numérica às equações diferenciais ordinárias.

1. Cálculo numérico. 2. Aritmética de ponto fl utuante. 3. Álgebra linear computacional. I. Bielschowsky, Roberto Hugo. II. Título.

CDD 519.4RN/UF/BCZM 2009/33 CDU 519.6

Calc_Num_A03_RF_ZBZMZ_090909.indd Capa2Calc_Num_A03_RF_ZBZMZ_090909.indd Capa2 02/09/09 09:5202/09/09 09:52

Page 3: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

1

2

3

1

Apresentação

Sistemas de equações lineares talvez constituam a ferramenta mais recorrente nas aplicações da matemática, sobretudo com o advento de computadores cada vez mais velozes. Aparecem, muito frequentemente, em problemas da ordem de centenas de

equações e variáveis, podendo chegar a centenas de milhões, em áreas tão diversas quanto tomografi a médica, sismologia, metereologia, redes neurais, tráfego aéreo, dinâmica de fl uidos etc. Em linhas gerais, ao discretizarmos um dado problema, estamos nos candidatando a encontrar sistemas de equações lineares pela frente. Nesta aula, trabalharemos com dois algoritmos implementados no Scilab e adequados para resolver sistemas de equações lineares de médio porte. De maneira vaga, pense num problema de médio porte, neste ano de 2009, como da ordem de até 5000 variáveis e equações, a depender do computador. Nos complementos desta aula, o aluno mais interessado encontrará na nossa página, no moodle, uma discretização para o problema da distribuição de temperatura numa chapa retangular condutora de calor, desembocando num sistema linear de algumas centenas de equações e variáveis. Num segundo complemento, você disporá de uma introdução a métodos iterativos, de modo a lhe dar uma idéia geral do que acontece com problemas de grande porte.

ObjetivosEstudar sistemas de equações lineares de médio porte, do ponto de vista numérico, com a ajuda do Scilab.

Traba lhar com a lguns comandos do Scilab destinados a manipular e resolver sistemas lineares.

Revisitar o método de Gauss-Jordan e a eliminação de Gauss, de forma a associar-lhes o que fazem os programas Scilab que os empregam.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo1Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo1 02/09/09 09:5202/09/09 09:52

Page 4: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

1. 2. 1. 2.

–1. 0. – 2. – 4.

2. 2. 0. 9.

1. 0. 1. 3.

2

Sistemas de equações lineares Se você puxar pela memória, provavelmente, se lembrará de inúmeras situações nas quais se

deparou com sistemas de equações lineares, ao resolver problemas de Física, Química, Geometria, Aritmética etc. Em geral, eram problemas com poucas variáveis e equações. Algo como:

⎧⎪⎪⎪⎪⎨⎪⎪⎪⎪⎩

x1 + 2x2 + x3 + 2x4 = 8−x1 − 2x3 − 4x4 = −72x1 + 2x2 + 9x4 = 15x1 + x3 + 3x4 = 5

(I)

Nas disciplinas de Álgebra Linear que cursou, você certamente deve ter percebido a importância de escrevê-lo na sua forma vetorial, ou seja, Ax = b. Ao digitar no prompt do Scilab A = [1, 2, 1, 2; –1 0 –2 –4; 2, 2, 0, 9; 1 0 1 3], b = [8; –7; 15; 5], ele devolverá, a menos de uma arrumadinha no layout:

−−> A = [1, 2, 1, 2; –1 0 –2 –4; 2, 2, 0, 9; 1 0 1 3] // Matriz dos coefi cientes de I

A =

−−> b = [8; –7; 15; 5] // Vetor dos termos independentes de I

b = 8.

–7.

15.

5.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo2Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo2 02/09/09 09:5202/09/09 09:52

Page 5: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Atividade 1

Atividade 2

3

Procure problemas de Física, Química, Geometria e Aritmética (pelo menos um de cada área), cujas soluções passam pela resolução de um sistema de equações lineares.

Trabalharemos, nesta aula, com dois comandos do Scilab para resolver numericamente sistemas lineares Ax = b. Começamos com o comando ‘\’, que programa o método de Gauss-Jordan visto em Álgebra Linear I. Na aula 7 (Programação com o Scilab I), teremos a oportunidade de discutir sua programação. O segundo, ‘linsolve‘ , usa o método dos valores singulares, que é bem mais robusto e cuja explicação precisará esperar pela aula 5 (Autovalores, valores singulares e sensibilidade de um sistema linear a dados).

Dê uma olhada nas aulas 3, 4 e 5 da disciplina Álgebra linear I, relativas a sistemas de equações lineares e preste especial atenção ao método de Gauss-Jordan. Em particular, reveja com carinho o algoritmo da eliminação de Gauss pois ele é uma espécie de “pau pra toda a obra” na álgebra linear numérica, sendo fundamental não apenas no algoritmo de Gauss-Jordan, mas também para achar bases de subespaços vetoriais, calcular determinantes, produzir a importante fatoração LU, a qual veremos ao fi nal desta aula, inverter matrizes etc.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo3Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo3 02/09/09 09:5202/09/09 09:52

Page 6: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

A =

⎡⎢⎣

1 1 1 11 −2 3 1

−5 −1 −1 0

⎤⎥⎦ e b =

⎡⎢⎣

32

−7

⎤⎥⎦

U =

⎡⎢⎣

1 1 1 1 31 −2 3 1 2

−5 −1 −1 0 −7

⎤⎥⎦−−−−−−−−−−→U2 ← U2 − U1

⎡⎢⎣

1 1 1 1 30 −3 2 0 −1

−5 −1 −1 0 −7

⎤⎥⎦

−−−−−−−−−−−→U3 ← U3 + 5U1

⎡⎢⎣

1 1 1 1 30 −3 2 0 −10 4 4 5 8

⎤⎥⎦ −−−−−−−−−−−−→U3 ← U3 + 4/3U2

⎡⎢⎣

1 1 1 1 30 −3 2 0 −10 0 20/3 5 20/3

⎤⎥⎦

4

Resolvendo Ax = b, via eliminação de Gauss

Em linhas gerais, numa primeira etapa, ao digitar x = A\b no prompt do Scilab, o programa Scilab aplica a eliminação de Gauss, utilizando apenas duas das chamadas operações elementares nas linhas da matriz aumentada [A, b], do sistema:

i) permuta de duas linhas;

ii) substitui uma linha pela soma dela mesma com um múltiplo de outra.

A eliminação de Gauss realizada pelo Scilab é ligeiramente diferente da que você viu na disciplina de Álgebra Linear, na medida em que não multiplica nem divide linhas por constantes. Permite, entre outras coisas, obter como subprodutos a importante fatoração LU de A, que veremos ao fi nal da aula, bem como o determinante de A para matrizes quadradas. A única desvantagem é que a matriz escalonada U, aqui obtida, não estará mais na forma escada reduzida e obrigará a resolver posteriormente um sistema triangular. Vamos ver um pouco como isso funciona no exemplo 1.

Exemplo 1 Vamos usar o método de Gauss-Jordan para resolver Ax =b, no caso

Solução

Para resolver Ax = b, inicialmente aplicamos a eliminação de Gauss na matriz ampliada = [A b], usando apenas a operação ii, apresentada no início desta seção, sem permutar linhas:

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo4Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo4 02/09/09 09:5202/09/09 09:52

Page 7: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Variações

A variante usualmente implementada em programas como o Scilab consiste em fazer uso também da permuta de linhas, de modo a usar como pivô sempre a maior entrada disponível, por razões de estabilidade numérica (vide atividade 3).

⎧⎪⎪⎪⎨⎪⎪⎪⎩

x1 + x2 + x3 + x4 = 3

− 3x2 + 2x3 = −1

203

x3 + 5x4 =203

⎧⎪⎪⎪⎨⎪⎪⎪⎩

x1 + x2 + x3 = 3

− 3x2 + 2x3 = −1

203

x3 =203

5

Obtemos um sistema linear equivalente, na forma escalonada:

Uma solução para este sistema pode ser obtida fazendo a variável livre x4 = 0 e resolvendo o

sistema triangular resultante. Resolvendo, de baixo para cima, o sistema triangular resultante:

Obtemos x3 = 1; x

2 = (–1 – 2x

3)/(–3) = 1 e x

1 = 3 – x

2 – x

3 = 1

Com pequenas variações, Scilab faz algo muito parecido ao digitarmos x = A\b no seu prompt. Ou seja, começa aplicando uma eliminação de Gauss para obter um sistema Ux =

–b, com as mesmas soluções que Ax = b e U na forma de uma escada. A segunda

etapa do algoritmo implementado no Scilab é bem mais rápida. Quando Ax = b tem solução, consiste em anular as variáveis livres e obter uma solução do sistema triangular resultante. Resolvendo o mesmo sistema do exemplo 1, usando o Scilab, obtemos o que vemos no exemplo a seguir.

Exemplo 2−−> A = [1 1 1 1; 1 –2 3 1; –5 –1 –1 0]; b = [ 3; 2; –7]; // Entradas do sistema

−−> x = A\b          // Procurando uma solução de A*x = b

1.

1.

1.

0

Testando a solução para verifi car se Ax – b ≈ 0

−−> teste = norm (A *x –b)/norm(b) // Testando a solução obtida

teste = 4.106D –16

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo5Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo5 02/09/09 09:5202/09/09 09:52

Page 8: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Atividade 3

sua

resp

osta

6

Observação 1 – No exemplo 2 nem precisávamos testar a solução obtida, pois coincidiu com a solução do exemplo 1. Mas, usualmente, é bom fazê-lo. Nunca é demais lembrar que estamos trabalhando com aritmética de ponto fl utuante e, portanto, obtendo aproximações numéricas das soluções de Ax = b. Ou seja, não podemos esperar soluções exatas do sistema. Inclusive, há casos nos quais os erros de arredondamento podem falsifi car completamente a solução do sistema, como teremos ocasião de verifi car na aula 5 e também no exercício proposto 2, ao fi nal desta aula. Portanto, é recomendável, sempre que possível, aplicar um teste para verifi car se obtivemos uma solução aceitável para Ax = b. Um teste relativamente simples consiste em verifi car se o erro Ax – b, às vezes também chamado de resíduo, cometido ao se admitir que x é a solução de Ax = b, resulta sufi cientemente perto de zero. Para tanto, calculamos a norma de A *x –b. Um resíduo na décima quinta casa decimal, como o obtido acima, é um bom resultado, já que trabalhamos com cerca de 16 algarismos signifi cativos.

O algoritmo da eliminação de Gauss escolhe, em cada coluna, um pivô, com o qual zera os elementos que estão abaixo dele. No caso do exemplo 1, preferimos não fazer nenhuma troca de linhas, o que é permitido, já que não apareceu nenhum zero na posição de pivô. Resultaram, ao fi nal, os números 1, –2 e 20/3 como pivôs. No Scilab, em cada iteração, sempre é escolhido o maior pivô possível, mediante troca de linhas, por razões de estabilidade numérica. Aplique o algoritmo da eliminação de Gauss à mesma matriz A dos exemplos 1 e 2, com a diferença de usar a possibilidade de permutar linhas, de modo a escolher como pivô sempre o maior elemento, em módulo, da coluna e disponível para tal, ou seja, o maior elemento, em módulo, da diagonal para baixo, na coluna do pivô em questão.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo6Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo6 02/09/09 09:5202/09/09 09:52

Page 9: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico 7

Caso Ax = b não tenha soluçãoQuando Ax = b não tem solução, x = A\b será uma solução da equação normal

ATAx =ATb, que você viu na aula 12 (Ortogonalidade) de Álgebra Linear I. Tal solução é denominada solução de quadrados mínimos de A e é, num certo sentido que discutiremos com mais detalhes na próxima aula, a “melhor solução possível”. Veja o exemplo a seguir.

Exemplo 3Tentando calcular a solução de um sistema Ax = b, que não tem solução.

−−> A = [1,2,3;4,5,6;7,8,9]; b = [1;0;0]

−−> x =A\b

Warning : matrix is close to singular or badly scaled. rcond = 1.5420D–18 computing least squares solution. (see lsq).

x = – 0.6666667

0.

0.5

−−> teste = norm(A*x–b)/norm(b)

teste = 0.4082483

−−>teste2 = norm(A'*A*x – A'*b)/norm(b)

teste2 =1.005D –14

Nesse caso, a matriz A não é invertível e o sistema Ax = b não tem solução. Como dissemos acima, x resulta ser uma solução de quadrados mínimos. Nesse caso, Scilab até que foi gentil e devolveu uma advertência (Warning), na qual afi rma que a matriz pode ser não-invertível (singular), e que o x devolvido é uma solução de quadrados mínimos (least squares solution). Teste 2 igualmente confi rma que ATAx –ATb ≈0.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo7Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo7 02/09/09 09:5202/09/09 09:52

Page 10: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Inversa de A no Scilab

Veja que dada uma matriz invertível A = An×n , se

X =Xn×n for a inversa de A, então, A*X = [AX(1), AX(2),...,AX(n)] = [I(1),

I(2), ..., I(n)], onde I(j)

representa a j-ésima coluna da identidade. Isso

signifi ca que cada coluna X(j) da inversa de A é a solução

de Ax = I(j). Para obter a inversa de A, Scilab

resolve, de uma maneira esperta, esses n sistemas

lineares, essencialmente por uma variante do

método de Gauss-Jordan, porém realizando uma

única eliminação de Gauss de A. Veja uma versão

desse procedimento nas páginas 9-11, da aula 4

de AL1 Ax = b

8

Cálculo de matrizes inversas e determinantes, usando eliminação de Gauss

Inversão de matrizesAs matrizes invertíveis são, necessariamente, quadradas e muito importantes na Álgebra

Linear (Dê uma espiadinha na parte fi nal da aula 4 – Justifi cativa do método Gauss-Jordan – AL1). Como você sabe, A=An×n é invertível se existir matriz X que com ela comute e tal que A*X = X*A = In×n. Em geral, a inversa é denotada por A–1. Matrizes invertíveis funcionam de forma análoga a números não nulos, no que diz respeito à multiplicação. Por exemplo, se A é invertível, então, o sistema Ax = b tem solução única x = A–1b. Dada uma matriz invertível A = An×n, inv(A) calcula a inversa de A no Scilab. Teríamos aí uma alternativa para resolver Ax = b, fazendo x = inv(A) *b. Por exemplo:

−−> A= [1 1 1 ; 1 –2 3 ; –5 –1 –1 ]; b = [3,2,–7];

−−> x = inv(A)*b, teste=norm(A*x–b)/norm(b),

x = 1.

1.

1.

teste = 5.64D–17

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo8Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo8 02/09/09 09:5202/09/09 09:52

Page 11: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Atividade 4

1

2

3

x = inv(A)*b

O número de operações gasto em x = inv(A)*b é mesmo ligeiramente acima do dobro do que é gasto para resolver x =A\b , sem oferecer muita coisa a mais, pois utiliza a mesma eliminação de Gauss usada em A\b, de modo a encontrar cada uma das n colunas de A–1. Só que de forma totalmente desnecessária, se o objetivo é resolver um único sistema Ax = b . Ainda por cima arriscando a aumentar os erros de arredondamento acumulados na solução de Ax =b.

9

Trabalhando com os comandos ‘rand ’ , ‘\’, ‘inv’ , ‘triu’ e ‘timer( ) ’, realize o que se pede a seguir.

Defi na, numa sessão do Scilab, as matrizes e vetores a seguir:

−−> n = 3

−−> Y = rand(n,n) // Matriz n×n, cujas entradas são nos aleatórios entre 0 e 1

−−> b =rand(n,1) // Vetor n×1, com entradas aleatórias entre 0 e 1

−−> U = triu(A) // Matriz triangular superior obtida com a parte superior de A

−−> c = rand(1,n–1) // Vetor 1×(n –1), com entradas aleatórias entre 0 e 1

−−> Z = Y ; Z(n,1:n) = c*Z(1:n –1,1:n)

Verifi que que Z é obtida de Y, substituindo sua última linha por uma combinação linear das (n –1) primeiras linhas de Y e explique por que isso se deu através dos comandos digitados. Resolva Yx = b, Ux = b e Z*x = b, tanto usando ‘ \’, como usando ‘inv ( )’. Teste os resultados e diga por que não conseguiu resolver Z*x = b

Faça o mesmo que no item 1, com n = 20 e depois com n = 200, n = 400, e n = 800, sem esquecer de por ‘ ; ’ depois de cada um dos comandos para não ter que ver matrizes enormes na sua tela.

O comando timer( ) diz quanto tempo de CPU foi gasto desde a última vez que foi digitado. Por exemplo, ao digitar timer( ), x = A\b ; timer( ), Scilab calcula x , e logo em seguida quanto tempo de processamento foi gasto na CPU para resolver x = A\b. Aproveite para testar o tempo de processamento gasto com cada um dos dois comandos. Veja que para n = 400 e n = 800, o tempo gasto em x = inv(A)*b é um pouco mais que o dobro do tempo gasto comx = A\b.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo9Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo9 02/09/09 09:5202/09/09 09:52

Page 12: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico10

DeterminantesO determinante é uma função de grande importância teórica, pois através dele pode-se

calcular volumes de paralelepípedos, encontrar soluções para sistemas de equações em termos literais, decidir se uma matriz é invertível ou não, em matemática exata, encontrar autovalores de uma matriz etc. Em aritmética de ponto fl utuante, o determinante pode ser muito traiçoeiro, como veremos na aula 5. Numericamente, ele é usualmente calculado como subproduto da eliminação de Gauss, usando as seguintes propriedades de determinantes que você viu na aula 2 – Determinantes – de Álgebra Linear I.

i. Permuta de duas linhas troca o sinal do determinante.

ii. Ao substituir uma linha de uma matriz A pela soma da referida linha com um múltiplo de qualquer outra linha, o determinante não se altera.

iii. Se U é uma matriz triangular det (U) = U11U

22...Unn.

Daí resulta que uma maneira prática de calcular o determinante de A é aplicar a eliminação de Gauss usando apenas as operações i e ii nas linhas de A, de forma a se obter uma matriz triangular superior U, linha equivalente a A. Com isso, obtém-se det(A) = ± det(U) = ± U

11U

22.....Unn,

onde o sinal é ‘+’ se o número de troca de linhas realizada na eliminação de Gauss for par e ‘–’, caso seja ímpar. Em linhas gerais, Scilab implementa esse método para calcular determinantes através do comando det( ).

−−>A = [1,2,3;4,5,6;7,8,9];

−−>det(A)

ans = 6.661D –16

Resolvendo Ax=b com linsolve(A,–b)

A atividade logo a seguir revisita sistemas nos quais temos mais de uma solução.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo10Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo10 02/09/09 09:5202/09/09 09:52

Page 13: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Atividade 5

11

Considere o sistema

{x1 − x2 + x3 = 0

−x1 + x2 + x3 = 0 e responda:

a) O que se pode dizer sobre a quantidade de suas soluções?

b) O que acontece quando tentamos resolvê-lo usando o comando ‘ \ ’?

c) O que foi encontrado com esse comando era esperado? É sufi ciente para defi nir todas as soluções do sistema?

Nossa segunda recomendação para resolver sistemas lineares é por meio do comando linsolve( ). Esse comando fornece soluções de uma equação do tipo Ax + b = 0. No nosso caso, devemos usar o vetor b com o sinal invertido.

−−> A = [1 1 1 ; 1 –2 3 ; –5 –1 –1 ]; b = [3,2,–7];

−−> x = linsolve(A,–b);

x = 1.

1.

1.

linsolve(A,–b) é bem mais seguro que A\b, na medida em que usa um método bem mais robusto para resolver Ax = b. Trata-se de um método que trabalha com os valores singulares de A, que trataremos na aula 5, e usaremos, entre outras coisas, para descrever como linsolve funciona. A contrapartida é que linsolve(A,–b) é muito mais lento que A\b.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo11Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo11 02/09/09 09:5202/09/09 09:52

Page 14: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico12

Em compensação, além de muito mais confi ável para resolver Ax = b numericamente, linsolve tem as seguintes propriedades:

quando o sistema Ax = b não tem solução, ele não calcula nada e avisa (warning:) que o sistema não tem solução;

você viu em Álgebra Linear que duas soluções diferentes de Ax = b diferem por uma solução da equação Ax = 0. Em particular, dada uma solução xp, as demais são da forma x

λ = xp + S*λ, onde S é uma matriz n×k, λ é k×1, e S*λ é uma solução geral

da equação homogênea Ax = 0. Uma maneira de obter uma tal matriz S é digitar [x,S] = linsolve(A,b), no prompt do Scilab.

Por exemplo, aplicando linsolve ao sistema do exemplo 3:

−−> A = [1,2,3;4,5,6;7,8,9]; b = [1;0;0];

−−> [x,S ]=linsolve(A,b)

WARNING: Confl icting linear constraints!

S = [ ]

x = [ ]

Ou seja, com um tal b, como Ax = b não tem solução, linsolve informa isso com uma WARNING ( ADVERTÊNCIA): “Restrições lineares confl itantes!”

Se agora fi zermos b = A(1:3:,3) + 2*A(1:3:,2), linsolve nos dará:

−−> A = [1,2,3;4,5,6;7,8,9]; b = 2*A( : ,2) + A( : ,3);

−−> [xp,S]=linsolve(A,b)

Linsolve(A,–b) acaba sendo algo da ordem de 60 a 80 vezes mais lento para resolver An×nx = b, com n entre 500 e 1000, do que A\b. O tempo gasto depende de cada computador, obviamente. No computador que estamos usando (com um processador Corel 2 Duo da Intel, de 2 processadores e relógio de 1.4 MHz cada), linsolve(A,–b) é processado em cerca de 3 segundos, para n = 500, enquanto A\b gasta da ordem de 0.05 segundos apenas, para ser executado. Teste num computador ao qual você tenha acesso, para ver quanto tempo de processamento cada um dos dois comandos gastará para resolver Ax = b, usando A = rand(n,n) e b = rand(n,1), com n = 500.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo12Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo12 02/09/09 09:5202/09/09 09:52

Page 15: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Atividade 6

sua

resp

osta

13

S = –0.4082483

0.8164966

– 0.4082483

xp = 0.5

1.

1.5

Isto signifi ca que a solução geral de Ax = b agora existe e será uma família a um parâmetro de soluções, neste caso descrita na forma

xλ = xp+S*λ

a) Ache λ, de tal forma que [0; 2; 1] = xλ, na solução acima, e explique por

que não é coincidência encontrar um tal λ.

b) Verifi que que α = {S} constitui uma base para N(A) = {x∈�3 | Ax = 0}.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo13Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo13 02/09/09 09:5202/09/09 09:52

Page 16: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico14

Exercício resolvido 1Suponhamos que uma determinada indústria química produza 6 compostos,

Pr1,Pr2,...,Pr6. Para produzi-los, além de água, usa-se seis tipos diferentes de substâncias como matéria prima. A Tabela 1 a seguir nos fornece, na sua i-ésima linha, a quantidade de cada uma das seis matérias primas, em toneladas, necessária para produzir uma tonelada do i-ésimo produto.

Tabela 1 – Matérias primas para produzir uma tonelada de composto i

MatPr1 MatPr2 MatPr3 MatPr4 MatPr5 MatPr6

Pr1 0.134 0.21 0.223 0.043 0.154 0.123

Pr2 0.232 0.144 0.154 0.246 0.124 0.024

Pr3 0 0 0.265 0.394 0.245 0

Pr4 0.121 0.025 0.142 0.21 0.354 0

Pr5 0.321 0.124 0.134 0.124 0.033 0.221

Pr6 0.213 0.112 0.21 0 0.12 0.372

1) Qual é a quantidade de cada uma das matérias primas necessária para produzir os compostos nas quantidades p

1 = 1.7, p

2 = 1.4, p

3 = 1.5, p4

= 1.5, p5 =1.7 e p

6 = 2.2,

medidos em toneladas?

2) E se alterarmos apenas a produção de p2, para p

2 = 1.5, isso faria sentido?

Solução

1) Designando o vetor de matérias primas por m = m6×1

e por p = p6×1

, o vetor dos compostos produzidos, cada linha da Tabela 1, nos dirá que:

0.134m1 + 0.21m

2 + 0.223m

3 + 0.043m

4 + 0.154m

5 + 0.123m

6 = 1.7

0.232m1 + 0.144m

2 + 0.154m

3 + 0.246m

4 + 0.124m

5 + 0.24m

6 = 2.2

Ou seja, temos que resolver o sistema A*m = p, onde

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo14Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo14 02/09/09 09:5202/09/09 09:52

Page 17: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

0.134 0.21 0.223 0.043 0.154 0.123

0.232 0.144 0.154 0.246 0.124 0.024

0.114 0. 0.265 0.394 0.245 0.

0.121 0.025 0.142 0.21 0.354 0.

0.321 0.124 0.134 0.124 0.033 0.221

0.213 0.112 0.21 0. 0.12 0.372

15

A = A6×6

=

Com linsolve, o vetor m das matérias primas necessárias é:

−−> m = linsolve(A,–p) ⇒ m = [ 1.537 1.693 1.735 0.624 2.525 2.729]

2) Com a alteração de p(2) = 1.4 para p(2) = 1.5, repetindo a conta acima, obteríamos, neste novo caso:

−−> m = linsolve(A,–p) ⇒ m = [–0.409 4.091 –.981 2.85 2.791 4.57]'

Portanto, precisaríamos de quantidades negativas da primeira e da terceira matérias primas, o que em princípio só faria sentido se pudermos interpretá-las como quantidades produzidas, em vez de como matérias primas propriamente ditas.

Exercício resolvido 2 (Interpolação polinomial e trigonométrica)

Considere os pontos A = ( 0, 2), B = (1,–2), C = (2,4) e D =(3,1), E = (4,3), F = (5,2).

1) Encontre um polinômio p(x), de grau 5, que interpole os 6 pontos dados. Ou seja, tal que os pontos A,B,C, D, E e F sejam pontos do gráfi co de p(x).

2) Encontre um “polinômio” de Fourier q(x) na forma

q(x) = a0 + a

1cos(w

0x) + a

2cos(w

0x) + b

1sin(2w

0x) + b

2sin(2w

0x)

que interpole os seis dados, considerando w0 = 2*π/5.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo15Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo15 02/09/09 09:5202/09/09 09:52

Page 18: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

⎧⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎩

c1 = 2c1 + c2 + c3 + c4 + c5 + c6 = −2c1 + 2c2 + c32

2 + c423 + c52

4 + c625 = 4

c1 + 3c2 + c332 + c43

3 + c534 + c63

5 = 1c1 + 4c2 + c34

2 + c443 + c54

4 + c645 = 3

c1 + 5c2 + c352 + c45

3 + c554 + c65

5 = 2

1. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1.

1. 2. 4. 8. 16. 32.

1. 3. 9. 27. 81. 243.

1. 4. 16. 64. 256. 1024.

1. 5. 25. 125. 625. 3125.

6

4

2

0

–2

–4

–60.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

16

Solução de 1 (Interpolação polinomial)

Se p(x) = c1 + c

2x + c

3x 2 + c

4x3 + c

5x 4 + c

6x 5 interpola os seis dados, isto signifi ca:

Ou seja, chegamos a um sistema C*x = b, fácil de escrever no Scilab, usando o vetor de abscissas dos dados, X = [0;1;2;3;4;5] e o vetor b, formado pelas ordenadas dos dados b.

−−> C = [ones(6,1) , X, X.⊥2, X.⊥3, X.⊥4, X.⊥5 ], b = [ 2; –2; 4; 1; 3; 2];

C =

Tentando linsolve para achar os coefi cientes de p, obteremos

−−> c= linsolve(F,–b); p = poly(c,'x','coefs')

p = 2 – 34.583333x + 52.541667x 2 – 27.458333x 3 + 5.9583333x 4 – 0.4583333x 5

Neste caso, uma boa maneira de checar a solução é visual, pedindo o gráfi co de p(x), junto com os dados armazenados em X e b. Para fazê-lo, discretizamos o domínio (0,5) na variável x. Usando ‘horner’, obtemos em y os correspondentes valores calculados com p.

−−> x = 0.:0.01:5.; y = horner(p,x); plot(x,y,'k–',X,b,'k*')

Figura 1 – Gráfi co da interpolação de seis dados a um polinômio de grau 5

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo16Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo16 02/09/09 09:5202/09/09 09:52

Page 19: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

⎧⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎩

c1 + c2 + c3 = 2c1 + c2 cos(w0) + c3 cos(2w0) + c4 sen(w0) + c5 sen(2w0) = −2c1 + c2 cos(2w0) + c3 cos(4w0) + c4 sen(2w0) + c5 sen(4w0) = 4c1 + c2 cos(3w0) + c3 cos(6w0) + c4 sen(3w0) + c5 sen(6w0) = 1c1 + c2 cos(4w0) + c3 cos(8w0) + c4 sen(4w0) + c5 sen(8w0) = 3c1 + c2 cos(5w0) + c3 cos(10w0) + c4 sen(5w0) + c5 sen(10w0) = 2

1. 1. 1. 0. 0.

1. 0.3090170 –0.8090170 0.9510565 0.5877853

1. –0.8090170 0.3090170 0.5877853 –0.9510565

1. –0.8090170 0.3090170 –0.5877853 0.9510565

1. 0.3090170 –0.8090170 –0.9510565 –0.5877853

1. 1. 1. –2.449D–16 –4.899D–16

17

Solução de 2 – (Interpolação trigonométrica)

Igual a antes, queremos que q(x) = c1 + c

2cos(w

0x) + c

3cos(w

0x) + c

4sin(2w

0x)

+ c5sin(2w

0x) interpole os seis pontos dados, com w

0 = 2*π/5, abscissas armazenadas

em X e ordenadas em b.

Analogamente a antes, temos aí um sistema F*c = b, onde a matriz F é dada por

−−> w0=2*%pi/5;F = [ones(6,1); cos(X*w0);cos(2*X*w0);sin(X*w0);

sin(2*X*w0)]

F =

Note que a matriz F= F6×5

, neste caso, tem a primeira e a sexta linhas iguais, a menos que haja erros de arredondamento. De fato, isso era previsível, pois a função q(x) é periódica de período 5, a primeira linha dá a equação F(1,:)*c = q(0)= b(1)=2, enquanto a última impõe a mesma equação F(6,:)*c = q(5) = b(6) = 2. Portanto, a última equação é, nesse caso, redundante e poderia até ser eliminada, resultando num novo sistema 5×5, com as mesmas soluções. Resolvendo com linsolve:

−−> c = linsolve(F,b)

c = 1.6

– 0.6944272

1.0944272

– 1.1967707

– 2.3168383

Do mesmo modo que antes, podemos gerar um gráfi co dessa interpolação:

−−> x = (0:.01:5)'; n = size(x,1); F1= ones(n,1);

−−> Fx = [F1, cos(w0*x), cos(2*w0*x),sin(w0*x),sin(2*w0*x)]; y = Fx*c

−−> plot(x,y,'k–',X,b,'k*')

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo17Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo17 02/09/09 09:5202/09/09 09:52

Page 20: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

5

4

3

0

2

1

–1

–2

–30.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

A =

⎡⎢⎣

1 1 1 1 31 −2 3 1 2−5 1 −1 0 −7

⎤⎥⎦ e obtivemos U =

⎡⎢⎣

1 1 1 1 30 −3 2 0 −10 0 20/3 5 20/3

⎤⎥⎦

18

Figura 2 – Interpolação dos dados a um “polinômio” de Fourier de ordem 2

Observação 2 – Não foi por acaso que as matrizes C e F resultaram invertíveis. A matriz da interpolação polinomial leva o nome de matriz de Vandermonde e é sempre invertível em matemática exata, embora numericamente problemática, à medida que n cresce, como você poderá constatar no problema proposto 2. Ambas as interpolações são muito importantes e retornarão de diversas formas nesta disciplina. A interpolação polinomial retornará na próxima aula, será o tema da aula 10 – Interpolação polinomial – e a base do método de integração numérica que trabalharemos na aula 11 – Integração. Já o método de interpolação trigonométrica tem a vantagem de ser numericamente bem mais estável, como teremos a oportunidade de ver na aula 5, dado o fato que as colunas da matriz F resultam ortogonais. Nos complementos da próxima aula, a utilizaremos para introduzir as famosas bases de Fourier discretas de �2n , tão importantes na análise de sinais.

Fatoração LU No exemplo 1, aplicamos a eliminação de Gauss à matriz

Para tanto, calculamos os multiplicadores das posições (2,1), (3,1) e (3,2), encontrando, respectivamente, 1, –5 e –4/3. Seriam perfeitamente descartáveis, uma vez obtida a matriz U , não fosse a seguinte “mágica”. Considere uma matriz triangular inferior L cuja diagonal principal é toda formada com Lii = 1 e cujas entradas Lij abaixo da diagonal são os respectivos multiplicadores, ou seja, L

21= 2, L

31 = –1, L

32=2. Resultaria

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo18Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo18 02/09/09 09:5202/09/09 09:52

Page 21: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Atividade 7

L∗U =

⎡⎢⎣

1 0 01 1 0−5 −4/3 1

⎤⎥⎦⎡⎢⎣

1 1 1 1 30 −3 2 0 −10 0 20/3 5 20/3

⎤⎥⎦=

⎡⎢⎣

1 1 1 1 31 −2 3 1 2−5 1 −1 0 −7

⎤⎥⎦= A

19

Agora, multipliquemos L por U. Resultará

L =

⎡⎢⎣

1 0 01 1 0−5 −4/3 1

⎤⎥⎦

Ou seja, obtivemos A = LU . Na verdade, essa “mágica” não só funciona sempre que o algoritmo da eliminação de Gauss chega a um bom termo sem troca de linhas e pode ser demonstrada, como tem um nome e é muito importante. Trata-se da fatoração LU, a qual tem inúmeras aplicações práticas e teóricas. Por exemplo, se queremos resolver um sistema Ax = b e sabemos que A= LU, não precisaremos aplicar de novo a eliminação de Gauss à matriz ampliada AAamp = [A b]. Podemos resolver inicialmente o sistema triangular inferior Lw =b e em seguida o triangular superior, Ux =w, pois se Ux =w e Lw = b, então:

Ax = LUx = L(Ux) = Lw = b

A vantagem é que L e U são agora sistemas triangulares. Como veremos na aula 7, a resolução de sistemas triangulares é muito mais barata computacionalmente que a eliminação de Gauss. Por exemplo, verifi que que se b = [1; –1; 2 ], ao resolver o sistema triangular inferior Lw = b, obteremos w =[1; –3; 9]'. Ao resolvermos Ux =w, obteremos x = [10; 3; –9]. Agora cheque que, de fato, A[10; 3; –9]' = b.

Trabalhando com matrizes de permutação

Defi ne-se como matriz de permutação uma matriz obtida da identidade, mediante trocas das posições de suas linhas entre si.

Considere a matriz de permutação P, obtida da identidade 4×4, trocando a segunda linha pela primeira, depois a quarta pela terceira. No Scilab:

−−> P = eye(4,4); aux = P( : ,1); P(:,1) = P(:,2);P(:,2) = aux;

−−> aux = P(:,3); P(:,3) = P(:,4); P(:,4) = aux.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo19Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo19 02/09/09 09:5202/09/09 09:52

Page 22: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

1

2

3

0. 0. 1. 0. 1. 0.

1. 0. 0.

–5. –1. –1. 0. –7

0. –2.2 2.8 1. 0.6

0. 0. 1.8181818 1.3636364 1.8181818

1. 0. 0.

– 0.2 1. 0.

– 0.2 –0.3636364 1.

20

Armazene P no Scilab e verifi que que PTP =PPT = I4×4

.

Considere uma matriz A = rand(4,4) e descubra que P*A resulta na mesma matriz A, porém com as linhas trocadas do mesmo jeito que foram trocadas as linhas de I

4×4 para se chegar a P.

Mostre que o resultado acima não foi uma coincidência. Ou seja, se P é uma matriz de permutação, então, PTP = In×n e P*A é a mesma A com as linhas trocadas do mesmo jeito que P, ao ser obtida da identidade.

Quando há permuta de linhas, considere a matriz à formada a partir das linhas permutadas na mesma sequência que o foram ao se processar a eliminação de Gauss. É essa matriz à que, agora, pode ser fatorada na forma Ã= L*U, onde U é a matriz triangular superior e L é uma matriz triangular inferior, com o número 1 na diagonal e multiplicadores, obtidos na eliminação de Gauss, na sua parte inferior. Contudo, os multiplicadores estarão agora com lugares trocados na matriz L. O comando lu do Scilab devolve as matrizes, L, U e P, se solicitadas. P é uma matriz de permutação (vide atividade 7). Ela é tal que à = P*A. No Scilab, com o comando lu, obtemos:

−−> A=[1 1 1 1; 1 –2 3 1; –5 –1 –1 0] ;

−−> [L,U,P]= lu(A);

P =

U =

L =

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo20Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo20 02/09/09 09:5202/09/09 09:52

Page 23: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

–5. – 1. – 1. 0.

1. – 2. 3. 1.

1. 1. 1. 1.

21

−−> P*A // Observe que o efeito de multiplicar P por A é o de trocar suas linhas

−−> L*U // Observe que obtivemos P*A = L*U, de fato

– 5. – 1. – 1. 0.

1. – 2. 3. 1..

1. 1. 1. 1.

Na verdade, como P é uma matriz ortogonal, ou seja, P'*P = I3×3

, a fatoração LU se escreve aqui como

A =(P'*P)*A = P'*(P*A) = P'*L*U  ⇒ A =P'*L*U

Observação 3 - Pode-se provar que toda matriz pode ser fatorada na forma

A = PTLU

onde P é uma matriz de permutação, L uma matriz triangular inferior, com 1 na diagonal e U uma matriz na forma escada. Em inglês, L vem de Lower, que signifi ca inferior, e U vem de Upper, que em inglês signifi ca superior. Até na França, que tem horror a qualquer tipo de concessão ao inglês, a designação fatoração LU colou. Esta é a primeira das quatro grandes fatorações da Álgebra Linear e resulta como subproduto da eliminação de Gauss.

ResumoNesta aula, você estudou dois comandos do Scilab para resolver sistemas de equações lineares, sendo também introduzida a fatoração LU de uma matriz. O primeiro deles implementa o algoritmo de Gauss-Jordan, um velho conhecido seu. O segundo deles, o ‘linsolve( )’, implementa um método que veremos na aula 5, mais confi ável numericamente e permite que se obtenha todas as soluções de Ax = b, caso haja mais que uma. Ao se familiarizar com os dois comandos do Scilab e com suas aplicações, você viu o quanto eles podem ser úteis para a resolução de problemas.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo21Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo21 02/09/09 09:5202/09/09 09:52

Page 24: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

1

2

3

4

22

AutoavaliaçãoVocê foi ao computador usar os comandos ‘\’ e linsolve para resolver sistemas lineares com os exemplos e atividades desta aula? Se não foi, faça-o. Se tiver difi culdades em usá-los, contate-nos sobre suas difi culdades.

O que o comando ‘\’ tem a ver com o algoritmo de Gauss-Jordan que você viu em Álgebra Linear I? Em que a eliminação de Gauss programada no Scilab difere da que foi apresentada em Álgebra Linear I?

Como você entendeu as principais diferenças entre linsolve(A,b) e A\b?

Resolva os exercícios propostos.

Exercícios propostos1) Verifi que no help do scilab o que faz o comando diag

a) Armazene em b, c e d vetores de ordem 6 , 5 e 3, respectivamente, com entradas aleatórias entre 0 e 1.

b) Usando o comando diag, armazene em A = A6×6

uma matriz simétrica cuja diagonal principal seja b, cujas paralelas à diagonal principal, logo abaixo e acima, sejam iguais a c, e as paralelas que estão situadas a 3 linhas abaixo e acima da principal valham d.

c) Resolva Ax = b, com os comandos ‘ \ ’ e ‘linsolve ‘. Teste o resultado.

d) Obtenha C, a partir de A, substituindo a quarta coluna de C pela soma das colunas de C anteriores a ela e tente resolver Cx = b, com linsolve. Teste para ver o que aconteceu e diga por que não deu para resolver Cx = b neste caso.

2) Usando o comando ‘linsolve’ do Scilab, de maneira análoga ao que fi zemos no exercício resolvido 2

a) Tente interpolar um polinômio do grau n por n+1 pontos de abscissas igualmente espaçadas entre –5 e 5, nos casos n = 5 e n = 15 e de ordenadas aleatórias entre 0 e 1.

b) Visualize o gráfi co do polinômio obtido, junto com os pontos a serem interpolados, em cada caso. Observe que o resultado foi satisfatório no caso n = 5, mas não no caso n = 15.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo22Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo22 02/09/09 09:5202/09/09 09:52

Page 25: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico 23

c) Calcule o resíduo deixado na solução de cada um dos problemas lineares correspondentes e compare-o com eventuais inadequações nos gráfi cos.

3) Comparando tempos de execução do Scilab

a) Digite stacksize(‘max’) no prompt do computador para que ele libere espaço para matrizes maiores e brinque um pouco com o comando timer( ) para testar tempos de execução do Scilab dos comandos A*C, inv(A)*b, A\b, A*b e norm(b). Obtenha A = An×n , C =Cn×n e b = bn×1

com o comando rand( ) de modo a descobrir uma intuição sobre a ordem de grandeza dos tempos de execução do Scilab para cada um dos 5 comandos acima. Teste valores de n mais altos que 200, pois abaixo disso os tempos dados por timer( ) acabam medindo mais o tempo de aquisição dos dados pela CPU do que propriamente o tempo de execução das operações numéricas, que é o que nos interessa.

b) Teste os tempos de CPU gastos em A*C, para n(1) = 200, n(2)= 400, n(3)=800 e n(4)=1600 (se seu computador tiver memória sufi ciente). Tente ver se consegue descobrir relações entre esses tempos, do tipo (n(i)/n(1))k, à medida que n(i) vai dobrando, onde k = 1, 2 ou 3. Faça o mesmo para cada um dos demais comandos inv(A), A\b, A*b e norm(b).

4) Faça X = rand(4,5), Y = XTX e peça a Scilab que calcule Z = inv(Y). Observe que, além de Scilab advertir que Y parece uma matriz não-invertível, Z resulta não ser mesmo a inversa de Y. Como você explica o fato que Y não ser invertível?

Referências FRANCO, Neide Bertoldi. Cálculo numérico. São Paulo: Pearson Prentice Hall, 2006.

LOPES, Jonas Gonçalves; PEREIRA, Marcelo Gomes. Álgebra Linear I. Natal: EDUFRN, 2006.

______. Álgebra Linear II. Natal: EDUFRN, 2007.

PIRES, Paulo Sérgio da Motta. Introdução ao Scilab: versão 3.0. Natal: Departamento de Engenharia de Computação e Automação; Universidade Federal do Rio Grande do Norte, 2004. (Disponível na página da nossa disciplina). Disponível em: <www.dca.ufrn.br/~pmotta/sciport-3.0.pdf>. Acesso em: 30 jan. 2009.

RUGGIERO, Márcia A. Gomes; LOPES, Vera Lúcia da Rocha. Cálculo numérico: aspectos teóricos e computacionais. São Paulo: Makron Books, 1996.

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo23Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo23 02/09/09 09:5202/09/09 09:52

Page 26: Calc Num a03 Gr Zbzmz 020909

Aula 03 Cálculo Numérico

Anotações

24

Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo24Calc_Num_A03_RF_ZBZMZ_090909.indd Miolo24 02/09/09 09:5202/09/09 09:52

Page 27: Calc Num a03 Gr Zbzmz 020909

2º S

emes

tre d

e 20

09Im

pres

so p

or: G

ráfi c

a

EMENTA

> Marcelo Gomes Pereira

> Roberto Hugo Bielschowsky

Erros. Interpolações. Mínimos quadrados. Zeros de funções Integração numérica. Resolução numérica de sistemas de equações lineares. Tratamento numérico das equações diferenciais ordinárias.

Cálculo Numérico – MATEMÁTICA

AUTORES

AULAS

01 Aritmética de ponto fl utuante e erros numéricos

02 Introdução ao Scilab

03 Sistemas de equações lineares

04 SEVs do n, bases e ajustes de modelos com quadrados mínimos

05 Autovalores e valores singulares

06 Valores singulares e erros numéricos ao resolver Ax=b

07 Algoritmos e programação com o Scilab – Parte I

08 Algoritmos e programação com o Scilab – Parte II

09 Zeros de funções

10 Interpolação polinomial

11 Integração numérica

12 Introdução numérica às equações diferenciais ordinárias

Calc_Num_A03_RF_ZBZMZ_020909.indd Contracp1Calc_Num_A03_RF_ZBZMZ_020909.indd Contracp1 23/10/09 14:3223/10/09 14:32

Page 28: Calc Num a03 Gr Zbzmz 020909

Calc_Num_A03_RF_ZBZMZ_090909.indd Contracp2Calc_Num_A03_RF_ZBZMZ_090909.indd Contracp2 02/09/09 09:5202/09/09 09:52