Aula13 somas e somas



Aula 14 - Somas de SériesVárias fun??es matemáticas podem ser calculadas através de soma de uma série que se aproxima do valor real. Em geral, quanto mais termos da série s?o somados mais se chega próximo do valor real. S?o as séries de polin?mios, séries de Taylor, séries de Fourier, etc. com grande aplica??o em Calculo Numérico.? a forma com que s?o implementadas as várias fun??es matemáticas existentes nas linguagens de programa??o ou a forma com que s?o feitos os cálculos nas calculadoras científicas.Vamos resolver alguns problemas que calculam somas de números reais (float).P14.1) Fun??o que recebe n > 0 inteiro e x real (float), calcula e devolve o valor da soma:x + x3 / 3 + x5 / 5 + . . . + x2n-1 / (2n-1)def soma_serie_1(n, x): ''' P14.1 - Fun??o que recebe n > 0 inteiro e x real (float), calcula e devolve o valor da soma: x + x**3 / 3 + x**5 / 5 + ... x**(2n - 1) / (2n - 1). ''' soma = 0.0 # inicia a soma # Variar k de 1 a n e somar cada termo for k in range(1, n + 1): soma = soma + pow(x, 2 * k - 1) / (2 * k - 1) # o comando acima também poderia ser escrito: # soma = soma + x ** (2 * k - 1) / (2 * k - 1) # devolve o valor calculado return somaNesta solu??o, usamos pow(x, 2 * k - 1). O cálculo de pow, ou alternativamente a opera??o de exponencia??o (**), exige uma série de multiplica??es sucessivas a cada nova parcela ou cada nova repeti??o. Uma forma mais eficiente seria calcular um termo a partir do anterior, multiplicando a potência de x anterior por x2. A solu??o fica:def soma_serie_1(n, x): ''' P14.1 - Fun??o que recebe n > 0 inteiro e x real (float)calcula e devolve o valor da soma: x + x**3 / 3 + x**5 / 5 + ... x**(2n - 1) / (2n - 1). ''' soma, pot = 0.0, x # inicia a soma e a potencia de x # Variar k de 1 a n e somar cada termo for k in range(1, n + 1): soma = soma + pot / (2 * k - 1) pot = pot * x * x return somaOu ainda:def soma_serie_1(n, x): ''' P14.1 - Fun??o que recebe n > 0 inteiro e x real (float) calcula e devolve o valor da soma: x + x**3 / 3 + x**5 / 5 + ... x**(2n - 1) / (2n - 1). ''' soma, pot = 0.0, x # inicia a soma e a potencia de x # Variar k de 1, 3, 5, ... for k in range(1, 2 * n, 2): soma = soma + pot / k pot = pot * x * x return somaSempre daremos preferência ao cálculo que envolve menos opera??es. Em muitos casos, cada termo é uma fun??o simples do termo anterior. P14.2) Idem calculando x – x2/2 + x3/3 – x4/4 + . . . ± xn/n. Parecida com a anterior, mas o sinal vai se alternando.def soma_serie_2(n, x): ''' P14.2 – Fun??o que recebe n > 0 e x real, calcula e devolve x - x**2 / 2 + x**3 / 3 - x**4 / 4 + ... (+/-)x**n / n. ''' soma, pot = 0.0, x # inicia a soma e a potência de x # Variar k de 1 a n e somar cada termo for k in range(1, n + 1): soma = soma + pot / k # alterna o sinal da potência de x pot = - pot * x return somaP14.3) Idem calculando x/2 – 3x2/4 + 5x3/8 – 7x4/16 + . . . ± (2n-1) xn/2n . O sinal também vai se alternando.Vamos resolver de maneira bem estruturada. Cada termo tem 4 partes:O sinal sinal = 1, -1, 1, -1, ...O fator do numerador num = 1, 3, 5, 7, ...A potência de x pot = x, x2, x3, x4, ...O denominador den = 2, 4, 8, 16, ...Cada termo é ent?o: sinal * num * pot / dendef soma_serie_3(n, x): ''' P14.3 – Fun??o que recebe n > 0 e x real, calcula e devolve x / 2 - 3x**2 / 4 + 5x**3 / 8 + ... (+/-)(2n - 1) * x**n - 1) / 2**n. ''' # inicia cada uma das variáveis soma, sinal, num, pot, den = 0.0, 1, 1, x, 2 # Variar k de 1 a n for k in range(1, n + 1): soma = soma + sinal * num * pot / den sinal = - sinal num = num + 2 pot = pot * x den = den * 2 # devolve o resultado return somaP14.4) Idem calculando x + x2/2! + x3/3! + x4/4! + . . . + xn/n!A express?o do termo geral desta soma escrita em Python e usando as fun??es intrínsecas seria:pow(x, k) * fatorial(k) para k = 1, 2, 3, ..., nVale aqui o mesmo comentário que fizemos anteriormente. Usando essa forma, calculamos cada termo independente do anterior. Uma forma mais eficiente é notar que o termo de ordem k+1 é o termo de ordem k multiplicado por x / (k+1).def soma_serie_4(n, x): ''' P14.4 - Dado n > 0 e x real, calcular x + x2/2! + x3/3! + x4/4! + . . . + xn/n!. ''' soma, termo = 0.0, 1.0 # inicia a soma e o termo # Variar k de 1 a n for k in range(1, n + 1): # vamos calcular o termo antes da soma termo = termo * x / k soma = soma + termo # devolve o resultado return somaOutra forma:def soma_serie_4(n, x): ''' P14.4 - Dado n > 0 e x real, calcular x + x2/2! + x3/3! + x4/4! + . . . + xn/n!. ''' soma, termo = 0.0, x # inicia a soma e o termo # Variar k de 1 a n for k in range(1, n + 1): # claculando a soma antes do novo termo soma = soma + termo termo = termo * x / (k + 1) # devolve o resultado return somaP14.5) Fun??o Harmonico(n) que recebe inteiro n > 0 e devolve o valor da soma:1 + 1/2 + 1/3 + 1/4 + . . . + 1/n. Esta soma é conhecida como o n-ésimo número harm?nico.P14.6) Fun??o Harmonico(epsilon) que recebe número epsilon > 0 bem pequeno (exemplo: 0.00001) e calcula a soma anterior para todos os termos maiores ou iguais a epsilon. Ou seja, calcular 1 + 1/2 + 1/3 + ... 1/k, tal que 1/i ≥ epsilon (i = 1, 2, ..., k) e 1 / (k+1) < epsilon. def Harmonico(epsilon): ''' P14.6) Fun??o Harmonico(epsilon) que recebe número epsilon > 0 bem pequeno(exemplo: 0.00001) e calcula a soma de todos os termos maiores ou iguais a epsilon. Ou seja, calcular 1 + 1/2 + 1/3 + ... 1/k, tal que 1/i ≥ epsilon para i = 1, 2, ..., k e 1 / (k+1) < epsilon. ''' h, k = 0, 1 # inicia a soma # Somar todos os termos maiores ou iguais a epsilon while 1 / k >= epsilon: h = h + 1 / k k = k + 1 return hP14.7) Fun??o Harmonico(sup) que recebe um valor sup > 0 e calcula a soma acima até que o valor da soma seja menor ou igual a sup. Note que o valor da soma é crescente e divergente.P14.8) idem para a fun??o soma_inv_fat(epsilon) que calcula a soma 1 + 2/2! + 3/3! + . . . + k/k! até encontrar um k tal que k/(k +1)! < epsilon.Considere novamente os exercícios 14.1 a 14.4. Quando 0 < x ≤ 1, os termos das somas em módulo s?o decrescentes. Refa?a os exercícios recebendo como par?metro x (0 < x ≤ 1) e epsilon e calcule a soma até encontrar um termo que seja menor que epsilon. Ou seja:14.1A) def soma_serie_1(x, epsilon)14.1B) def soma_serie_2(x, epsilon)14.1C) def soma_serie_3(x, epsilon)14.1D) def soma_serie_4(x, epsilon)Séries de TaylorExistem fun??es interessantes que s?o calculadas através de somas de séries por aproxima??o. S?o as séries de Taylor. ? desta forma que algumas fun??es do módulo math s?o implementadas. A fun??o seno de x, pode ser calculada pela fórmula de Taylor da seguinte forma:sen(x) = x/1! – x3/3! + x5/5! - . . . + (-1)k . x2k+1/(2k+1)! + . . . A série é infinita, mas seus termos, em módulo, s?o decrescentes. Portanto, para obter uma boa aproxima??o de sen x, basta calcular a soma, até que termo corrente em módulo seja menor que um número epsilon bem pequeno, ou seja, bem próximo de zero. Outra forma é calcular o valor da soma dos n primeiros termos. A soma converge muito rapidamente para o valor real do seno.P14.9) Fun??o Seno(x, n) que calcula a soma dos n primeiros termos da série do seno.P14.10) Fun??o Seno(x, epsilon) que calcula a mesma soma até encontrar um termo em módulo menor que epsilon.Da mesma forma o cosseno pode ser calculado por:cos(x) = 1 – x2/2! + x4/4! – x6/6! + . . . + (-1)k . x2k/(2k)! + . . . P14.11) Fun??o Cosseno(x, n) que calcula a soma dos n primeiros termos da série do cosseno.P14.12) Fun??o Cosseno(x, epsilon) que calcula a mesma soma até encontrar um termo em módulo menor que epsilon.A fun??o arctangente de x para |x| < 1 pode ser calculada por:arctan (x) = x – x3/3 + x5/5 – x7/7 + . . .P14.13) Fun??o Arctang(x, n) que calcula a soma dos n primeiros termos da série do arctangente.P14.14) Fun??o Arctang(x, epsilon) que calcula a mesma soma até encontrar um termo em módulo menor que epsilon.A fun??o exponencial pode ser calculada por:ex = 1 + x + x2/2! + x3/3! + x4/4! + ... + xn/n! + ...P14.15) Fun??o Expo(x, n) que calcula a soma dos n primeiros termos da série da exponencial.P14.16) Fun??o Expo(x, epsilon) que calcula a mesma soma até encontrar um termo em módulo menor que epsilon.A fun??o ln(1+x) para |x| < 1 pode ser calculada por:ln(1+x) = x – x2/2 + x3/3 – x4/4 + ... + (-1)nxn+1/n+1 + ...P14.17) Fun??o Logn(x, n) que calcula a soma dos n primeiros termos da série do logaritmo natural.P14.18) Fun??o Logn(x, epsilon) que calcula a mesma soma até encontrar um termo em módulo menor que epsilon. ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download