Roteiro para o Segundo Laboratório de Cálculo Numérico



Documentos relacionados
Roteiro para o Primeiro Laboratório de Cálculo Numérico

Cálculo Numérico Faculdade de Engenharia, Arquiteturas e Urbanismo FEAU

Estudaremos métodos numéricos para resolução de sistemas lineares com n equações e n incógnitas. Estes podem ser:

Resolução de sistemas lineares

Exercícios Teóricos Resolvidos

5 Equacionando os problemas

a 1 x a n x n = b,

O ESPAÇO NULO DE A: RESOLVENDO AX = 0 3.2

1. Introdução ao uso da calculadora

Conceitos Fundamentais

UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO PROGRAMA DE EDUCAÇÃO TUTORIAL - MATEMÁTICA PROJETO FUNDAMENTOS DE MATEMÁTICA ELEMENTAR

Tutorial de Matlab Francesco Franco

Informática no Ensino de Matemática Prof. José Carlos de Souza Junior

E A D - S I S T E M A S L I N E A R E S INTRODUÇÃO

Matemática - UEL Compilada em 18 de Março de Prof. Ulysses Sodré Matemática Essencial:

Dadas a base e a altura de um triangulo, determinar sua área.

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Conhecendo um pouco de matrizes e determinantes

Bem, produto interno serve para determinar ângulos e distâncias entre vetores e é representado por produto interno de v com w).

Título: Sistemas Lineares no CAp UFRJ: Interpretações Algébrica e Gráfica

O Excel é um programa de computador desenvolvido para gerenciar dados na forma de planilhas.

A equação do 2º grau

Matemática Financeira II

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

LINGUAGEM C UMA INTRODUÇÃO

Estruturas (Registros)

MESTRADO EM MACROECONOMIA e FINANÇAS Disciplina de Computação. Aula 04. Prof. Dr. Marco Antonio Leonel Caetano

Estrutura de Dados Básica

AMBIENTE DE PROGRAMAÇÃO PYTHON

2. Representação Numérica

Informática no Ensino da Matemática

Planilha Eletrônica Excel

Um jogo de preencher casas

[a11 a12 a1n 4. SISTEMAS LINEARES 4.1. CONCEITO. Um sistema de equações lineares é um conjunto de equações do tipo

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Aula 4 Estatística Conceitos básicos

Lista 1 para a P2. Operações com subespaços

Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano. Prof. Angelo Papa Neto

Equações do segundo grau

Introdução ao Matlab. 1 Algumas regras e comandos do Matlab. 3 de março de Docente Responsável : Prof. Dr. Antônio C. Roque

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Capítulo 7 Medidas de dispersão

Resumo da Matéria de Linguagem de Programação. Linguagem C

3 Resumo de dados com Tabelas e Gráficos dinâmicos

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

Como consolidar dados nas planilhas utilizando o comando CONSOLIDAR do Excel

Microsoft Access: Criar relatórios para um novo banco de dados. Vitor Valerio de Souza Campos

Como incluir artigos:

PARA CASA * Como voce faria para armazenar o resultado em uma variavel chamada NOME?

Prof. Dr. Iron Macêdo Dantas

Análise de Arredondamento em Ponto Flutuante

Lazarus pelo SVN Linux/Windows

Exercícios Adicionais

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

objetivo Exercícios Meta da aula Pré-requisitos Aplicar o formalismo quântico estudado neste módulo à resolução de um conjunto de exercícios.

Erros. Número Aproximado. Erros Absolutos erelativos. Erro Absoluto

JSP - ORIENTADO A OBJETOS

Aulas de PHP Criptografia com Cifra de César. Paulo Marcos Trentin

Sistemas Lineares no CAp UFRJ: Resolvendo Equações Matriciais no Excel

1 A Integral por Partes

Retas e Planos. Equação Paramétrica da Reta no Espaço

A FÓRMULA DE CONVERSÃO ENTRE AS UNIDADES É: F = 1.8 C

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

Calculando o desalinhamento da contraponta

Algoritmos de Busca em Tabelas

1. NÍVEL CONVENCIONAL DE MÁQUINA

Disciplina: Introdução à Álgebra Linear

Aula 2P - Comandos básicos do Matlab aplicados a PDS

Este material traz a teoria necessária à resolução das questões propostas.

Excel Planilhas Eletrônicas

Equações do primeiro grau

CURSO ONLINE RACIOCÍNIO LÓGICO

casa. Será uma casa simples, situada em terreno plano, com sala, dois quartos, cozinha, banheiro e área de serviço.

20 Caracteres - Tipo char

Arquitetura de Rede de Computadores

OPERADORES E ESTRUTURAS DE CONTROLE

Departamento de Matemática - UEL Ulysses Sodré. Arquivo: minimaxi.tex - Londrina-PR, 29 de Junho de 2010.

Planilha (2ª parte) Capítulo 15

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

MATRIZES Matriz quadrada Matriz linha e matriz coluna Matriz diagonal Matriz identidade

ÍNDICE... 3 INTRODUÇÃO A série... 4

Apresentando o Microsoft Excel

Contagem I. Figura 1: Abrindo uma Porta.

Exercícios 1. Determinar x de modo que a matriz

Método de Eliminação de Gauss. Eduardo Camponogara

Como-Funciona-Banco-Damus-Excel-Com-VBNet-Em-3-Idiomas

Inventario de produtos

A interpretação gráfica e o ensino de funções

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

Sistemas lineares. Ricardo Biloti 2S/2015. Cálculo Numérico UNICAMP.

Sistemas Lineares e Escalonamento

Operador de Computador. Informática Básica

Álgebra Linear. Mauri C. Nascimento Departamento de Matemática UNESP/Bauru. 19 de fevereiro de 2013

Curso de Programação Computadores

NOVIDADES DO JAVA PARA PROGRAMADORES C

Microsoft Excel 2003

Transcrição:

Roteiro para o Segundo Laboratório de Cálculo Numérico Prof. Dr. Waldeck Schützer May 7, 8 Nesta segunda aula de laboratório, vamos aprender a utilizar o MatLab/Octave para resolver sistemas lineares. Para isso, vamos precisar aprender como digitar matrizes e vetores, assim como aprender como realizar operações entre eles. Vamos trabalhar com o Octave, mas como o que faremos aqui é apenas o básico, certamente poderíamos realizar o mesmo trabalho usando o MatLab sem fazer nenhuma modificação nos comandos. A vantagem de usar o Octave é que esse é um programa de código aberto e pode ser utilizado livremente por qualquer pessoa. Assim como na aula anterior, vamos abrir o programa Octave, clicando sobre o seu ícone na área de trabalho. Uma janela exibindo as mensagens abaixo deve aparecer: GNU Octave, version.1.73 (i486-pc-linux-gnu). Copyright (C) 6 John W. Eaton. This is free software; see the source code for copying conditions. There is ABSOLUTELY NO WARRANTY; not even for MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, type warranty. Additional information about Octave is available at http://www.octave.org. Please contribute if you find this software useful. For more information, visit http://www.octave.org/help-wanted.html Report bugs to <bug@octave.org> (but first, please read http://www.octave.org/bugs.html to learn how to write a helpful report). octave:1> Recordem que a última linha, exibindo octave:1>, informa que o programa está pronto para receber comandos, e por isso chamamos essa sentença de prompt, em referência ao estado de prontidão do programa. Qualquer coisa que digitarmos no prompt será interpretado como um comando ou como uma expressão matemática. 1. Matrizes e vetores Nosso primeiro passo será digitar algumas matrizes. Suponha que você deseje informar ao Octave a seguinte matriz: 15 3 A = 7 1 1 5 Para isso basta digitar o comando: octave:1> A = [15 3; - 7 ; 1 1 5] A = 15 3-7 1 1 5 octave:> Os elementos individuais dessa matriz são referidos do seguinte modo: octave:> A(1,1) 15 octave:3> 1

Esse comando obteve o valor do elemento que está na primeira linha e primeira coluna da matriz. A forma geral é: A(i, j) onde i é o número da linha e j o número da coluna. Podemos realizar diversas operações com matrizes. Por exemplo, para calcular a transposta de A, basta usar o apóstrofo: octave:3> A 15-1 7 1 3 5 octave:4> Entre várias coisas, podemos encontrar o determinante de A. Digite: octave:4> det(a) 15. octave:5> Vemos que essa matriz é não-singular. Vamos agora digitar um vetor: octave:5> b = [37-5 5] b = 37-5 5 octave:6> Isso define um vetor-linha b. Para torná-lo um vetor-coluna podemos usar o apóstrofo: octave:6> b 37-5 5 octave:7>. Eliminação de Gauss Considere o sistema linear Ax = b, onde A é a matriz que você digitou e b é o vetor acima. Como a matriz A é não-singular, esse sistema linear é possível e determinado. Vamos usar eliminação de Gauss para encontrar sua solução. Mas, como sabemos, a aritmética do Octave não é exata, logo devemos usar eliminação de Gauss com pivotamento parcial. Antes de começarmos, vamos encontrar a matriz aumentada desse sistema. O comando para isso é o seguinte: octave:7> [A b ] 15 3 37-7 -5 1 1 5 5 octave:8> Esse comando concatena duas matrizes, mas note que usamos b ao invés de b, pois caso contrário, o resultado seria este: octave:8> [A b] error: number of rows must match (1!= 3) near line 19, column 5 octave:8> O Octave não pode concatenar a matriz A e o vetor-linha b pois as dimensões 3 3 de A e 1 3 de b não são compatíveis. Se quizéssemos acrescentar b abaixo da última linha de A, então poderíamos escrever: octave:8> [A; b] 15 3-7 1 1 5 37-5 5 octave:9>

que resulta em uma matriz 4 1. Agora vamos aplicar a eliminação de Gauss à matriz aumentada 15 3 37 7 5. 1 1 5 5 Passo 1. O primeiro pivô é C(1, 1) = 15. Vamos zerar abaixo do primeiro pivo. Para zerar a posição C(, 1), calculamos o multiplicador: octave:9> m1=-c(,1)/c(1,1) m1 =.13333 octave:1> Note que o Octave trabalha internamente com a precisão máxima permitida pelo hardware, mas por padrão trabalha no formato short e exibe apenas 5 dígitos. Agora queremos multiplicar a primeira linha por m 1 e somar o resultado à segunda linha. Como podemos fazer isso? Talvez o Octave tenha um comando para essa finalidade, mas vamos exercitar um pouco nossos conhecimentos sobre programação. No laboratório anterior, construímos laços usando o comando for. Para obter o resultado desejado, podemos fazer um laço como este: octave:1> for j=1:4 > C(,j)=C(,j)-m1*C(1,j); > endfor octave:11> Para ver o resultado, simplesmente digite: octave:11> C 15.. 3. 37.. 7.6667.4 -.6667 1. 1. 5. 5. octave:1> Notou algo de diferente nos números exibidos? É que antes dessa operação, todos os elementos da matriz eram interios e estes são armazenados internamente como tais na memória do Octave. Após a operação acima, alguns números passaram a ser representados em ponto flutuante e o Octave se viu obrigado a transformar todos os elementos em ponto flutuante, pois todos os elementos de uma matriz devem ser do mesmo tipo. Agora devemos zerar também o elemento em C(3, 1). Mas antes, vamos criar uma função para realizar a operação elementar L i L i +m ij L j, apenas mudando um pouco o laço que construímos acima. É um momento para recordarmos como se definem funções: octave:1> function E=soma linha(a,j,i,m) > E = A; > n = size(a)(); > for k=1:n > E(i,k)=E(i,k)+m*E(j,k); > endfor > endfunction octave:13> Agora vamos calcular o multiplicador para a linha 3 e usar essa função para zerar C(3, 1): octave:13> m31=-c(3,1)/c(1,1) m31 = -.66667 octave:14> Pois bem, nossa função soma linha deve usar i = 3, j = 1 e m = m 31. Então escrevemos: octave:14> soma linha(c,1,3,m31) 15.. 3. 37.. 7.6667.4 -.6667. 8.66667 3..33333 octave:15> 3

Isso é exatamente o que queríamos. Faltou apenas guardar o resultado de volta na matriz C: octave:15> C=soma linha(c,1,3,m31) 15.. 3. 37.. 7.6667.4 -.6667. 8.66667 3..33333 octave:16> Com isto completamos o primeiro passo. Passo. O segundo pivô é C(, ) = 7.6667. Esse elemento não é o maior em módulo, logo devemos trocar a segunda com a terceira linha. Vamos escrever uma função para trocar linhas, isto é, realizar a operação elementar L i L j. Isso não é difícil: octave:16> function E=troca linha(a,i,j) > n=size(a)(); > E=A; > for k=1:n > E(i,k)=A(j,k); > E(j,k)=A(i,k); > endfunction octave:17> Usando a função troca linha, vamos trocar as linhas e 3: octave:17> troca linha(c,,3) 15.. 3. 37.. 8.66667 3..33333. 7.6667.4 -.6667 octave:18> Este é o resultado esperado, mas outra vez esquecemos de guardar o resultado de volta em C. Aliás isso foi muito bom, pois acabamos de definir a função e talvez ela contivesse erros que estragariam o resultado. É sempre bom verificar antes! octave:18> C=troca linha(c,,3) 15.. 3. 37.. 8.66667 3..33333. 7.6667.4 -.6667 octave:19> Agora sim. O pivô C(, ) = 8.66667 está correto e podemos usá-lo para zerar o elemento C(3, ). Para isso calculamos o multiplicador m 3 : octave:19> m3=-c(3,)/c(,) m3 = -.83846 octave:> Em seguida usamos a função soma linha: octave:> C=soma linha(c,,3,m3) 15.. 3. 37.. 8.66667 3..33333.. -.11538 -.34615 octave:1> Este é o fim do passo e a nossa matriz agora se encontra na forma escada. Esta é a matriz aumentada de um sistema linear escalonado e podemos facilmente calcular o valor de cada variável. Vamos escrever uma função usando as fórmulas vistas na sala de aula: 4

x i = (C in n 1 k=i+1 C ik x k )/C ii, para i = n, n 1,... 1. Aqui estamos usando os elementos da matriz aumentada C, lembrando que os elementos na coluna-n são os termos constantes do sistema escalonado e os coeficientes estão nas colunas de 1 a n 1. Na linguagem do Octave, podemos escrever: octave:1> function x=resolve L(A) > [m n]=size(a); > x=zeros(m,1); > for j=m:-1:1 > x(j)=a(j,n); > for k=j+1:n-1 > x(j)=x(j)-a(j,k)*x(k); > x(j)=x(j)/a(j,j); > endfunction octave:> A função resolve L encontra a solução de um sistema linear escalonado, isto é, quando a sua matriz de coeficientes for triangular superior. Vamos usá-la para encontrar a solução do nosso sistema: octave:> x=resolve L(C) x =. -1. 3. octave:3> Note que a função resolve L nos devolveu o vetor-coluna: x =. 1. 3. que parece ser a solução do sistema. Para verificar isso, podemos multiplicar a matriz A com o vetor coluna x, obtendo Ax. Se x for a solução, Ax deve ser igual a b. Para fazer essa multiplicação de matrizes, basta escrever simplesmente: octave:3> A*x 37-5 5 octave:4> Vemos que este vetor é igual a b e portanto x é de fato solução do nosso sistema. Exercício: escreva uma função que realize o escalonamento com pivotamento parcial. Os passos já foram delineados acima! Dica: escreva uma função procura pivo(a,i) que devolve o número da linha contendo o maior elemento em módulo abaixo do i-ésimo pivô. 3. Método Iterativo de Gauss-Seidel Suponha que queiramos resolver o sistema linear Ax = b onde A = 1 1 1 1 1 1 1 e b =. 5

Note que estas matrizes tem vários elementos iguais a zero, e portanto os métodos iterativos são bons candidatos aqui. No entanto, vemos que a matriz A não é estritamente diagonalmente dominante logo não satisfaz o critério das linhas (veja, por exemplo, a segunda linha). Além disso, o critério das colunas também não está satisfeito, logo não temos garantia de convergência pelo o método de Jacobi-Richardson. Vamos então verificar se é possível usar o método de Gauss-Seidel. Vamos começar digitando as matrizes: octave:4> A=[ ; 1 1 ; 1 1 ; 1-1] A = 1 1 1 1 1-1 octave:5> b=[; ; ; ] b = octave:6> Já que temos a função determinante, vamos usá-la para calcular o determinante de A: octave:6> det(a) - octave:7> Agora sabemos que o sistema é possível e determinado, mas será que satisfaz o critério de convergência de Sassenfeld? Vamos escrever uma função que calcula o vetor β = [β 1, β,..., β n ], onde β i = i 1 j=1 a ij a ii β j + n j=i+1 a ij a ii para i = 1,,..., n. Sabemos que se todos esses números forem estritamente menores do que 1 o método de Gauss-Seidel será convergente. octave:7> function beta=sassenfeld(a) > [m n]=size(a); > beta=zeros(m,1); > for i=1:m > for j=1:i-1 > beta(i)=beta(i)+abs(a(i,j))/abs(a(i,i))*beta(j); > for j=i+1:n > beta(i)=beta(i)+abs(a(i,j))/abs(a(i,i)); > endfunction octave:8> Você consegue identificar nesta seqüência de comandos o cálculo da formula apresentada acima para os β i? Usando a função sassenfeld, podemos escrever: octave:8> beta=sassenfeld(a) beta =..5.5.5 octave:9> Como todos os β i são estritamente menores do que 1, vemos que o método de Gauss-Seidel deverá convergir. Para calcular as aproximações, vamos precisar escrever uma função de iteração que calcule as fórmulas de iteração do Gauss-Seidel. Aqui está ela: 6

octave:9> function y=phi(a,b,x) [m n]=size(a); y=b; for i=1:m for j=1:i-1 y(i)=y(i)-a(i,j)*y(j); endfor; for j=i+1:n y(i)=y(i)-a(i,j)*x(j); endfor; y(i)=y(i)/a(i,i); endfor; endfunction octave:3> Vamos precisar também de um critério de parada. Como calcular o erro relativo entre duas aproximações sucessivas. Felizmente a norma do máximo é facil de calcular. Primeiro usamos a função abs para calcular o valor absoluto dos elementos do vetor. Em seguida usamos a função max para encontrar o maior desses números: octave:3> function y=norma max(v); y=max(abs(v)); endfunction octave:31> Vamos experimentar: octave:31> norma max([1-1..5 -.]) 1. octave:3> Que tal? Agora é fácil criar uma função que calcula o erro relativo: octave:3> function y=er(a,b); y=norma max(a-b)/norma max(a); endfunction octave:33> Fazendo as iterações. Vamos partir de x () = [,,, ] e calcular iterações até que o erro relativo seja inferior a ε =.5 1 1 =.5. Passo 1. Passo. Passo 3. octave:33> x=[;;;]; octave:34> x1=phi(a,b,x) x1 = 1. -.5.5-1.5 octave:35> er(x1,x) 1 octave:36> octave:36> x=phi(a,b,x1) x = 1. -.75.75-1.5 octave:37> er(x,x1). octave:38> 7

Passo 4. Passo 5. octave:38> x3=phi(a,b,x) x3 = 1. -.875.875-1.15 octave:39> er(x3,x).11111 octave:4> octave:4> x4=phi(a,b,x3) x4 = 1. -.9375.9375-1.65 octave:41> er(x4,x3).5884 octave:4> octave:4> x5=phi(a,b,x4) x5 = 1. -.96875.96875-1.315 octave:43> er(x5,x4).333 octave:44> Neste ponto podemos parar, pois já atingimos a precisão desejada. A resposta é x (1, 1, 1, 1) com erro inferior a.5 1 1. De fato, verificamos que: octave:44> x=[1; -1; 1; -1]; octave:45> A*x octave:46> E assim, verificamos que nossa resposta é uma boa aproximação para a solução desse sistema. De fato encontramos a solução exata! mas é preciso ser muito cauteloso por estarmos trabalhando com números aproximados. Final da Áula de Laboratório. Espero que todos tenham gostado! 8