Baixe o app para aproveitar ainda mais
Prévia do material em texto
INSTITUTO FEDERAL DE EDUCAÇÃO TECNOLÓGICA Av. Jerônimo Figueira da Costa, 3014 - Bairro Pozzobon. CEP 15503-110 - Votuporanga - SP www.ifsp.edu.br ENGENHARIA CIVIL: NOTAS DE AULA CÁLCULO NUMÉRICO Prof. Msc. Gustavo Cabrelli Nirschl Dezembro de 2015 Agradecimentos: Carlos Eduardo Alves da Silva - Técnico de TI do Campus Fernando Parreira - Técnico de TI do Campus Isabela Cassia Dominical Parra – orientada de iniciação científica relacionada aos assuntos desta apostila (2015 e 2016) e discente da 1ª turma do curso de Engenharia Civil Marcelo Yugi Nomoto – ajudou nos meus primeiros passos na programação web PROVAS E TRABALHOS DA DISCIPLINA 1º BIMESTRE: Media1 = (Prova1 * 0,7) + (Trabalhos1 * 0,3) 2º BIMESTRE: Media2 = (Prova2 * 0,7) + (Trabalhos2 * 0,3) MÉDIA = (Media1 + Media2) / 2 SE 4,0 MÉDIA < 6,0 RECUPERAÇÃO FINAL CRITÉRIOS DE APROVAÇÃO FREQUENCIA ≥ 75% E MÉDIA FINAL ≥ 6,0 SOBRE ESTAS NOTAS DE AULA Estas notas de aula foram escritas, a partir de 2015, com base em outras bibliografias e na experiência acumulada do professor, para a disciplina de Cálculo Numérico do curso de Engenharia Civil do IFSP campus Votuporanga. Elas são constantemente revisadas tentando atender às mudanças necessárias decorrentes de possíveis erros e necessidades dos alunos não identificadas previamente. Por isso é importante o aluno estar com a revisão mais recente e não reutilizar materiais de turmas anteriores. Lembra-se ao aluno que essas notas de aula não substituem os livros em hipótese alguma. BIBLIOGRAFIA COMPLEMENTAR BARROSO, L.C. et al. Cálculo numérico: com aplicações. 2.ed. São Paulo: Harbra, 1987. LIPSCHUTZ, S. Álgebra Linear. 3.ed. São Paulo: Pearson, 1994. FARRER, H. et al. Pascal estruturado. 3.ed. Rio de Janeiro: LTC, 1999. FORBELLONE, A.L.; EBERSPACHER, H.F. Lógica de programação. 3.ed. São Paulo: Prentice Hall, 2005. RUGGIERO, M.A.G; LOPES, V.L.R. Cálculo numérico: aspectos teóricos e computacionais. 2.ed. São Paulo: Makron Books, 1996. SALIBA, L.W. Técnicas de programação: uma abordagem estruturada. São Paulo: Makron Books,1993. GUIDORIZZI, H.L. Um curso de cálculo. v.2. 5.ed.Rio de Janeiro: LTC, 2001. GUIDORIZZI, H.L. Um curso de cálculo. v.3. 5.ed.Rio de Janeiro: LTC, 2001. LEITURA OBRIGATÓRIA: O QUE IMPORTA É O CONHECIMENTO E A COMUNICAÇÃO Caro estudante, o professor tem o dever não só de te passar conhecimento, mas de fazer você aprender a aprender. Isso é o que um bom professor deve ter como objetivo. Para isso, o professor te direciona aos estudos e avalia a tua evolução por meio das notas. E elas podem ser cruéis: são um número que não percebe se você está com problemas familiares, pessoais, de saúde. Naquele dia de avaliação você tem que ter aquele conteúdo na cabeça, ou o número será baixo! É o sistema! Você tem que se adequar! Como um futuro profissional, saiba avaliar a tua própria nota, individualmente, considerando o que está acontecendo com todo o resto da tua vida naquele momento. Se não for por preguiça de estudar, não se martirize e nem culpe o professor. Apenas refaça os estudos, repita o processo. Isso é a repetência! Isso não é vergonha! Quando você entrar no mercado de trabalho, o contratante irá te entrevistar para tentar perceber se você o ajudará a lucrar e a desenvolver a empresa, mesmo que não de imediato, mas num futuro próximo. Então ele irá tentar ver o que você sabe fazer, se aquilo é suficiente para tocar os trabalhos da empresa. Ele pode até querer ver tuas notas, mas elas não serão mais importantes do que o teu conhecimento adquirido. Hoje em dia ninguém consegue trabalhar isoladamente, sozinho num canto. Os grandes projetos exigem trocas de conhecimento entre diversas áreas, cooperação. É a multidisciplinaridade! Então as corporações irão gostar do teu trabalho se você souber se comunicar oralmente e de forma escrita. Se falar inglês, será um profissional diferenciado! Porque é bonito saber inglês? Não, porque os grandes projetos exigirão informações e estudos em inglês, terão contato com pessoas internacionais, e até serão executados em outros países. Saber escrever é mera formalidade? Também não! Você precisará de muitas pessoas para executar aquilo que está na tua cabeça e se você conseguir dizer a elas exatamente como deve ser feito, o projeto ficará bom. Não adianta saber tudo e não ter a chave da porta que leva tudo isso pro mundo exterior: a comunicação oral e escrita! Então, meu amigo e aluno, estude sim a técnica, e muito, mas estude português e inglês, no mínimo. Comunique-se com os colegas, não por amizade somente, mas para dar e receber novas informações a cada dia. Isso sim te levará a ser um ótimo Engenheiro Civil! Bons estudos! Prof. Gustavo Cabrelli Nirschl SUMÁRIO 1 MÉTODOS NUMÉRICOS NA SOLUÇÃO DE PROBLEMAS .................................. 6 2 INTRODUÇÃO À TEORIA DE ERRO E ESTABILIDADE ....................................... 9 3 SISTEMAS DE EQUAÇÕES LINEARES ............................................................... 14 4 CÁLCULO DE DETERMINANTES DE MATRIZES ............................................... 50 5 MATRIZ INVERSA ................................................................................................. 52 6 ZEROS DE FUNÇÕES........................................................................................... 56 7 FUNÇÕES DE INTERPOLAÇÃO DE DADOS ...................................................... 66 8 FUNÇÕES DE APROXIMAÇÃO DE DADOS ........................................................ 76 9 INTEGRAÇÃO NUMÉRICA DE FUNÇÕES ........................................................... 87 10 DERIVAÇÃO NUMÉRICA DE FUNÇÕES ........................................................... 93 11 SOLUÇÃO DE EQUAÇÕES DIFERENCIAIS ...................................................... 99 12 CONSIDERAÇÕES FINAIS ............................................................................... 112 13 REFERÊNCIAS BIBLIOGRÁFICAS .................................................................. 113 APÊNDICE A - INTRODUÇÃO À PROGRAMAÇÃO EM LAZARUS/PASCAL ..... 115 APÊNDICE B - INTRODUÇÃO À PROGRAMAÇÃO EM HTML/JAVASCRIPT .... 122 APÊNDICE C - PUBLICAÇÃO DO SITE NO GITHUB ........................................... 128 6 1 MÉTODOS NUMÉRICOS NA SOLUÇÃO DE PROBLEMAS Segundo Quadros e Bortoli (2009), a maioria dos problemas da matemática é originária da necessidade de resolver situações da natureza. Numa primeira etapa, tem-se que obter um modelo matemático que representa de maneira conveniente um problema a ser analisado. Obtido o modelo matemático, procura-se encontrar a sua solução. Os mesmos autores citam que, quando se quer resolver um problema em engenharia, deve-se ter em mente o modelo que representa a situação física. Tal modelo é transformado em equações matemáticas (modelo matemático) que serão resolvidas por métodos analíticos ou por métodos numéricos. Como muitas situações não têm solução analítica ou a solução analítica é de difícil implementação computacional, os métodos numéricos se tornam a alternativa mais econômica em comparação à possibilidade de experimentação em laboratório. Este é um dos escopos do CÁLCULO NUMÉRICO. Outro objetivo é a programação computacional. Um exemplo importante é o cálculo de uma integral, frequentemente necessário em problemas da Engenharia Civil. Abaixo seguem duas integrais que têm solução analítica,ou seja, resolve-se substituindo a variável na solução por um número: Porém, existem integrais de funções que não têm solução analítica. Por exemplo, seja a integral de uma função f(x) no domínio a,b, que se quer resolver numericamente: Um dos métodos numéricos possíveis consiste em resolver a função f(x) em alguns pontos e somar as áreas sobre a curva da função, já que a integral nada mais é do que esse somatório: Figura: Área sobre a curva f(x) aproximada por um trapézio. Fonte: Quadros e Bortoli (2009). Do exemplo da figura anterior, pode-se entender também que todos os métodos numéricos são aproximações da solução analítica, com exatidão suficiente para seu propósito. Se dividirmos o intervalo a,b em vários intervalos menores, pode-se aumentar significativamente a exatidão do método. A integração numérica será estudada com mais detalhes posteriormente. GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line Edited by Foxit ReadernullCopyright(C) by Foxit Corporation,2005-2009nullFor Evaluation Only.null GUSTAVO Line GUSTAVO Line GUSTAVO Line 7 1.1 CÁLCULOS COMPUTACIONAIS: PROGRAMAÇÃO Obviamente, hoje em dia, a maioria dos cálculos numéricos de Engenharia não é feita com lápis e papel, já que lidamos com grande quantidade de cálculos e podemos utilizar os computadores. As calculadoras são usadas apenas para verificações simplificadas. Ocorre que existem muitos softwares com soluções prontas para vários tipos de situações e problemas, mas existem inúmeros problemas específicos que exigem cálculos também específicos. Podem-se citar aqui as variações regionais de materiais, mão-de-obra, climáticas, financeiras, etc. que exigem o desenvolvimento de soluções bem específicas. Citam-se ainda as pesquisas envolvendo novos materiais e novos processos de cálculo. Sendo assim, procura-se, nesta disciplina, fornecer as bases MATEMÁTICAS para o desenvolvimento de aplicativos computacionais. Sabe-se que as planilhas de cálculo (ex: Excel) possibilitam a resolução automatizada de inúmeras situações, por meio de fórmulas criadas para cada finalidade. Porém, casos que exigem maiores quantidades de cálculo e, especialmente, cálculos iterativos (“só param quando se atinge certa exatidão”) e cálculos em loop (“vai e volta”) são difíceis de realizar nas planilhas. Aplicativos de computador com entradas de dados mais “amigáveis” e possibilidades infinitas de cálculos são então a melhor solução na resolução dos problemas específicos de engenharia. Existem vários softwares (gratuitos e pagos) para a criação dos softwares, usando várias linguagens. Um bom software gratuito para este fim é o Lazarus (linguagem Pascal), que é livre e pode ser baixado do site: http://sourceforge.net/projects/lazarus/?source=dlp (acesso em 09/09/2013). O Lazarus permite a criação de aplicativos que rodam off-line (sem necessidade de internet), em qualquer computador. O aluno pode começar a estudar este software pelo conteúdo do Apêndice A desta apostila, que apresenta o passo-a-passo para a criação de um aplicativo simples (exercício 1.1 a seguir). Outros softwares/linguagens são FORTRAN e C++. Uma linguagem interessante para se aprender é a linguagem de programação dentro do Auto CAD, chamada AutoLisp (comando “vlisp”), sendo possível criar programas que geram e lêem desenhos dentro e arquivos dwg. Seja qual for a linguagem, o primeiro passo do aluno é aprender a lógica de programação, a montagem e resolução de algoritmos (sequencias de cálculo), algo que independe da linguagem. O mesmo algoritmo pode ser implementado em qualquer linguagem, apenas se verificando como determinado comando é feito naquela linguagem. Atualmente, no mundo globalizado, é coerente criar os programas para execução num site da internet, on-line. Uma das possibilidades é usar a linguagem HTML combinada com o Javascript. Nesta disciplina, o aluno fica convidado a criar aplicações envolvendo as teorias estudadas em HTML/Javascript, sob a orientação do professor. Para tanto, o primeiro passo é aprender os conceitos básicos sobre a linguagem, sendo que o aluno pode fazer isso estudando, desde já, o Apêndice B desta apostila (exercício 1.2 a seguir). Aprendida uma linguagem, é relativamente fácil aprender qualquer outra, dependendo da futura necessidade profissional. O objetivo deste item é o primeiro contato do aluno com a programação. ************************************************************************************************ GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line Edited by Foxit ReadernullCopyright(C) by Foxit Corporation,2005-2009nullFor Evaluation Only.null GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line GUSTAVO Line 8 TRABALHOS EM GRUPO: prezado aluno, todos os exercícios e criação de softwares desta disciplina serão em grupo. Cada grupo deve entregar um trabalho. Aproveitando a oportunidade, entenda que trabalhar em grupo significa se reunir com todos os integrantes e discutir cada exercício (ou parte do software) com todos, aproveitando as ideias dos colegas para criar a resposta final. Se fosse para cada integrante resolver um exercício (ou parte do software), o professor já faria a divisão desta maneira. Porém, se assim fosse, cada aluno só aprenderia a parte que fez. Aliás, nas avaliações, o conteúdo cobrado será de todas as partes de todos os trabalhos, e não partes deles. Aproveite que o curso é integral e que você tem a oportunidade de se reunir com o grupo, já que, profissionalmente, você não tem outro compromisso nesta fase da vida além de estudar (são raras as exceções de alunos que trabalham). Bom trabalho! EXERCÍCIOS 1.1) Criar o programa principal descrito no Apêndice A (área de triângulo). Cada grupo deve passar o arquivo executável para o professor, via pen-drive. 1.2) Criar o programa principal descrito no Apêndice B (área de triângulo). Cada grupo deve criar um site, conforme explicações no próprio Apêndice B, contendo o programa e enviar o link para o professor, via e-mail. ************************************************************************************************ 9 2 INTRODUÇÃO À TEORIA DE ERRO E ESTABILIDADE 2.1 FONTES DE ERROS A solução numérica dos problemas pode ser “contaminada” por alguns tipos de erro. ERRO DE TRUNCAMENTO Os erros de TRUNCAMENTO surgem exatamente quando se precisa parar a resolução quando o processo analítico seria infinito. Por exemplo, conforme Quadros e Bortoli (2009), podemos calcular numericamente o cos(x) pela resolução do polinômio abaixo (POLINÔMIO DE MCLAURIN), que vai até o infinito. Então é necessário truncar, parar num dado momento, gerando um erro. Obs: x tem que ser o ângulo em radianos. No caso acima, como conhecemos a solução exata, o erro “E” absoluto (neste caso, um erro de truncamento) é dado por: E = cos(x) – P(x) Em que: P(x) é uma função que aproxima a função exata. A tarefa é sempre, nas soluções, impor um erro máximo, uma tolerância “e”, e verificar se isso se satisfaz (E ≤ e), antes de continuar os cálculos. Obviamente, se estamos programando uma resolução numérica, é porque não existe solução analítica ou ela é inviável. Porém, sempre há uma maneira de estimar se a solução numérica converge para a solução exata. Isso é estudado de acordo com cada método numérico de solução, especificamente. Pode-se ainda calcular o erro relativo: )cos( )()cos( x xPx Er *100 (em %)É muito mais conclusivo se trabalhar com o erro relativo. Note que um erro de 1 km na medida da distância entre a Terra e a Lua é menos significativo que um erro de 1 cm na realização de uma cirurgia cerebral via robô. ************************************************************************************************ EXERCÍCIO 2.1) Na página do teu grupo na internet (criada no exercício 1.2), crie um aplicativo que resolva o cosseno de um número segundo o explicado acima (polinômio de Mclaurin), digitando o código a seguir. Estude o código. (...) !6!4!2 1 642 xxx 10 ARQUIVO cosseno.html ARQUIVO funcoes-cos.js - Rode o programa off-line e verifique os resultados conforme abaixo: 11 - Envie os arquivos para a página do grupo. O professor irá verificar diretamente. - Faça testes aumentando cada vez mais o número de termos e perceba que, após muitos termos, o erro de truncamento não se altera. Ou seja, não seria necessário tanto esforço computacional para resolver o polinômio com ótima precisão. Assim, você, programador, poderia limitar o número de termos em função de um erro aceitável, para reduzir esforço computacional. ************************************************************************************************* ERRO DE ARREDONDAMENTO Os erros de ARREDONDAMENTO surgem pelo fato de que as operações aritméticas quase nunca podem ser efetuadas com precisão completa, devido às aproximações dos números. Os tipos de arredondamento mais utilizados são, segundo Quadros e Bortoli (2009): - CORTE: as casas em excesso são simplesmente abandonadas; - MAIS PRÓXIMO: considerando-se “d” algarismos significativos, se o algarismo “d+1” for maior ou igual a 5, soma-se uma unidade ao algarismo de ordem “d”; caso contrário, o algarismo de ordem “d” permanece inalterado. Por exemplo, a solução exata da soma: Se uma máquina/aplicativo opera com 3 dígitos de precisão, considerando arredondamento por corte: Neste caso, o erro de arredondamento por corte é igual a 2-1,999=0,001. Na computação atual, as máquinas trabalham com muitos dígitos de precisão e o erro de arredondamento é automaticamente minimizado. A questão da precisão fica somente para os resultados numéricos mostrados pelo programa. Por exemplo, no programa anterior, veja que os valores mostrados do cosseno exato e do polinômio de McLaurin estão mostrados com todas as casas decimais padrão. O programador pode alterar essa precisão mostrada, de acordo com a aplicação e público-alvo. ************************************************************************************************* EXERCÍCIO 2.2) Altere o aplicativo do exercício 2.1 e defina a precisão dos resultados para: Cosseno analítico precisão de mais próximo, 5 casas decimais Cosseno numérico precisão de mais próximo, 5 casas decimais Erro precisão de corte, 6 casas decimais 12 As funções que podem ser usadas são: n.toPrecision(5) // “n” com precisão de mais próximo em 5 algarismos (total de algarismos, incluindo decimais) n.toFixed(5) // “n” com precisão de mais próximo em 5 casas decimais Math.floor(n*Math.pow(10,5))/Math.pow(10,5); //“n” com precisão de corte em 5 casas decimais - O professor irá verificar diretamente na página do grupo. ************************************************************************************************* 2.2 PRECISÃO E EXATIDÃO Torna-se aqui necessário distinguir precisão de exatidão. Precisão é relacionada à quantidade de algarismos significativos. Exatidão é a medida da perfeição do resultado. A exatidão depende da precisão da máquina/aplicativo e do método utilizado para a obtenção do resultado. Veja o exemplo de Quadros e Bortoli (2009), envolvendo o número que vale 3,1415926: 2.3 ESTABILIDADE Um método numérico diz-se instável se a acumulação de pequenos erros durante o cálculo pode ter grande influência na precisão dos resultados. Um método estável produz bons resultados mesmo com o acúmulo de pequenos erros. Chamam-se os algoritmos (sequencia de solução) instáveis também de algoritmos mal condicionados. Cherri et. al. (????) exemplifica o seguinte problema instável: supondo-se que as operações abaixo sejam processadas em uma máquina ou aplicativo com 4 dígitos significativos: ALGORITMO A) 13 ALGORITMO B) Os dois resultados são diferentes, quando não deveriam ser, pois a adição é uma operação distributiva. A causa dessa diferença foi um arredondamento feito na adição (x2 + x1), cujo resultado tem 8 dígitos. Como a máquina só armazena 4 dígitos, os menos significativos foram desprezados. Por isso é importante somente arredondar os números no momento em que for apresentado o resultado final, deixando o programa trabalhar nos cálculos internos com todas as casas decimais possíveis. Concluindo, ao se utilizar softwares de programação ou máquinas calculadoras, deve-se ficar atento aos erros que podem acontecer, sejam por truncamento ou por arredondamento, que podem levar a um algoritmo instável. 14 3 SISTEMAS DE EQUAÇÕES LINEARES 3.1 SISTEMAS DE EQUAÇÕES LINEARES NA ENGENHARIA CIVIL Podemos aplicar o cálculo numérico, por exemplo, à análise de estruturas de Engenharia Civil, no cálculo dos esforços. Um dos métodos numéricos existentes é o Método dos Elementos Finitos (MEF)1, que reduz o cálculo de esforços à resolução de um sistema de equações lineares, com a matriz (chamada matriz de rigidez) vezes o vetor de deslocamentos igual ao vetor de forças ( GG PK * ). No caso de flexão de vigas (isostáticas ou hiperestáticas), após desenvolvimento matemático e divisão da viga em trechos chamados elementos, considerando função aproximadora de grau 3 (cúbica), o MEF apresenta, para cada elemento, a seguinte matriz de rigidez 4 x4: iiii iiii iiii iiii ii llll llll llll llll IEK 4626 612612 2646 612612 * 22 2323 22 2323 Em que: Ei é o módulo de elasticidade do material do trecho da viga; Ii é o momento de inércia do trecho da viga; e li é o comprimento do trecho. Vamos analisar um exemplo, sendo que queremos calcular os esforços da seguinte viga hiperestática (biengastada): Devem-se criar nós onde há vínculo e onde há cargas concentradas, obrigatoriamente. No exemplo acima, isso deu origem a 3 elementos e 4 nós. Para cada elemento, com comprimento li = 1 m, adotando Ei*Ii=1 (a rigidez importa para os deslocamentos, não para os esforços): 1 O MEF será estudado em outra(s) disciplina(s) ou na pós-graduação. 15 4626 612612 2646 612612 4626 612612 2646 612612 * 4626 612612 2646 612612 * 22 2323 22 2323 ii iiii iiii iiii iiii ii IE llll llll llll llll IEK O próximo passo é montar a matriz de rigidez GLOBAL do sistema, o que, para o caso de 3 elementos, será: 46260000 6126120000 2644662600 61266121261200 0026446626 00612661212612 00002646 0000612612 GK 46260000 6126120000 26802600 61202461200 00268026 00612024612 00002646 0000612612 GK No MEF para flexão de vigas, o vetor para carga F e/ou momento M concentrado, para cada elemento, é: j j i i M F M F P No nosso exemplo, o vetor de forças, para cada elemento, é: 16 ELEMENTO 1: ELEMENTO 2: ELEMENTO 3: 0 4,0 0 0 0 4,0 0 4,0 0 0 0 4,0 Ficamos com o seguinte vetor global (não duplicar as cargas): 0 0 0 4,0 0 4,0 0 0 GP O sistema a resolver fica ( GG PK * ): '4 4 '3 3 '2 2 '1 1 * 46260000 6126120000 26802600 61202461200 00268026 00612024612 00002646 0000612612 v v v v v v v v = 0 0 0 4,0 0 4,0 0 0 Em que ∆ é o vetor de deslocamentos globais, sendo v1 o deslocamento vertical no nó 1, v‟1 o giro no nó 1 e assim sucessivamente para os outros nós. Por fim, colocam-se as condições de contorno, em termos de deslocamento v e giro v‟, em cada nó. Considerando que os nós 1 e 4 são engastes, portanto, com deslocamentos e giros nulos (v e v‟), v1 = v1‟=v4=v4‟=0, o sistema fica: 0 0 '3 3 '2 2 0 0 * 46260000 6126120000 26802600 61202461200 00268026 00612024612 00002646 0000612612 v v v v = 0 0 0 4,0 0 4,0 0 0 17 A partir daí, tendo uma função computacional que resolve sistemas lineares, pode-se encontrar o vetor de deslocamentos global (). Para encontrar os valores do cortante V e do momento M em cada nó de um elemento, faz-se: i j j i i i j j i i P v v v v K M V M V ][ ' ' *][ A partir das equações anteriores, temos o seguinte sistema a resolver: -12*v2-6*v2‟=0 (1) -6*v2+2*v2‟=0 (2) 24*v2-12*v3+6*v3‟=0,4 (3) 8*v2‟-6*v3+2*v3‟=0 (4) -12*v2-6*v2‟+24*v3=0,4 (5) 6*v2+2*v2‟+8*v3‟=0 (6) -12*v3-6*v3‟=0 (7) 6*v3+2*v3‟=0 (8) Computacionalmente o problema está resolvido. Porém, vamos fazer algumas simplificações para resolver o problema exemplo. Matematicamente, podemos retirar do sistema as linhas onde o vetor de forças é nulo, ou seja, as linhas 1, 2, 7 e 8 (porque temos 4 incógnitas e 8 equações). Ficamos com 4 equações, suficientes para resolver o problema: 24*v2-12*v3+6*v3‟=0,4 (3) 8*v2‟-6*v3+2*v3‟=0 (4) -12*v2-6*v2‟+24*v3=0,4 (5) 6*v2+2*v2‟+8*v3‟=0 (6) Resolvendo o sistema, os deslocamentos, ficam: v2 = 0,0667 m v2‟= 0,0667 rad v3 = 0,0667 m v3‟ = -0,0667 rad Para o elemento 1 (nós 1 e 2): 0,0667 0,0667 0 0 * 4626 612612 2646 612612 2 2 1 1 M V M V - 0 4,0 0 0 V1 = -12*(0,0667) + 6*(0,0667) - 0 = - 0,40 tf M1 = -6*(0,0667) + 2*(0,0667) - 0 = - 0,27 tf*m V2 = 12*(0,0667) - 6*(0,0667) – 0,4 = 0 tf M2 = -6*(0,0667) + 4*(0,0667) - 0 = - 0,13 tf*m 18 Para o elemento 2 (nós 2 e 3): 0,0667- 0,0667 0,0667 0,0667 * 4626 612612 2646 612612 3 3 2 2 M V M V - 0 4,0 0 4,0 V2 = 12*0,0667+6*0,0667-12*(0,0667) + 6*(-0,0667) – 0,4 = - 0,4 tf M2 = 6*0,0667+4*0,0667-6*(0,0667) + 2*(-0,0667) – 0 = - 0,13 tf*m V3 = -12*0,0667-6*0,0667+12*(0,0667) - 6*(-0,0667) – 0,4 = - 0,4 tf M3 = 6*0,0667+2*0,0667-6*(0,0667) + 4*(-0,0667) – 0 = - 0,13 tf*m Para o elemento 3 (nós 3 e 4): 0 0 0,0667- 0,0667 * 4626 612612 2646 612612 4 4 3 3 M V M V - 0 0 0 4,0 V2 = 12*0,0667+6*(-0,0667) – 0,4 = 0 tf M2 = 6*0,0667+4*(-0,0667) – 0 = 0,13 tf*m V3 = -12*0,0667-6*(-0,0667) – 0 = - 0,4 tf M3 = 6*0,0667+2*(-0,0667) – 0 = 0,27 tf*m Comparando os valores com os diagramas exatos, obtidos pelo aplicativo FTOOL, a seguir, percebe-se a validade do MEF: O que o aluno tem que entender aqui não é o MEF em si, mas que o MEF utiliza a resolução de um sistema linear de equações, o que se vai estudar a seguir. Cumpre destacar que há muitos outros métodos em Engenharia Civil, em suas diversas subáreas, que precisam da resolução de sistemas lineares. 19 3.2 SOLUÇÃO NUMÉRICA COMPUTACIONAL DE SISTEMAS LINEARES DE EQUAÇÕES Um sistema linear da forma AX = B pode ser resolvido por meio de métodos diretos ou de métodos iterativos. Um método é direto quando a solução exata é obtida realizando-se um número finito de operações aritméticas. Um método é iterativo quando a solução é obtida como limite de uma sequencia de aproximações sucessivas, ou seja, deve-se truncar, parar a solução após certo número de iterações. 3.2.1 MÉTODOS DIRETOS PARA A SOLUÇÃO DE SISTEMAS LINEARES Considere um sistema triangular da forma: Ele pode ser resolvido por retro substituição, ou seja, resolve-se a última linha, substituindo o resultado na penúltima, e assim por diante. Como regra geral, podem-se assim obter as soluções: ; A seguir apresentam-se os algoritmos para resolução de sistemas triangulares superiores (exemplo acima, onde se começa a resolução pela última linha) e inferiores (contrário, onde a primeira linha só tem 1 termo e a resolução começa por ela): RESOLUÇÃO DE SISTEMAS TRIANGULARES SUPERIORES 20RESOLUÇÃO DE SISTEMAS TRIANGULARES INFERIORES Daqui para frente o aluno irá se deparar com algoritmos, que são as sequencias de cálculo de uma determinada tarefa. Quando se quer entender o que um algoritmo faz, pode-se calculá-lo passo-a-passo. Segue um exemplo usando o algoritmo para resolução de SISTEMAS TRIANGULARES SUPERIORES apresentado: n=4 x4=b4/a44=2/2=1 i=n-1=3 soma=0 j=i+1=4 (=n, portanto último e único passo) soma=soma+a34*x4=0+(-5)*1=-5 x3=(b3-soma)/a33=(3-(-5))/4=8/4=2 i=i-1=2 soma=0 j=i+1=3 soma=soma+a23*x3=0+1*2=2 j=j+1=4 (=n, portanto último passo) soma=soma+a24*x4=2+(-2)*1=0 x2=(b2-soma)/a22=((-1)-0)/1=-1 i=i-1=1 (=n, portanto último passo) soma=0 j=i+1=2 soma=soma+a12*x2=0+4*(-1)=-4 j=j+1=3 soma=soma+a13*x3=(-4)+(-5)*2=-14 j=j+1=4 (=n, portanto último passo) soma=soma+a14*x4=(-14)+1*1=-13 x1=(b1-soma)/a11=((-10)-(-13))/3=3/3=1 Esta resolução passo-a-passo verificando a variação do valor de cada variável ao longo da execução do algoritmo é chamada DEPURAÇÃO (“DEBUG”, em inglês, referindo-se ao ato de procurar erros, “bugs”). 1 2 1- 1 x 21 A maioria dos softwares para criar softwares, como o Lazarus, tem uma função debug, em que apresenta uma tabela mostrando a variação dos valores das variáveis passo-a-passo. Para resolver em papel um algoritmo, pode-se fazer conforme apresentado anteriormente ou fazer uso de uma tabela de depuração como a apresentada a a seguir, onde são colocadas as variáveis uma em cada coluna e cada linha apresenta a variação dos valores passo-a-passo. Veja: EXEMPLO DE TABELA DE DEPURAÇÃO – SISTEMA TRIANGULAR SUPERIOR ************************************************************************************************* EXERCÍCIOS 3.1) Resolver, em papel, usando o algoritmo apresentado, o seguinte sistema linear triangular superior de ordem 4 (apresentar o passo-a-passo com todas as variáveis; pode ser na forma de tabela de depuração, mas não é obrigatório): 3x1+2x2-4x3+3x4=-5 6x2-x3+x4=14 2x3+x4=11 5x4=10 22 3.2) Resolver, em papel, usando o algoritmo apresentado, o seguinte sistema linear triangular inferior de ordem 4 (apresentar o passo-a-passo com todas as variáveis): 2x1=8 5x1+2x2=16 x1-x2+x3=5 3x1+5x2-2x3+2x4=19 3.3) Crie um programa em HTML/Lazarus, na página do GRUPO, para resolver um sistema linear triangular qualquer superior de ordem n (n x n) qualquer. Abaixo segue um algoritmo possível para a página HTML e arquivo .js com algoritmos para a leitura e impressão dos dados (sem os cálculos). O aluno deve implementar o algoritmo de resolução descrito. O professor irá verificar diretamente na página do grupo. ARQUIVO sistemasuperior.html <html> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>Sistema Linear Triangular Superior</title> <script src='funcoes-sistemasuperior.js'></script> SISTEMA LINEAR TRIANGULAR SUPERIOR <br><br> Ordem do sistema (n): <input type="number" id="ordem" value="4"> <br><br> </form> <button onclick="gerar()">GERAR</button> <br><br> Obs: Matriz COMPLETA (a última coluna - cinza - contém as constantes, os valores após a igualdade). <br><br> <ins id="tabela"></ins> <!-- TABELA IMPRESSA, DE ACORDO COM A FUNÇÃO gerar() no arquivo .js --> <br> <button onclick="calcular()">CALCULAR</button> <br><br> <ins id="resultado"></ins> <!-- IMPRESSÃO DOS RESULTADOS, DE ACORDO COM A FUNÇÃO calcular() no arquivo .js --> <br><br> </html> ARQUIVO funções-sistemasuperior.js function gerar(){ n=document.getElementById("ordem").value; //lê n n=Number(n); //para definir que n é número, não texto col=n+1; //número de colunas, porque a última coluna são os valores após a igualdade //abaixo, html dentro do javascript, para criar a tabela dinamicamente (nxn) html=""; html+='<table border>'; for (i=1;i<=n;i++){ html+='<tr>'; for(j=1;j<=n;j++){ ntermo=i+','+j; conteudo='<input type="number" id='+ntermo+' value="0"/>'; html+='<td>'+conteudo+'</td>'; } ntermo=i+','+col; conteudo='<input type="number" style="background-color: #C0C0C0" id='+ntermo+' value="0"/>'; html+='<td>'+conteudo+'</td>'; html+='</tr>'; 23 } html+='</table>'; document.getElementById('tabela').innerHTML=html; } function calcular(){ n=document.getElementById("ordem").value; n=Number(n); //ler os termos aij a=[]; //criar o vetor for (i=1;i<=n;i++){ for(j=1;j<=n;j++){ ntermo=i+','+j; a[ntermo]=document.getElementById(""+ntermo+"").value; a[ntermo]=Number(a[ntermo]); } } //ler os termos bi col=n+1; b=[]; //criar o vetor for (i=1;i<=n;i++){ ntermo=i+','+col; b[i]=document.getElementById(""+ntermo+"").value; b[i]=Number(b[i]); } sistemasuperior(n,b,a); //chama a função que calcula o sistema triangular superior //imprimir os resultados xi res=''; for (i=1;i<=n;i++){ res=res+'\r\nx'+i+'\r\n='+x[i]+'<br>' } document.getElementById('resultado').innerHTML = res; } function sistemasuperior(n,b,a){ //AQUI ENTRA O ALGORITMO DOS ALUNOS //entra n, b e a. Sai x. IMPLEMENTE O ALGORITMO AQUI. (...) } O exemplo cujo passo-a-passo do algoritmo foi mostrado anteriormente está a seguir, no formato que deve ficar o programa: 24 3.4) Duplique o programa anterior e o altere para resolver um sistema linear triangular qualquer inferior de ordem n. O professor irá verificar diretamente na página do grupo. Um exemplo adaptado a partir do anterior, invertendo as equações, fica: 2x1=2 -5x1+4x2=3 -2x1+x2+x3=-1 x1-5x2+4x3+3x4=-10 ************************************************************************************************* 1 1- 2 1 x 25 As soluções dos sistemas lineares inferior e superior são necessárias no MÉTODO DA ELIMINAÇÃO DE GAUSS. MÉTODO DA ELIMINAÇÃO DE GAUSS (OU MÉTODO DO ESCALONAMENTO) Este método consiste em construir, a partir de um sistema de equações lineares qualquer, um sistema triangular A′X = B′ equivalente que pode ser resolvido por retro substituição, com os algoritmos estudados anteriormente. Quadros e Bortoli (2009) citam que dois sistemas lineares de dimensão n x n são equivalentes desde que os seus conjuntos de soluções sejam os mesmos. Teoremas de álgebra linear mostram que, quando certas operações são aplicadas a um dado sistema, a solução não muda. Citam os autores que as seguintes operações, quando aplicadas a um sistema linear, resultam num sistema equivalente: 1. Mudança de ordem de duas equações. 2. Multiplicação de uma equação por uma constante não nula. 3. Adição de um múltiplo de uma equação a outra equação. Quadros e Bortoli (2009) descrevem o método de eliminação de Gauss para um sistema de ordem 3, sendo que o mesmo processo pode ser aplicado a sistemas de qualquer ordem. Apresentam o seguinte sistema: Considere-se somente a matriz dos coeficientes aij aumentada contendo os termos independentes bi: O objetivo é obter um sistema triangular da forma abaixo, sendo que os elementos da segunda até a última linha (no caso, a terceira) não serão os mesmos da matriz original (por isso estão indicados com o índice linha): O processo consiste em fazer uma combinação linear para zerar os elementos da primeira coluna abaixo do pivô (primeiro elementonão-nulo de cada linha), obtendo: 26 Uma combinação linear (considerando os critérios 1 a 3 dispostos no começo do capítulo) que chega ao resultado da matriz anterior é, segundo Cantão (????), para cada linha “i”, a partir da segunda, subtrair a primeira linha multiplicada pelo fator: Então, cada elemento da linha i modificada fica (o expoente “(2)” é para indicar que os elementos são de uma 2ª matriz): Sendo assim, os novos valores para o exemplo de 3 linhas são dados por: linha 2 linha 3 Repete-se o processo para zerar os elementos inferiores da segunda coluna, sendo que os elementos da matriz ficam: linha 3 O processo é conhecido também como ESCALONAMENTO. Quadros e Bortoli (2009) lembram que o sistema final não pode ter elementos nulos na diagonal, ou seja, os elementos a11, a22, a33 etc. não podem ser nulos, o que resultaria num sistema sem solução por este método. Quadros e Bortoli (2009) apresentam o seguinte exemplo: Jessica Nota m= a21/a11 null= a21-a11*m1null= a21-a11(a21/a11)null= a21-a21 =0 Jessica Nota Começa no a33, porque o a32 vai zerar.nullColocar no algoritmo a32=0 27 A matriz aumentada para este sistema é (o pivô está sublinhado): m21 = a21/a11 = 2/1 = 2 m31 = a31/a11 = 4/1 = 4 m41 = a41/a11 = -3/1 = -3 a‟21 = a21 – m21*a11 = 2-2*1 = 0 (ok) a‟22 = a22 – m21*a12 = 0-2*2 = -4 a‟23 = a23 – m21*a13 = 4-2*1 = 2 a‟24 = a24 – m21*a14 = 3-2*4 = -5 b‟2 = b2 – m21*b1 = 28-2*13 = 2 a‟31 = 0 a‟32 = a32 – m31*a12 = 2-4*2 = -6 a‟33 = a33 – m31*a13 = 2-4*1 = -2 a‟34 = a34 – m31*a14 = 1-4*4 = -15 b‟3 = b3 – m31*b1 = 20-4*13 = -32 a‟41 = 0 a‟42 = a42 – m41*a12 = 1-(-3)*2 = 7 a‟43 = a43 – m41*a13 = 3-(-3)*1 = 6 a‟44 = a44 – m41*a14 = 2-(-3)*4 = 14 b‟4 = b4 – m41*b1 = 6-(-3)*13 = 45 Portanto, o resultado, após a eliminação, para a 2ª matriz, é (já informando os parâmetros pivô e “m” para a próxima etapa): A terceira matriz fica: m32 = a32/a22 = -6/-4 = 1,5 m42 = a42/a22 = 7/-4 = -1,75 a‟31 = 0 a‟32 = 0 a‟33 = a33 – m32*a23 = (-2)-1,5*2 = -5 a‟34 = a34 – m32*a24 = (-15)-1,5*(-5) = -7,5 b‟3 = b3 – m32*b2 = (-32)-1,5*2 = -35 28 a‟41 = 0 a‟42 = 0 a‟43 = a43 – m42*a23 = 6-(-1,75)*2 = 9,5 a‟44 = a44 – m42*a24 = 14-(-1,75)*(-5) = 5,25 b‟4 = b4 – m42*b2 = 45-(-1,75)*2 = 48,5 A quarta e última matriz fica: m43 = a43/a33 = 9,5/-5 = -1,9 a‟41 = 0 a‟42 = 0 a‟43 = 0 a‟44 = a44 – m43*a34 = 5,25-(-1,9)*(-7,5) = -9 b‟4 = b4 – m43*b3 = 48,5-(-1,9)*(-35) = -18 Observando que todos os elementos da diagonal são não nulos, a solução, calculada conforme exposto anteriormente (sistema triangular superior), fica: Para n = 4; i = 4: 2 9 18 44 4 4 a b x Para n = 4; i = 3: 4 5 )2*5,7(35 * 33 4 4 33 3 a xab x j jj Para n = 4; i = 2: 1 4 ))2*)5((4*2(2 * 22 4 3 22 2 a xab x j jj 29 Para n = 4; i = 1: 3 1 ))2*4()4*1())1(*2((13 * 11 4 2 11 1 a xab x j jj Conforme Quadros e Bortoli (2009), o método de Gauss irá falhar quando um pivô for nulo, pois, neste caso, não seria possível calcular os multiplicadores “m” Este sério problema pode ser evitado pelo uso da estratégia de pivoteamento. Esta consiste em trocar linhas (ou colunas) de forma a ter sempre o pivô não-nulo. A técnica de pivoteamento parcial tem o seguinte esquema de escolha do pivô: 1º Pivô = elemento de maior valor absoluto (módulo) na coluna 1; 2º Pivô = elemento de maior valor absoluto na coluna 2; E assim sucessivamente. A seguir apresenta-se um exemplo com pivoteamento parcial: A matriz aumentada para este sistema é: Fazendo-se o pivoteamento parcial, ou seja, colocando a linha com o maior pivô como a primeira: 4584 3742 3309 Fazendo uma operação para zerar os termos abaixo da linha do pivô, conforme explicado anteriormente: m21 = a21/a11 = 2/9 = 0,222 m31 = a31/a11 = 4/9 = 0,444 a‟21 = 0 a‟22 = a22 – m21*a12 = (-4)-0,222*0 = -4 a‟23 = a23 – m21*a13 = 7-0,222*(-3) = 7,666 b‟2 = b2 – m21*b1 = 3-0,222*3 = 2,334 a‟31 = 0 30 a‟32 = a32 – m31*a12 = (-8)-0,444*0 = -8 a‟33 = a33 – m31*a13 = 5-0,444*(-3) = 6,332 b‟3 = b3 – m31*b1 = (-4)-0,444*3 = -5,332 332,5332,680 334,2666,740 3309 Fazendo-se novamente o pivoteamento parcial, ou seja, colocando a linha com o maior pivô (em módulo) como a próxima linha de resolução: 334,2666,740 332,5332,680 3309 Para o segundo pivô: m32 = a32/a22 = -4/-8 = 0,5 a‟31 = 0 a‟32 = 0 a‟33 = a33 – m32*a23 = 7,666-0,5*6,332 = 4,5 b‟3 = b3 – m32*b2 = 2,334-0,5*(-5,332)= 5 55,400 332,5332,680 3309 E, finalmente, resolvendo o sistema triangular superior: x1 = 0,7037; x2 = 1,5462; x3 = 1,1111 A seguir apresenta-se um algoritmo para a resolução de sistema de equações lineares pelo Método de Eliminação de Gauss com pivoteamento: Dado n, Anxn e bnx1 1: Para k=1 até k=n-1 faça //para cada coluna 2: w=|akk| //w é o pivô 3: r=k //r é o nº da linha que está o pivô 4: Para j=k até j=n faça //para cada linha 5: Se |ajk|>w então //encontra o maior pivô em módulo 6: w=|ajk| 7: r=j 8: Fim do condicional 9: Fim do laço 10: Se w=0 então 11: „Todos os pivôs são nulos.‟ PARE. Jessica Nota É até n-1, porque n=colunas, mas zera só até a coluna n (nesse caso 3). 31 12: Senão 13: Troque a linha k com a linha r 14: Fim do condicional 15: Para i=k+1 até i=n faça //para cada linha, menos a anterior (que tem o pivô) 16: mik=aik/akk 17: bi=bi-mikxbk 18: aik=0 19: Para j=k+1 até j=n faça //para cada coluna, a partir da k 20: aij=aij-mikxakj 21: Fim do laço 22: Fim do laço 23: Fim do laço 24: Execute o algoritmo de solução de sistemas triangulares superiores. Para estudar mais aprofundadamente o Método da Eliminação de Gauss com pivoteamento parcial, acesse: http://vtp.ifsp.edu.br/nev/Sistema-gauss/sistemagauss.html ************************************************************************************************* EXERCÍCIOS 3.5) Resolver, em papel, o seguinte sistema linear pelo Método de Gauss, com pivoteamento parcial: 3.6) Resolver, em papel, o exercício anterior usando o algoritmo apresentado, apresentando o passo a passo. 3.7) Duplique o programa do exercício 3.3 (sistema triangular superior) e modifique-o para resolver sistemas pelo algoritmo de eliminação de Gauss com pivoteamento parcial, que acabou de ser apresentado. Para implementar o algoritmo, seguem algumas informações, na ordem do algoritmo proposto: Módulo de um número n: Math.abs(n) Condicional: if (a<0) { //qualquer código } Obs: use os operadores lógicos a seguir: == igual a //ATENÇÃO, NA COMPARAÇÃO COLOQUE 2 IGUAIS != diferente >, <, >=, <= maior, menor, maior ou igual e menor ou igual PARE (parar o programa): return; 32 Condicional com “SENÃO”: if (a==0) { //código} else { //código } Trocar a linha k pela linha r: for(c=1;c<=n+1;c++) { //coluna 1 a n+1 atemp=a[k+','+c]; //variável temporária a[k+','+c]=a[r+','+c]; a[r+','+c]=atemp; } btemp=b[k]; //variável temporária para b b[k]=b[r]; b[r]=btemp; O professor irá verificar diretamente na página do grupo. 3.8) EXTRA (desafio): Crie um aplicativo que calcule os esforços nos nós de uma viga com 2 vínculos de extremidade (o usuário deve escolher entre apoio móvel, apoio fixo e engaste), semelhante à apresentada no exemplo inicial deste capítulo (com 4 nós), sendo que o usuário poderá colocar quaisquer forças e/ou momentos concentrados em seus nós 2 e 3 e qualquer comprimento de viga. ************************************************************************************************* MÉTODO DA FATORAÇÃO LU O método da fatoração LU é um método derivado do Método da Eliminação de Gauss, que apresenta a vantagem de que o escalonamento é feito independentemente do vetor dos termos independentes b i. Então se pode escalonar o sistema e salvá-lo na memória, resolvendo-o para qualquer vetor de termos independentes bi. No processo de Gauss, toda vez que se muda o vetor b i, deve-se fazer novamente todo o escalonamento. Lembre-se que, no caso do MEF, por exemplo, para uma viga qualquer, a matriz de rigidez (A) é fixa e o vetor bi contém as ações. De acordo com Ruggiero (1996), neste método, para resolver o sistema linear Ax=b, se pudermos realizar a fatoração A=CD, o sistema fica (CD)x=b. Se y=Dx, então resolver o sistema é equivalente a resolver Cy=b e, depois, Dx=y. Cantão (????) cita que LU é um termo que vem do inglês lower e upper, já que o método se baseia na decomposição da matriz A na forma A = L*U, onde L é uma matriz triangular inferior (todos os elementos acima da diagonal são nulos) com elementos da diagonal principal iguais a 1 e U é uma matriz superior (todos os elementos abaixo da diagonal são nulos) qualquer. Para encontrar L e U, faz-se o escalonamento da matriz aumentada composta da matriz identidade I (elementos da diagonal iguais a 1 e o restante dos elementos 33 nulos) e a matriz principal A. Depois resolvem-se as duas partes do sistema (Ly=b, obtendo y e Ux=y, obtendo a solução final x). Primeiro vamos teorizar o método, usando um sistema linear literal, conforme Ruggiero (1996): Considerando o escalonamento somente da matriz dos coeficientes A, sem o vetor das constantes b, porque queremos fatorar somente A, conforme anteriormente explicado, os multiplicadores da etapa 1 são: E, normalmente, os coeficientes para gerar a matriz A(1) são calculados como: Percebe-se que os mesmos resultados são conseguidos, para a matriz A(1) da 1ª etapa, multiplicando A(0) por M(0) conforme abaixo: Para a 2ª etapa, supondo : 34 Percebe-se que os mesmos resultados são conseguidos, para a matriz A(2) da 2ª etapa, multiplicando A(1) por M(1) conforme abaixo: Em resumo: A(1) = M(0)A(0) A(2) = M(1)A(1) = M(1)M(0)A(0) Então: A(0) = (M(1))(-1)(M(0))(-1)A(2) Então, sendo A a matriz original (ou A(0)), encontra-se a fatoração LU procurada: Note que a dedução não considerou o pivoteamento parcial. Cantão (????) apresenta um exemplo: A*x = b Para a matriz A, o escalonamento é feito normalmente como apresentado no Método de Eliminação de Gauss: 1ª Etapa: m21 = a21/a11 = 1/3 m31 = a31/a11 = 4/3 = A (2) 35 a‟21 = 0 a‟22 = a22 – m21*a12 = 1-1/3*2 = 1/3 a‟23 = a23 – m21*a13 = 2-1/3*4 = 2/3 a‟31 = 0 a‟32 = a32 – m31*a12 = 3-4/3*2 = 1/3 a‟33 = a33 – m31*a13 = 2-4/3*4 = -10/3 2ª Etapa: m32 = a32/a22 = (1/3)/(1/3) = 1 a‟31 = 0 a‟32 = 0 a‟33 = a33 – m32*a23 = (-10/3)-1*(2/3) = -4 U = L = = Resolvendo Ly=b: Na resolução anterior, lembre-se que o expoente T significa que o vetor y é transposto, ou seja, que, na verdade, os valores estão em coluna, não em linha. Resolvendo Ux=y: Exposto o método, obviamente é interessante resolver o Método considerando o pivoteamento parcial. Para entender os impactos do pivoteamento na fatoração LU, Ruggiero (1996) explica o conceito de MATRIZ DE PERMUTAÇÃO como sendo uma matriz obtida a partir da permutação de linhas e/ou colunas da 36 matriz identidade. Então, permutar linhas e/ou colunas de uma matriz qualquer A é equivalente a permutar essas mesmas linhas e/ou colunas numa matriz identidade (gerando a MATRIZ DE PERMUTAÇÃO) e multiplicá-la pela matriz A. Veja: quero permutar para Se quisermos criar uma matriz A‟ com a 1ª linha sendo a 2ª linha de A, a 2ª linha sendo a 3ª linha de A e a 3ª linha sendo a 1ª linha de A, fazemos essas operações numa matriz identidade e multiplicamos por A: 100 010 001 I 001 100 010 P OK Seja o sistema linear Ax=b, permutando A temos que permutar b, então e . Então: porque queremos fatorar A‟=LU. Para resolver o sistema: Lembrando que: L = com multiplicadores a partir da matriz A‟=PA; U é a matriz A‟ escalonada (Método de Gauss). Ruggiero (1996) apresenta um exemplo: A ’ = 37 Fazendo o pivoteamento (1ª etapa), o maior pivô está na linha 3 e, portanto, devemos trocá-la com a 1ª linha: e Ao efetuar a eliminação de Gauss, Ruggiero (1996) usa as posições zeradas para guardar os multiplicadores m. Isso é comum em algoritmos para economizar memória computacional. Dessa maneira, efetuando a eliminação na matriz A‟(0): Fazendo o pivoteamento (2ª etapa), o maior pivô está na linha 3 e, portanto, devemos trocá-la com a 2ª linha: Efetuando a eliminação na matriz A‟(1): E, portanto: 38 : X = = P Para efeito do algoritmo que será apresentado, Ruggiero (1996) define um vetor pk contendo a ordem das linhas da matriz A em cada etapa k. Sendo assim, no exemplo apresentado, p0 = (1,2,3), p1 = (3,2,1) e p2 = (3,1,2). Dado n, Anxn e bnx1 39 //veja que, até aqui, o algoritmo é parecido com o de resolução por Gauss, exceto pelo vetor p. //veja que a matriz a(i,j) já é a matriz L considerando sua parcela inferior, a menos da diagonal (a(i,i), que é toda igual a 1, que será usada na resolução do sistema. Então, na verdade, a função é quase a mesma da resolução de sistema triangular inferior, considerando a matriz A, exceto pela última linha, que não divide por a(i,i) porque já assume que vale 1. 40 //veja que a matriz a(i,j) já é a matriz U considerando sua parcela superior, que será usada na resolução do sistema. Então, na verdade, a função é idêntica à de resolução de sistema triangular superior, considerando a matriz A. ************************************************************************************************* EXERCÍCIOS: 3.10) Resolver, em papel, o seguinte sistema linear (o mesmo do exercício 3.5) pela fatoração LU com pivoteamento normal (não parcial): 3.11) Resolver, em papel, o sistema do exercício anterior pela fatoração LU com pivoteamento parcial. 3.12) Usando como base os programas anteriormente criados, crie um software para resolver sistemas pelo algoritmo de fatoraçãoLU com pivoteamento parcial, que acabou de ser apresentado. O software deve mostrar as matrizes completas A|c (sendo que a parte inferior de A, exceto a diagonal com elementos iguais a 1, é L) e A|y (sendo que a parte superior é U) conforme o exemplo a seguir: 41 O professor irá verificar diretamente na página do grupo. ************************************************************************************************* 3.2.2 MÉTODOS ITERATIVOS PARA A SOLUÇÃO DE SISTEMAS LINEARES No caso de sistemas lineares maiores e esparsos (com grande quantidades de zeros), os métodos diretos consomem grande memória computacional ou até podem não ser eficientes. Por isso, existem métodos de resolução iterativa de sistemas, ou seja, calculando uma solução inicial e outras sucessivamente, até que o critério de convergência seja satisfeito. MÉTODO DE GAUSS-JACOBI (OU MÉTODO DE JACOBI OU MÉTODO DOS DESLOCAMENTOS SIMULTÂNEOS) Considere o sistema: 42 O que se faz, no Método de Jacobi, é isolar o vetor X (soluções x1 a xn) mediante a separação dos elementos diagonais. Assim: Veja que a primeira parcela das soluções teria divisão por zero se um elemento diagonal fosse nulo. Portanto, exige-se que todos os elementos da diagonal sejam não nulos, ou seja, aii ≠ 0, para i = 1 até n. Para sistemas que apresentem esta característica, pode-se permutar linhas até que todos os elementos da diagonal sejam não-nulos, antes de resolver. Podemos escrever: X = C*X + D, sendo: Depois, “chuta-se” uma solução X(k) qualquer e calculam-se as soluções iterativamente até que haja uma convergência. Assim: Cantão (????) dá um exemplo para a resolução do seguinte sistema: 43 Rearranjando da forma anteriormente exposta: Pode-se começar com uma solução X(0) = (0,0,0) e fazer as iterações. Veja: Veja que as soluções começam a convergir rapidamente. No caso deste exemplo, sabemos que a solução exata é X = (1,1,1). Normalmente, nos programas, fixa-se um erro relativo entre a iteração atual e a anterior que se quer atingir e calculam-se as iterações necessárias para isso. Mesmo assim deve-se fixar um número máximo de iterações, para evitar um tempo de resolução alto no caso em que o sistema demore a convergir ou nem convirja. Apresenta-se a seguir um algoritmo para resolução de sistemas lineares pelo Método de Jacobi, devendo o usuário entrar com o vetor X0 contendo uma solução inicial arbitrada, com o número máximo de iterações a ser realizado (nit) e com o erro relativo alvo (Er). Dado n, Anxn, bnx1, xinxk, nit e Era //ler a solução inicial como x(„0,1‟), x(„0,2‟) ... x(„0,n‟) – iteração 0 1: Er(0)=100 //erro relativo inicial, para entrar no “loop enquanto” 2: k=1 //número da iteração 3: Enquanto Er(k-1)>Era faça //para erro relativo maior que o alvo 4: Para i=1 até n faça //para cada linha 5: soma=0 6: Para j=1 até n faça //para cada coluna 7: Se ji então //não na diagonal 8: Se aii=0 então // na diagonal 9: 'Erro: Algum elemento da diagonal é nulo.' 10: PARE 11: Fim do condicional 12: soma=soma+a(i,j)*x(k-1,j)/a(i,i) 13: Fim do condicional 14: x(k,i)=(b(i)/a(i,i))-soma 15: Fim do laço 16: Fim do laço 17: Er = (|x(k,1)-x(k-1,1)|/|x(k,1)|)*100 44 18: Para c=2 até n faça //para cada linha 19: Se |x(k,c)-x(k-1,c)|/|x(k,c)| > Er(k) então //encontra o maior erro relativo entre os x 20: Er(k) = (|x(k,c)-x(k-1,c)|/|x(k,c)|)*100 21: Fim do condicional 22: Fim do laço 23: k=k+1 24: Se (k-1)=nit então //número máximo de iterações atingido 25: SAIR DO ENQUANTO 26: Fim do condicional 27: Fim do loop Enquanto ************************************************************************************************* EXERCÍCIOS 3.13) Resolver, em papel, o sistema linear a seguir pelo Método de Gauss-Jacobi. Faça 7 iterações e calcule o erro relativo em cada iteração k como: )( )1()( k i k i k i x xx Er *100 (em %) * considerar o maior entre todas as soluções xi 3.14) Resolver, em papel, o exercício anterior seguindo o algoritmo apresentado, mostrando seu passo a passo. 3.15) Copie o conteúdo a seguir para criar, no site do grupo, um software para resolver sistemas pelo Método de Jacobi que acabou de ser apresentado. Estude todo o código para usar os conceitos nos próximos programas. ARQUIVO sistemajacobi.html <html> <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> <title>Sistema Linear - Método de Jacobi</title> <script src='funcoes-sistemajacobi.js'></script> SISTEMA LINEAR - MÉTODO DE JACOBI <br><br> Ordem do sistema (n): <input type="number" id="ordem" value="4"> <br><br> </form> <button onclick="gerar()">GERAR</button> <br><br> Obs: Matriz COMPLETA (a última coluna - cinza - contém as constantes, os valores após a igualdade). <br><br> <ins id="tabela"></ins> <!-- TABELA IMPRESSA, DE ACORDO COM A FUNÇÃO gerar() no arquivo .js --> 45 <br> <ins id="textonit"></ins> <ins id="hinit"></ins> <br> <br> <ins id="textoera"></ins> <ins id="hiera"></ins> <br><br> <ins id="textosolini"></ins> <br> <ins id="solini"></ins> <br> <button onclick="calcular()">CALCULAR</button> <br><br> <ins id="resultado"></ins> <!-- IMPRESSÃO DOS RESULTADOS, DE ACORDO COM A FUNÇÃO calcular() no arquivo .js --> <br><br> </html> ARQUIVO funções-sistemajacobi.js function gerar(){ n=document.getElementById("ordem").value; //lê n n=Number(n); //para definir que n é número, não texto col=n+1; //número de colunas, porque a última coluna são os valores após a igualdade //abaixo, html dentro do javascript, para criar a tabela dinamicamente (nxn) html=""; html+='<table border>'; for (i=1;i<=n;i++){ html+='<tr>'; for(j=1;j<=n;j++){ ntermo=i+','+j; conteudo='<input type="number" id='+ntermo+' value="0"/>'; html+='<td>'+conteudo+'</td>'; } ntermo=i+','+col; conteudo='<input type="number" style="background-color: #C0C0C0" id='+ntermo+' value="0"/>'; html+='<td>'+conteudo+'</td>'; html+='</tr>'; } html+='</table>'; document.getElementById('tabela').innerHTML=html; //número máximo de iterações document.getElementById('textonit').innerHTML = 'Número máximo de iterações:'; document.getElementById('hinit').innerHTML = '<input type="number" id="init" value="50"/>'; //erro relativo alvo document.getElementById('textoera').innerHTML = 'Erro relativo alvo (%):'; document.getElementById('hiera').innerHTML = '<input type="number" id="iera" value="0.1"/>'; //solução inicial (chute) document.getElementById('textosolini').innerHTML = 'Solução inicial (chute):'; html=""; html+='<table border>'; html+='<tr>'; for(j=1;j<=n;j++){ 46 ntermo='e0,'+j; conteudo='<input type="number" id='+ntermo+' value="0"/>'; html+='<td>'+conteudo+'</td>'; } html+='</tr>'; html+='</table>'; document.getElementById('solini').innerHTML=html; } function calcular(){ n=document.getElementById("ordem").value; n=Number(n); //ler os termos aij a=[]; //criar a matriz for (i=1;i<=n;i++){ for(j=1;j<=n;j++){ ntermo=i+','+j; a[ntermo]=document.getElementById(""+ntermo+"").value; a[ntermo]=Number(a[ntermo]); } } //ler os termos bi col=n+1; b=[]; //criar o vetor for (i=1;i<=n;i++){ ntermo=i+','+col; b[i]=document.getElementById(""+ntermo+"").value; b[i]=Number(b[i]);} nit=document.getElementById("init").value; //ler o número máximo de iterações nit=Number(nit); Era=document.getElementById("iera").value; //ler erro relativo alvo Era=Number(Era); //ler solução inicial xi=[]; //criar o vetor for (j=1;j<=n;j++){ ntermo='e0,'+j; xi[ntermo]=document.getElementById(""+ntermo+"").value; xi[ntermo]=Number(xi[ntermo]); } sistemajacobi(n,b,a,nit,Era,xi); //chama a função que calcula o sistema por eliminação de gauss //imprimir os resultados de todas as iterações document.getElementById('resultado').innerHTML = res; } 47 function sistemajacobi(n,b,a,nit,Era,x){ Er=[]; //criar o vetor Er[0]=100; //inicial pra entrar no while k=1; //número da iteração while(Er[k-1]>Era){ //para erro relativo maior que o alvo for(i=1;i<=n;i++){ //para cada linha ou solução soma=0; for(j=1;j<=n;j++){ //para cada coluna if (j!=i) { if (a[i+','+i]==0) { //na diagonal alert('Erro: Algum elemento da diagonal é nulo.'); return; //pára o programa } soma=soma+a[i+','+j]*x['e'+(k-1)+','+j]/a[i+','+i]; } x['e'+k+','+i]=(b[i]/a[i+','+i])-soma; } } Er[k]=(Math.abs(x['e'+k+',1']-x['e'+(k-1)+',1'])/Math.abs(x['e'+k+',1']))*100; for(c=2;c<=n;c++){ //para cada linha ou solução, a partir da 2 if (Math.abs(x['e'+k+','+c]-x['e'+(k-1)+','+c])/Math.abs(x['e'+k+','+c])>Er[k]) { Er[k]=(Math.abs(x['e'+k+','+c]-x['e'+(k-1)+','+c])/Math.abs(x['e'+k+','+c]))*100; } } k=k+1; if ((k-1)==nit) { break; //sai do laço enquanto } } k=k-1; //impressão em res res=""; res+='<table border>'; res+='<tr style="background-color: #C0C0C0"><td>ITERAÇÃO</td>'; for(j=1;j<=n;j++){ //linhas res+='<td>x'+j+'</td>'; } res+='<td>ERRO REL. (%)</td>'; res+='</tr>'; for (i=1;i<=k;i++){ //iterações res+='<tr>'; res+='<td style="background-color: #C0C0C0">'+i+'</td>'; for(j=1;j<=n;j++){ //linhas termo=x['e'+i+','+j]; res+='<td>'+termo+'</td>'; } res+='<td style="background-color: #C0C0C0">'+Er[i]+'</td>'; res+='</tr>'; } 48 res+='</table>'; } O software deve mostrar as soluções de cada iteração, conforme o exemplo a seguir: O professor irá verificar diretamente na página do grupo. ************************************************************************************************* MÉTODO DE GAUSS-SEIDEL (OU MÉTODO DOS DESLOCAMENTOS SUCESSIVOS) Outro método existente para resolução iterativa de sistemas lineares é o Método de Gauss-Seidel, que nada mais é que uma pequena modificação do Método de Jacobi, onde, no mesmo passo, já são usadas as soluções obtidas. Veja, na generalização abaixo, que x2 (k+1) já usa x1 (k+1) que foi calculado na linha anterior, dentro da mesma iteração. E o mesmo ocorre para as outras linhas da iteração k+1: 49 Cantão (????) apresenta o mesmo exemplo descrito pelo Método de Jacobi, agora resolvido pelo Método de Gauss-Seidel: As iterações são mostradas na tabela abaixo: Observe que a solução converge mais rapidamente no Método de Gauss- Seidel do que no Método de Jacobi. ************************************************************************************************* EXERCÍCIOS 3.16) Resolver, em papel, o sistema linear a seguir (o mesmo do exercício 3.13) pelo Método de Gauss-Seidel. Faça 4 iterações e calcule o erro relativo em cada iteração. 3.17) Duplique o exercício 3.15 e transforme-o de modo que a solução seja pelo Método de Gauss-Siedel. O professor irá verificar diretamente na página do grupo. ************************************************************************************************* 50 4 CÁLCULO DE DETERMINANTES DE MATRIZES O cálculo de determinantes de matrizes pode não ter aplicação direta nos problemas de engenharia, mas aparece indiretamente para verificar se os sistemas lineares têm solução. Dado um sistema linear nxn e sua matriz de coeficientes A: - se det(A) ≠ 0 sistema tem solução única (possível e determinado) - se det(A) = 0 sistema tem infinitas soluções (possível e indeterminado) ou não tem soluções (impossível) Segundo Massago (2014), o determinante de uma matriz triangular (todos os elementos acima ou abaixo da diagonal são zeros) é dado pelo produto dos elementos das diagonais. O autor dá um exemplo: É óbvio que nem todas as matrizes são triangulares. Porém, foi estudado anteriormente, no MÉTODO DA ELIMINAÇÃO DE GAUSS, um meio de transformar um sistema qualquer num sistema triangular. Então, para calcular um determinante de uma matriz qualquer, usa-se o ESCALONAMENTO para transformá-lo em uma matriz triangular e depois se calcula o produto dos seus elementos diagonais. ************************************************************************************************* EXERCÍCIOS 4.1) Utilizando o esquema de entrada de dados do programa que calcula sistemas lineares por ELIMINAÇÃO DE GAUSS, crie um programa para calcular determinantes de matrizes. O resultado deve ficar como o do exemplo a seguir. 51 O algoritmo para multiplicar os elementos da diagonal de uma matriz pode ser: 1: det=1; 2: para j=1 até n { //para cada linha 3: det=det*a(j,j); 4: } O professor irá verificar diretamente na página do grupo. 4.2) No programa que calcula sistemas lineares por ELIMINAÇÃO DE GAUSS, incorpore uma verificação que pare a execução quando ele for possível e indeterminado ou impossível (det = 0). Teste o seguinte exemplo: O professor irá verificar diretamente na página do grupo. ************************************************************************************************* 52 5 MATRIZ INVERSA Um sistema linear pode ser resolvido numericamente por meio de um dos métodos apresentados no capítulo 3. Porém, poderia ser resolvido um sistema de equações usando a matriz inversa: [A]*[X]=[B] [X]=[A]-1*[B] Porém, é consenso que, computacionalmente, a obtenção da matriz inversa gera mais operações do que a resolução do sistema pelos outros métodos estudados. Isso será explícito no exemplo a seguir. Sendo assim, evita-se usar a matriz inversa em resoluções computacionais. Porém, se você se deparar com algum problema específico que exija a resolução de uma matriz inversa, Quadros e Bortoli (2009) apresentam uma solução, com um exemplo reproduzido seguir, semelhante ao processo de escalonamento de Gauss, porém usando a matriz aumentada com a matriz identidade (todas as diagonais valendo 1 e os outros elementos valendo zero). Ou seja, o que se faz é escalonar a matriz até que o sistema se torne triangular superior. Depois disso resolvem-se “n” sistemas triangulares superiores sendo que cada solução é uma coluna da matriz inversa (“n” é a ordem da matriz original). Resumindo, temos o seguinte esquema, segundo Castilho (2001): - matriz a inverter: - matriz aumentada: - sistemas a resolver: - matriz inversa: Obviamente, da mesma maneira feita no processo de pivoteamento de Gauss, transforma-se a matriz aumentada em triangular superior antes de resolver cada sistema em separado. 53 Castilho dá um exemplo numérico: matriz aumentada com I após escalonamento Resolve-se os 3 sistemas (triangulares superiores): E, portanto, a inversa fica: Castilho (2001)explica que, no exemplo anterior, a inversa de A é a própria matriz A, sendo que é um caso muito útil na verificação do método. Quadros e Bortoli (2005) apresentam outro exemplo: Resolvendo os sistemas triangulares superiores: 3 3 4 )1(X 1 2 1 )2(X 5 6 6 )3(X 54 Verificando os procedimentos anteriores, fica claro que o número de operações para encontrar a matriz inversa de um sistema é maior do que o custo para encontrar diretamente sua solução, pelo Método da Eliminação de Gauss. Isto sem considerar que, depois de encontrar a matriz inversa, deve-se multiplicá-la pelo vetor solução para definitivamente encontrar o vetor resposta do problema. Sendo assim, somente se usa o cálculo numérico de matriz inversa em casos onde é necessária sua dedução, o que não ocorre em sistemas lineares. ************************************************************************************************* EXERCÍCIOS 5.1) Calcular, em papel, a inversa da matriz a seguir, pelo método apresentado anteriormente. 5.2) Partindo do algoritmo que calcula determinantes de matrizes, faça as adaptações e crie um programa para calcular inversas de matrizes. O resultado deve ficar como o do exemplo a seguir. O algoritmo para acrescentar a matriz identidade à matriz original lida pode ser: 55 1: para i=1 até n { //linhas 2: para j=n+1 até 2*n { //colunas 3: se i=(j-n) { //diagonal da identidade 4: a(i,j)=1; 5: } senão { 6: a(i,j)=0; 7: } fim do condicional 8: } fim do para i 9: } fim do para j O professor irá verificar diretamente na página do grupo. ************************************************************************************************* 56 6 ZEROS DE FUNÇÕES Antes de iniciarmos os estudos deste capítulo, vamos relembrar as definições de FUNÇÃO e EQUAÇÃO. f(x) = x² + 2x – 8 FUNÇÃO: para qualquer valor de x, podemos calcular o valor correspondente de f(x). Especialmente quando xf =0, o valor de x é chamado raiz da função ou zero da função. Pode haver várias raízes, inclusive. x² –2x – 8 = 0 EQUAÇÃO: x só podem ser as raízes da função correspondente. x² –2x – 8 < 0 INEQUAÇÃO: existe um intervalo de valores de x que satisfazem a inequação. Sendo assim, este capítulo dedica-se ao estudo da obtenção de ZEROS DE FUNÇÕES, ou seja, raízes das EQUAÇÕES. Veja a figura que ilustra as raízes de uma função genérica: Figura: Raízes de uma função genérica. Fonte: Asano e Colli (2009). Sabemos que existe, por exemplo, a fórmula de Bhaskara para encontrar as raízes de polinômios de segundo grau. Porém, para polinômios de graus superiores, usam-se métodos do tipo iterativo para encontrar as soluções. Para polinômios de grau “n”, “n” raízes existem, podendo as mesmas serem reais ou complexas, diferentes ou não. Pode haver ainda um número infinito de soluções, como os casos de senos e cossenos. 6.1 MÉTODO DA BISSECÇÃO (OU DA DICOTOMIA) O Método da Dicotomia é um dos métodos numéricos mais simples usados para achar as raízes de uma função. O primeiro passo é isolar a raiz x* dentro de um intervalo onde a função seja monótona (ou crescente ou decrescente). Veja, na figura a seguir, o exemplo de um intervalo [a0,b0] de uma função f crescente, contendo a solução x* quando f=0: Figura: Intervalo [a0,b0] de uma função f crescente, contendo a solução x*. Fonte: Asano e Colli (2009). 57 Veja, no exemplo anterior, que f(a0)<0 e f(b0)>0 (seria ao contrário se a função fosse decrescente), o que leva a f(a0)*f(b0)<0. Em seguida, passamos a cercar a raiz com intervalos, cada intervalo com a metade do tamanho do intervalo anterior, até que se chegue a um intervalo tão pequeno que se possa assumir que o centro dele é a solução, com pouco erro. Asano e Colli (2009) apresentam um exemplo com a função f(x)=x3-20: 1) Escolhemos a0 = 2 porque f(a0) < 0 (2 3-20=-12<0) e b0 = 3 porque f(b0) > 0 (3 3- 20=7>0). Este é o chamado TEOREMA DE BOLZANO. 2) Escolhemos o ponto médio do intervalo, ao qual chamaremos provisoriamente de c0: c0=2,5 3) Calculamos f(c0) = 2,5 3-20=-4,375<0. Como f(c0) < 0 e a raiz está em f(x*)=0, concluímos que a raiz está à direita de c0. Assim, definimos um novo intervalo [a1,b1]= [c0,b0]= [2,5;3] 4) Repete-se o procedimento até que o erro seja satisfatório. O erro en é dado por , assumindo que a solução está no ponto médio do intervalo. Abaixo está a tabela até a décima iteração, contendo a solução rn = cn en Portanto, a raiz da função f(x)=x3-20 está no intervalo 2,71440,0006. Segundo Quadros e Bortoli (2009), este método possui baixa velocidade de convergência, mas a convergência é garantida. Apresenta-se a seguir um algoritmo para o método, sendo dados a função f(x), o intervalo [a,b] tal que f(a)*f(b)<0, o erro alvo ea e o número máximo de iterações itm. 58 Dado f(x), a, b, ea, itm 1: xa[0]=a; 2: xb[0]=b; 3: k=0; //número da iteração 4: xm[k]=(xa[k]+xb[k])/2; 5: se ((f(xa[k])* f(xm[k]))<=0) { 6: xa[k+1]=xa[k]; 7: xb[k+1]=xm[k]; 8: } senão { 9: xa[k+1]=xm[k]; 10: xb[k+1]=xb[k]; 11: } fim do condicional 12: En[k]=módulo((xb[k]-xa[k])/2); 13: enquanto (En[k]>ea) { //a partir da iteração 1 14: k=k+1; 15: se (k=itm) { 16: break; //sai do laço enquanto 17: } fim do condicional 18: xm[k]=(xa[k]+xb[k])/2; 19: se ((f(xa[k])* f(xm[k]))<=0) { 20: xa[k+1]=xa[k]; 21: xb[k+1]=xm[k]; 22: } senão { 23: xa[k+1]=xm[k]; 24: xb[k+1]=xb[k]; 25: } fim do condicional 26: En[k]=módulo((xb[k]-xa[k])/2); 27: } fim do loop equanto ************************************************************************************************* EXERCÍCIOS 6.1) Calcular, em papel, a raiz da função no intervalo , usando o Método da Dicotomia. Faça iterações até que o erro seja menor que 0,001. 6.2) Considere uma viga biapoiada submetida a uma ação q que segue uma variação triangular conforme a figura a seguir. Neste caso, o diagrama de momento fletor é dado pela função M(x) e o diagrama de esforço cortante é dado por Q(x) (veja a seguir). Usando o Método da Dicotomia, calcule a posição x onde o momento fletor é máximo (Q=0) e o valor do momento máximo, para o caso de q = 1,5 tf/m e L = 4 m. Faça iterações até que o erro seja menor que 0,001. 59 6.3) O professor irá enviar aos grupos, via e-mail, um programa para calcular a raiz de uma função qualquer pelo Método da DICOTOMIA, contendo a plotagem do gráfico da função. A plotagem de gráficos necessita de arquivos específicos que estão na pasta “funcoes_grafico”. Tais arquivos não são necessários de serem estudados. Eles são funções disponibilizadas on-line, mas que não são de código aberto (não se pode editar), apesar de serem gratuitas. O aluno deve estudar somente os arquivos zerodicotomia.html e funcoes- zerodicotomia.js, além de testar e entender o funcionamento do programa. O programa deve ser colocado no site do grupo. O resultado deve ficar como o do exemplo a seguir. O professor irá verificar diretamente na página do grupo. _________________________________________________________________ 60 *************************************************************************************************
Compartilhar