cálculo numérico


Como eu havia prometido aí vai a segunda parte do estudo de cálculo numérico

INTERPOLAÇÂO!!

Primeiro pra que serve isso? Imagine que você mediu experimentalmente algo daí você quer ter uma idéia de qual o valor para uma determinada entrada que você não mediua ai…, tá bom tá bom vamos a um exemplo.
Você está subindo uma montanha e a cada digamos 200 metros você vê o quanto do seu nariz está congelado. Você vai ter algo do tipo:

medicao Altura %congelada do nariz
x1 7000 0
x2 7200 5
x3 7400 22
x4 7600 37
x5 7800 58

Daí você quer saber como estava o seu nariz a 7500m de altura. Você deve interpolar o 7500 aí e ver como é horrível subir uma montanha sem o agasalho adequado.
O primeiro método de interpolação será a

Interpolação polinomial
Neste método vamos criar um polinômio de grau n-1 onde n é o número de medições que você fez. No nosso caso há 5 medições ou seja Polinômio de grau 4. E como você vai achar este magnífico “polinômio que descreve o congelamento dos narizes em grandes altitudes“? Primeiro vamos ver o formato dele. Já que é de grau 4 o nosso polinômio deve ser algo do tipo:

a1 + b1×1 + c1×1^2 + d1×1^3 +e1×1^4 = 0

Certo? Daí você com toda a paciência do mundo vai para cada ponto medido substituir x do polinômio pelo que você mediu e isso deve dar igual a o teu y também medido daí você vai obter 5 equações polinomiais:

a1 + b1×1 + c1×1^2 + d1×1^3 +e1×1^4 = y1
a1 + b1×2 + c1×2^2 + d1×2^3 +e1×2^4 = y2
a1 + b1×3 + c1×3^2 + d1×3^3 +e1×3^4 = y3
a1 + b1×4 + c1×4^2 + d1×4^3 +e1×4^4 = y4
a1 + b1×5 + c1×5^2 + d1×5^3 +e1×5^4 = y5

Daí resolva o sistema linear acima e Tchan Ram! vc tem o “polinômio que modela o congelamento de narizes em grandes altitudes”.

Olá! Andei meio distante em? Bom hoje vamos falar um pouco sobre cálculo numérico vamos dar uma olhada em dois assuntos muito interessantes: o primeiro é resolução de sistemas lineares o segundo será interpolação.

Sistemas lineares

Sistemas lineares serão modelados como um conjunto de equações do tipo

ax + by + cz = k

dx + ey + fz = m

gx + hy + iz = n

Você já deve ter visto um desses por aí não?

Eliminação Gaussiana

O primeiro método numérico que vem é Eliminação Gaussiana (é sério o Gauss era muito brabo o cara era um gênio mesmo!).

O objetivo da eliminação Gaussiana é representando os S.L. (apelido para sistema linear) como matrizes operar essa matriz para obter uma matriz triangular, algo do tipo:

a b c k

0 e f m

0 0 i n

Que voltando para o S.L. vamos ter a última equação com:

uma variável = valor

daí é só ir substituindo nas outras equações o resultado da anterior. Muito facim facim né não?

Aí você diz: “não né não e esse passe de mágica aí da matriz pra matriz triangular?” Ok, vamos ver mais de perto como se faz isso.

Para cada item que você queira zerar calcule um multiplicador baseado no elemento da diagonal principal da matriz. (Ãhn?? agora você viajou né não?). Vamos ver um exemplo:

Eu quero zerar o d vou usar o a por que ele está na diagonal principal daí

Mult = d/a

Aí para a linha toda eu faço

item_da_linha2 = (item_da_linha1*mult)- item_da_linha2

é só isso até zerar tudo o que precisar.

Decomposição L.U.

A idéia da Decomposição L.U. é muito parecida com a da Eliminação Gaussiana a diferença aqui será que não vamos nos preocupar com os termos independentes na matriz (k,m e n no exemplo anterior) e para isso depois de feitos os passos da Eliminação Gaussiana vamos fazer umas continhas, coisa pouca eu garanto ;-) .

A*X = B

Bonito né? Sim e daí? Tá tá eu explico A = matriz com os coeficientes das variáveis no S.L. no nosso exemplo

a b c

d e f

g h i

X = Matriz coluna com as variáveis do S.L.

x

y

z

B = matriz coluna dos termos independentes

k

m

n

A matriz A será decomposta em matriz L e matriz U (olha aí você num queria saber por quê esse nome?)

U será a matriz A depois de passar por Eliminação Gaussiana que você já sabre fazer.

A matriz L será uma matriz muito interessante triangular superior com 1s na digonal principal e preenchida com os mults usados na Eliminação Gaussiana de A daí L =

1 0 0

m 1 0

m m 1

Põe tudo no liquidificador e… ops receita errada, Voltando como L*U =A

L*U*X=B

Vamos chamr U*X de Y ok? Por quê? Pro quê sim ué!

Daí

L*Y=B

Vamos agora calcular a matriz coluna Y

Y1

Y2

Y3

Ora faça você as contas! Multiplique L pela matriz coluna Y e encontre os resultados comparando o resultado com B.

Agora ache X com U e Y lembre:

U*X = Y

Pivotamento

Pivotamento é o seguinte para garantir boas operações no cálculo do mult e nas operações com linhas da matriz o ideal é que o maior número da matriz seja o seu pivô(pivô é o elemento da diagonal principal que você usa para calcular o mult). Assim você pode trocar uma linha com outra para gaantir que o maior pivô esteja na diagonal principal sempre que for fazer essas operções. No caso do Pivotamento completo você poderá também trocar colunas cuidado!!! ao trocar colunas você também está trocando a ordem das variáveis do seu S.L. então você deve alterar teu vetor X das variáveis de acordo com as trocas que você faça. No caso da Decomposição L.U. a troca de linhas também é perigosa pois você deve trocar os valores da matriz B de acordo!

Métodos Iterativos

Vamos passar agora a métodos iterativos que não darão necessariamente respostas exatas

Método iterativo de Gauss-Jacobi

Antes de começar para este método você precisa de uma condição muito especial. Em cada equação deve haver uma variável cujo coeficiente seja maior que a soma dos outros dois. E isso é importante mesmo! Depois disso selecione para cada variável uma equação que a represente você deve selecionar a variável da equação que tem o maior índice e isolar essa variável. Daí você vai ter coisinhas como

x = (k-by-cz)/a

y = (m-dx-fz)/a

z = (n-gx-hy)/a

Chuta valores para x y e z vai calculando x y e z usando o valor da iteração anterior na atual e pronto.

E isso não para não é?Para sim, calcule o erro de cada variável como sendo (X0-X1)/X1 o erro da iteração será o maior dos erros quando ele chegar ao limiar que você gosta, retire do fogo e deixe descansar por uma hora em local seco e ventilado ops… receita errada de novo ^^.

Método Iterativo de Gauss-Seidel

Faça o mesmo, mas numa mesma iteração se você já calculou x use esse valor no cálculo de y e de z. Oxe e é só isso? É só isso que que você quer mais? Eu eim!

Não vou passar para interpolação hoje não!

Aí já tem coisa demais.

Fica pra o próximo artigo.

Bom, aqui estou eu novamente hoje vou falar sobre cálculo numérico só por que fiz uma prova ruim Um prova facílima e eu me passei, portanto dá uma olhada e vê como é fácil.

Primeiro vou dizer que o assunto pode parecer meio chato pra quem não está acostumado então siga em frente por sua própria conta e risco. Eu prometo algo mais interessante no próximo post.

O que estou estudando em Cálculo Numérico?
Estudo de métodos numéricos para encontrar raízes de funções.

Quer ver um exemplo simples?
Digamos que eu quero a raiz dessa função aí, um jeito muito simples de fazer é: pegue um ponto antes e um depois da raiz que você ainda não sabe onde é mas sabe que se dois pontos estão em partes opostas do gráfico, isso quer dizer que tem pelo menos uma raiz entre os dois certo? Escolhendo os dois pontos vá aproximando um do outro, mais cedo ou mais tarde você vai chegar no ponto que passa de positivo para negativo ou seja a raiz. Esse é o método mais simples método da Bisseção, e é claro isso não caiu na prova hauahuah.

Na prova eu tinha umas tarefas simples:
1. Calcular o erro de certa operação considerando o erro introduzido pela conversão Decimal -> Binário.
a. Calcule usando binário depois calcule normal
b. Calcule o erro relativo assim:
i. |valor_real – valor_aproximado| / valor_real
c. Quer mais é só isso mesmo! acho que essa eu me dei bem :-)

2. O método da Iteração Linear
a. Cara isso eu devia ter revisado direito
b. Basicamente é o seguinte primeiro transforme a sua equação original do tipo f(x) = 0 em uma coisa do tipo x = g(x) o que é das coisas mais fáceis certo?
c. Chute com vontade um valor que você acha esteja próximo da raiz calcule g(x) use o resultado como o próximo chute (se bem que aí não é mais chute certo?)
d. Se os valores estão convergindo legal faça mais umas vezes e você terá a raiz
e. Se não converge bom, tenta um chute melhor cara.
f. Existe uma maneira de testar convergência para o seu chute, mas no momento não me lembro.

3. O método de Newton-Raphson
a. Cara esse era a questão pra eu fazer de olhos fechados afinal de contas eu implementei esse método no Delphi se quiser essa implementação me manda um email que ainda tenho ela aqui.
b. O método é basicamente o seguinte fazer as iterações até encontrar um valor para a raiz que esteja na tolerância determinada
c. A cada nova iteração o novo valor de x deverá ser:
i. Xnovo = X – (F(X)/F’(X))
d. E pronto é só isso e eu acho que consegui errar!
e. Tem mais um detalhe para garantir que este método converge existe um teste que é o seguinte:
i. F’(X0) * F’’(X0) > 0

E pronto era isso significava um 10 em cálculo numérico, bom não necessariamente afinal de contas aqui não tem exatamente o que era pedido, mas em linhas gerais neh?

Poxa esse de hoje foi muito chato se você chegou até aqui
1. Você não tem muito o que fazer
2. Você gostou de me ver descrever minha tragédia na prova

Eu qualquer dos casos comente ficarei feliz de ouvir (ler) suas sugestões e prometo no próximo post ser mais interessante.