You are on page 1of 37

Anlise Matemtica para Aplicaes Trabalho 2

Srgio Rodrigues 1 de Maio de 2013

Contedo
1 Introduo 2 Ferramentas Utilizadas 3 A Implementao 4 Anlise dos Resultados 2 2 3 4

4.1 O numero e . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.2 O numero 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 4.3 O nmero ln 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

5 A Srie Geomtrica 6 Cdigo Fonte

29 30

INTRODUO

Introduo

O Trabalho 2 trata da implementao em qualquer linguagem de programao do rearranjo dos termos da srie harmnica alternada
1

(1)n+1

1 para n

que convirja a um dado nmero real L com certa representao de preciso. Neste trabalho apresentaremos a linguagem de programao escolhida, as ferramentas utilizadas para o desenvolvimento do algoritmo e descreveremos brevemente como o algoritmo foi implementado. Depois, demostramos alguns dados e grcos obtidos da execuo do algoritmo para trs nmeros reais conhecidos do meio matemtico e algumas consideraes sobre a execuo do algoritmo para esses nmeros. Por m, respondemos ao questionamento 1 a respeito da srie geomtrica (1)n+1 n1 .
2

FERRAMENTAS UTILIZADAS

Ferramentas Utilizadas

A linguagem de programao escolhida para a implementao do algoritmo a linguagem Python pelas caractersticas que se adequam confortavelmente a este trabalho. Outro ponto a favor da escolha da linguagem Python a biblioteca matplotlib para a gerao dos grcos que demonstram convergncia da soma dos termos rearranjados. Embora Python possa ser desenvolvida utilizado qualquer editor de texto, recorremos IDE Eclipse para a construo do cdigo fonte. O Eclipse uma IDE completa com diversos recursos de apoio ao desenvolvimento onde destacamos o editor de texto com diversas funcionalidades que economizam a digitao do cdigo fonte e o ambiente de Debug para a vericao da corretude do algoritmo implementado. Entretanto, para que se possa programar em Python no Eclipse necessrio um plugin chamado PyDev que possibilita ao Eclipse entender o cdigo fonte do Python e compil-lo com o uso do interpretador Python. Abaixo seguem os links das ferramentas utilizadas neste trabalho:
IDE Eclipse - http://www.eclipse.org Interpretador Python - http://www.python.org Plugin PyDev - http://www.pydev.org Biblioteca Matplotlib - http://www.matplotlib.org

A IMPLEMENTAO

A Implementao

Utilizamos uma abordagem estruturada para a construo do algoritmo, que consiste em decompor o problema em pequenos pedaos cada qual sendo resolvido por uma funo ou procedimento. Conforme pode ser visto na seo "Cdigo Fonte", o algoritmo comea no procedimento compute_rearrange que recebe como parmetro uma representao do nmero real que se deseja convergir, a potncia mxima da aproximao pretendida, e uma string que servir de nome aos arquivos que forem gerados. Uma potncia mxima de aproximao, por exemplo 5, determina que o algoritmo ir exeuctar rearranjos para as aproximaes 101 , 102 , 103 , 104 , 105 . O objetivo do procedimento compute_rearrange orquestrar a utilizao das trs principais funes do algoritmo:
rearrange - Calcula o rearranjo dos termos e faz a soma acumulada ate

a aproximao pretendida.

print_graph - Plota gracamente a evoluo da soma acumulada dos

termos rearranjados e a representao do nmero real escolhido para a aproximao. Salva o grco em um arquivo. Utilizou-se a biblioteca matplotlib para a gerao dos grcos em imagens do tipo PNG.

write_statistics - Cria um arquivo com os dados solicitado no escopo

ATEX, esse procedido trabalho. Com a construo desta redao em L mento acabou sendo desenvolvido para gerar arquivos desta linguagem de edio de textos cientcos a m de facilitar a construo deste arATEX, tigo. Isso gerou um alto acoplamento deste procedimento com o L mas tal pode ser resolvido com a construo de outra funo que receba os mesmos parmetros de entrada e gere um arquivo texto mais simples.

Ento, para cada potncia de aproximao, 101 , 102 , ... at a potncia informada, o algoritmo chama as 3 funes descritas acima, gera os grcos ATEXpara anlise dos dados. e arquivos formatados em L A O arquivo LTEXgerado pelo mtodo write_statisticscontm os seguintes dados pedidos na descrio do Trabalho 2:
Target - Representao do nmero real dado como alvo para o algoritmo

aproximar com a soma dos termos rearranjados.

Result - o numero encontrado com a soma dos termos rearranjados

dentro da aproximao pretendida. Esta aproximao est dentro do limite informado ao algoritmo. 4

A IMPLEMENTAO

Error - Aproximao utilizada para o critrio de parada do algoritmo. Total terms - a quantidade de termos positivos e negativos utilizados

para a aproximao calculada. a aproximao pretendida. a aproximao pretendida. cada "virada".

(+) terms - a quantidade de termos positivos necessrios para atingir (-) terms - a quantidade de termos negativos necessrios para atingir Between Turns - Mostra o nmero de termos positivos e negativos entre

Esse mtodo possui um parmetro opcional print_list que determina se deve ser impresso ou no no arquivo a lista com os ndices de cada termo e o valor da soma acumulada at aquele termo na ordem que foram necessrios. Como ser descrito na seo "Anlise dos Resultados"uma aproximao menor do que 107 leva a um nmero grande de termos, e o arquivo texto resultante excede 50MB, devendo ento se evitar a impresso da lista de erros, a menos que se queira veric-los. Aps a impresso do arquivo texto o algoritmo termina. Para usar o algoritmo, basta importar o mdulo "Trabalho2.py"em seu programa e chamar a funo principal compute_rearrange passando como parmetro o nmero real alvo da aproximao, a potncia limite de aproximao desejada, e um nome para os arquivos a serem gerados. Caso deseje, possvel utilizar diretamente o algoritmo pois ele tem a funo "main" do Python. Pode-se alterar os parmetros nesta funo main para executar o algoritmo para qualquer nmero que se queira.

ANLISE DOS RESULTADOS

Anlise dos Resultados


e = 2.71828182845904523536 2 = 1.41421356237 ln 2 = 0.69314718056

A seguir apresentaremos os estudos feitos com os seguintes nmeros reais:

Para cada um desses nmeros o algoritmo foi executado com as aproximaes 101 , 102 , 103 , 104 , 105 , 106 e 107 . Limitamos o estudo at a aproximao 107 pois neste ponto encontramos algumas restries da tecnologia e abordagem utilizados. A primeira limitao a nitidez do grco que no permite uma visualizao satisfatria da curva de aproximao. Uma outra limitao o tempo e memria necessrios a execuo do algoritmo que comeam a ser longos a partir aproximao 106 . Certamente possvel otimizar o algoritmo para tratar aproximaes mais precisas utilizando outras abordagens no desenvolvimento mas esta proposta cou fora do escopo deste artigo pois com as aproximaes aqui descritas possvel avaliar o principal comportamento do algoritmo. Conforme esperado, quanto maior a preciso da aproximao desejada, maior o nmero de termos necessrios a se chegar nessa preciso. Com os resultados obtidos que sero apresentados a seguir montamos um grco que mostra o nmero de termos necessrios a cada aproximao, para cada um dos trs nmeros analisados.

Note que os nmeros e e 2 demandam nmeros muito prximos de termos, mas o nmero ln 2 exige um nmero maior de termos a partir da aproximao 105 . Isto deve-se ao fato de ln2 ser justamente o limite da srie harmnica utilizada. 6

ANLISE DOS RESULTADOS

Outro comportamento interessante de registrar a quantidade de termos positivos, "(+)", em comparao com a quantidade de termos negativos, "(-)". Para os nmeros e e 2, por serem positivos, os nmero de termos negativos foram muito menores que o nmero de termos positivos. Por exemplo, veja a tabela abaixo dos termos positivos e negativos necessrios para o nmero e: Approx
10 1 102 103 104 105 106 107

28 0 87 1 374 6 3.187 55 26.554 462 261.427 4.475 2.512.361 43.759

e (+)

e (-)

Isto uma caracterstica particular do algoritmo implementado, resumido aqui em alto nvel:
Algoritmo de aproximao: Repita o bloco abaixo: Some um termo positivo da srie harmnica. A soma acumulada maior do que o nmero dado? Se sim, ento some um termo negativo da srie harmnica at que a soma acumulada fique abaixo do nmero dado. Verifique se a soma acumulada esta dentro do limite aceitvel de aproximao. Se sim, registre que esta dentro da aproximao. Se for a segunda vez consecutiva que est dentro da aproximao, termine.

Ento para nmeros positivos o algoritmo trabalha basicamente com os termos positivos. Quando a soma acumulada ultrapassa o nmero dado, e tambm est fora da aproximao desejada, um termo negativo utilizado para trazer a soma abaixo do nmero dado. Utiliza-se novamente termos positivos para aproximar a soma ao nmero dado. Embora os termos positivos decresam tanto quanto os termos negativos, foi necessrio uma quantidade considervel de termos positivos para ultrapassar o nmero alvo usado como 7

ANLISE DOS RESULTADOS

exemplo. Caso o nmero a que se deseja aproximar seja negativo, o comportamento se inverter: uma quantidade maior de termos negativos ser necessria para levar a soma acumulada aproximao desejada, e relativamente poucos termos positivos sero usados para trazer a soma acumulada acima do valor negativo. No de se estranhar que as quantidades de termos positivos e negativos para aproximar ao nmero ln 2 entre as viradas sejam iguais, alternadamente 1, por ser justamente este o limite da srie harmnica utilizada. Este comportamento com ln 2 a prova da corretude do algoritmo implementado para o rearranjo dos termos da srie harmnica. Finalmente, destacamos que as quantidades de termos positivos e negativos entre as viradas serem praticamente os mesmos. A seguir apresentamos os grcos e resultados para cada uma das aproximaes para os trs nmeros usados neste trabalho. A ttulo de responsabilidade social com uso de papel, limitamos a listagem das quantidades de termos positivos e negativos entre as viradas. Demais valores podem ser obtidos pela execuo do algoritmo alterando-se a constante MAX_TURNS.

4.1

O numero

ANLISE DOS RESULTADOS

4.1

O numero

Target: 2.71828182846 Result: 2.6478838353 Error: 0.1 Total terms: 28 (+) terms:28 (-) terms:0 Between turns: (+): 28. (-): Graco:

4.1

O numero

ANLISE DOS RESULTADOS

Target: 2.71828182846 Result: 2.71471182473 Error: 0.01 Total terms: 88 (+) terms:87 (-) terms:1 Between turns: (+): 33, 54. (-): 1.

Graco:

10

4.1

O numero

ANLISE DOS RESULTADOS

Target: 2.71828182846 Result: 2.71888306066 Error: 0.001 Total terms: 380 (+) terms:374 (-) terms:6 Between turns: (+): 33, 55, 57, 57, 57, 58, 57. (-): 1, 1, 1, 1, 1, 1.

Graco:

11

4.1

O numero

ANLISE DOS RESULTADOS

Target: 2.71828182846 Result: 2.71836656631 Error: 0.0001 Total terms: 3242 (+) terms:3187 (-) terms:55 Between turns: (+): 33, 55, 57, 57, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57. (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.

Graco:

12

4.1

O numero

ANLISE DOS RESULTADOS

Target: 2.71828182846 Result: 2.71829164195 Error: 1e-05 Total terms: 27016 (+) terms:26554 (-) terms:462 Between turns (First 60 terms): (+): 33, 55, 57, 57, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...

Graco:

13

4.1

O numero

ANLISE DOS RESULTADOS

Target: 2.71828182846 Result: 2.71828278937 Error: 1e-06 Total terms: 261427 (+) terms:256952 (-) terms:4475 Between turns (First 60 terms): (+): 33, 55, 57, 57, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...

Graco:

14

4.1

O numero

ANLISE DOS RESULTADOS

Target: 2.71828182846 Result: 2.71828192823 Error: 1e-07 Total terms: 2556120 (+) terms:2512361 (-) terms:43759 Between turns (First 60 terms): (+): 33, 55, 57, 57, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 57, 58, 57, 58, 57, 58, 57, 57, 58, 57, 58... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1...

Graco:

15

4.2

O numero

ANLISE DOS RESULTADOS

4.2 O numero

Target: 1.41421356237 Result: 1.45513375513 Error: 0.1 Total terms: 8 (+) terms:7 (-) terms:1 Between turns: (+): 3, 4. (-): 1.

Graco:

16

4.2

O numero

ANLISE DOS RESULTADOS

Target: 1.41421356237 Result: 1.4228838353 Error: 0.01 Total terms: 34 (+) terms:28 (-) terms:6 Between turns: (+): 3, 4, 4, 4, 5, 4, 4. (-): 1, 1, 1, 1, 1, 1.

Graco:

17

4.2

O numero

ANLISE DOS RESULTADOS

Target: 1.41421356237 Result: 1.41507496943 Error: 0.001 Total terms: 353 (+) terms:286 (-) terms:67 Between turns (First 60 terms): (+): 3, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 4, 5, 1, 1,

Graco:

18

4.2

O numero

ANLISE DOS RESULTADOS

Target: 1.41421356237 Result: 1.41430316842 Error: 0.0001 Total terms: 3313 (+) terms:2680 (-) terms:633 Between turns (First 60 terms): (+): 3, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 4, 5, 1, 1,

Graco:

19

4.2

O numero

ANLISE DOS RESULTADOS

Target: 1.41421356237 Result: 1.41422327755 Error: 1e-05 Total terms: 31407 (+) terms:25402 (-) terms:6005 Between turns (First 60 terms): (+): 3, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 4, 5, 1, 1,

Graco:

20

4.2

O numero

ANLISE DOS RESULTADOS

Target: 1.41421356237 Result: 1.4142145522 Error: 1e-06 Total terms: 311348 (+) terms:251814 (-) terms:59534 Between turns (First 60 terms): (+): 3, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 4, 5, 1, 1,

Graco:

21

4.2

O numero

ANLISE DOS RESULTADOS

Target: 1.41421356237 Result: 1.41421366233 Error: 1e-07 Total terms: 3093479 (+) terms:2501959 (-) terms:591520 Between turns (First 60 terms): (+): 3, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 4, 5, 1, 1,

Graco:

22

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

4.3

O nmero

ln 2

Target: 0.69314718056 Result: 0.616666666667 Error: 0.1 Total terms: 6 (+) terms:3 (-) terms:3 Between turns: (+): 1, 1, 1. (-): 1, 1, 1.

Graco:

23

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

Target: 0.69314718056 Result: 0.702855003713 Error: 0.01 Total terms: 51 (+) terms:26 (-) terms:25 Between turns: (+): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1. (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1.

Graco:

24

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

Target: 0.69314718056 Result: 0.694144188542 Error: 0.001 Total terms: 501 (+) terms:251 (-) terms:250 Between turns (First 60 terms): (+): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 1, 1, 1, 1,

Graco:

25

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

Target: 0.69314718056 Result: 0.693247150568 Error: 0.0001 Total terms: 5001 (+) terms:2501 (-) terms:2500 Between turns (First 60 terms): (+): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 1, 1, 1, 1,

Graco:

26

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

Target: 0.69314718056 Result: 0.69315718026 Error: 1e-05 Total terms: 50001 (+) terms:25001 (-) terms:25000 Between turns (First 60 terms): (+): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 1, 1, 1, 1,

Graco:

27

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

Target: 0.69314718056 Result: 0.693148180557 Error: 1e-06 Total terms: 500001 (+) terms:250001 (-) terms:250000 Between turns (First 60 terms): (+): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 1, 1, 1, 1,

Graco:

28

4.3

O nmero

ln 2

ANLISE DOS RESULTADOS

Target: 0.69314718056 Result: 0.69314728056 Error: 1e-07 Total terms: 5000003 (+) terms:2500002 (-) terms:2500001 Between turns (First 60 terms): (+): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... (-): 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1... 1, 1, 1, 1,

Graco:

29

A SRIE GEOMTRICA

A Srie Geomtrica

Uma pergunta do Trabalho 2 se possivel fazer uma implementao do mesmo tipo para a srie geomtrica
1

(1)n+1

1 2n1

. A resposta a tal ques-

tionamento no pois essa srie absolutamente convergente. Da as subsequncias de somas parciais dos temos positivos e negativos no divergem.

30

CDIGO FONTE

Cdigo Fonte

''' Created on 24/04/2013 @author: sergio ''' import os from math import fabs from matplotlib import pylab as plt CRLF = '\\\\' MAX_TURNS = 60 def rearrange(L,e): sum_approx = 0 # Store the 'n's in order they are needed. list_n = [] # Store the sum. list_sum = [] # Index 'n' for the positive terms. Starts at 1. n_pos = 1 # Index 'n' for the negative terms. Starts at 2. n_neg = 2 # Controls the repetition of the approximation. already = False # Perform the loop until the condition is satisfied. while True: # Increases the sum if it's below the given number. if sum_approx < L: sum_approx += harmonic(n_pos) #sum_approx += geometric(n_pos) list_n.append(n_pos) n_pos+=2 # Decreases the sum if it's above the given number. elif sum_approx > L:

31

CDIGO FONTE

sum_approx += harmonic(n_neg) #sum_approx += geometric(n_neg) list_n.append(n_neg) n_neg += 2 list_sum.append(sum_approx) # Tests the stopping condition. if fabs(sum_approx-L) < e: if already: break else: already = True else: already = False #print (sum_approx,n_pos,n_neg,already) return (sum_approx,list_n,list_sum) def harmonic(n): return pow(-1.0, n+1)/n def geometric(n): factor = -1 if n&1==1: factor = 1 return factor/(pow(2.0,n-1)) def harmonic_partial_sum(n): partial_sum = 0 for i in range(1,n+1): partial_sum += harmonic(i) return partial_sum def make_filename(L, e): filename = str(L) + ' - ' + str(e) return filename def print_graph(L,e,list_x,list_y,filename): list_L = [L for i in range(len(list_y))]

32

CDIGO FONTE

plt.plot(list_y) plt.plot(list_L) filename += '.png' plt.savefig(filename) plt.close() print 'Created \"' + filename + '\"' def print_graph2(L,e,list_x,list_y): fig = plt.figure() ax1 = fig.add_subplot(111) #t = np.arange(0.01, 10.0, 0.01) #s1 = np.exp(t) ax1.plot(list_y, 'b-') ax1.set_xlabel('n') # Make the y-axis label and tick labels match the line color. ax1.set_ylabel('Sum', color='b') for tl in ax1.get_yticklabels(): tl.set_color('b') ax2 = ax1.twinx() list_L = [L for i in range(len(list_y))] ax2.plot(list_L, 'r.') ax2.set_ylabel(str(L), color='r') for tl in ax2.get_yticklabels(): tl.set_color('r') plt.savefig("teste.png")

def write_statistics(L,e,list_n,list_s,name,first=False,last=False,print_list=Fal file_graph = name+'_'+str(e)+'.png' filename = name+'.tex' if first: try: os.remove(filename) except: print 'File ' + filename + ' doesn\'t exist.' file = open(filename,'a')

33

CDIGO FONTE

if first: file.write('\\documentclass[12pt,a4paper]{article}') file.write('\n\\usepackage[utf8]{inputenc}') file.write('\n\\usepackage[portuguese]{babel}') file.write('\n\\usepackage[T1]{fontenc}') file.write('\n\\usepackage{amsmath}') file.write('\n\\usepackage{amsfonts}') file.write('\n\\usepackage{amssymb}') file.write('\n\\usepackage{graphicx}') file.write('\n\\begin{document}') file.write('\n\\newpage') file.write('\n\\subsection{O numero $e$} ') if not first: file.write('\n \\newpage') # file.write('\n\\begin{verbatim} ')

file.write('\nTarget: ' + str(L)+CRLF) file.write('\nResult: '+str(list_s[len(list_s)-1])+CRLF) file.write('\nError: '+str(pow(10,-e))+CRLF) file.write('\nTotal terms: '+str(len(list_s))+CRLF) # Reverse engineering to obtain numbers of positives and negatives terms. n = len(list_n) qtd_pos,qtd_neg = 0,0 while (n>=0) and (qtd_pos == 0 or qtd_neg == 0): if (qtd_pos == 0) and (list_n[n-1] & 1 == 1): qtd_pos = list_n[n-1]/2 +1 if (qtd_neg ==0) and not (list_n[n-1] & 1 == 1): qtd_neg = list_n[n-1]/2 n -= 1 file.write('\n(+) terms:'+str(qtd_pos)+CRLF) file.write('\n(-) terms:'+str(qtd_neg)+CRLF) # Reverse engineering to get the positive and negative terms between turns. file.write('\n\\\\')

34

CDIGO FONTE

n = len(list_n) qtd_pos,qtd_neg = 0,0 list_qtd_pos = [] list_qtd_neg = [] for i in range (n): if list_n[i]&1==1: qtd_pos += 1 if qtd_neg > 0: list_qtd_neg.append(qtd_neg) qtd_neg = 0 else: qtd_neg += 1 if qtd_pos > 0: list_qtd_pos.append(qtd_pos) qtd_pos = 0 if qtd_pos > 0: list_qtd_pos.append(qtd_pos) qtd_pos = 0 if qtd_neg > 0: list_qtd_neg.append(qtd_neg) qtd_neg = 0 s = '\n(+): ' n = len(list_qtd_pos) if n < MAX_TURNS: file.write('\nBetween turns:\\\\') else: file.write('\nBetween turns (First '+str(MAX_TURNS)+' terms):\\\\') for i in range(min(n,MAX_TURNS)): suffix = ', ' if i==n-1: suffix = '.\\\\' if i==MAX_TURNS-1: suffix = '...\\\\' s+=str(list_qtd_pos[i])+suffix file.write(s) s = '\n(-): ' n = len(list_qtd_neg) for i in range(min(n,MAX_TURNS)): suffix = ', '

35

CDIGO FONTE

if i==n-1: suffix = '.\\\\' if i==MAX_TURNS-1: suffix = '...\\\\' s+=str(list_qtd_neg[i])+suffix file.write(s) if print_list: file.write('\n\nn;term\\\\') for n in range(len(list_n)): file.write('\n'+str(list_n[n])+';'+str(list_s[n])) file.write('\n\\textbf{Grafico:}\\\\') file.write('\n\includegraphics[scale=0.8]{'+file_graph+'}\\\\')

if last: file.write('\n\end{document}') file.close() print 'Created \"' + filename + '\"' def compute_rearrange(L,min_approx,name): for i in range(min_approx): j = i+1 # Compute the rearrange. print 'COMPUTING 10e-'+str(j) approx = pow(10,-j) filename = name+'_'+str(j) (sum,list_n,list_s) = rearrange(L, approx) # Print the graph. print ' Printing graph...' print_graph(L,approx,list_n,list_s,filename) # Compute the statistics. print ' Computing statistics...' first = j==1

36

CDIGO FONTE

last = j==min_approx write_statistics(L,j,list_n,list_s,name,first,last,False) print 'WE\'RE DONE!' if __name__ == '__main__': random = -1.234567 e = 2.71828182845904523536 pi = 3.141592653589793 sqrt_2 = 1.41421356237 ln_2 = 0.69314718056 #compute_rearrange(ln_2,7,"ln2") compute_rearrange(e, 5,"e") #compute_rearrange(pi, 7,"pi") #compute_rearrange(sqrt_2, 7,"r2") #compute_rearrange(random, error)

37

You might also like