Dependências
Para correr este código é necessário instalar os seguintes pacotes:
Código
- Código: Selecionar todos
#! /usr/bin/env python
# -*- Mode: Python; coding: utf-8; indent-tabs-mode: nil; tab-width: 4 -*-
'''
Created on Feb 6, 2012
@author: luis
'''
import numpy as np
import matplotlib.pyplot as plt
# Define a funcao
def aproxima_curva(x,y):
quant = 20.0
passo = (x[1] - x[0]) / quant
xf = np.arange(0.0, x[len(x) - 1] + passo, passo)
yf = np.arange(0.0, x[len(x) - 1] + passo, passo)
for n in range(len(xf)):
if n % quant == 0 and (n / quant + 1) < len(x):
a = y[n/quant]
b = y[n/quant + 1]
c = ((b - a) / 2)
elif (n / quant + 1) >= len(x):
a = y[n/quant]
b = a - 1
c = ((b - a) / 2)
if n >= quant:
m = (n - (int(n / quant) * quant)) / quant
else:
m = n / quant
yf[n] = a + c - (c * np.cos(m * np.pi))
return (xf, yf)
# Fim da funcao
# Executa codigo de teste a funcao
if __name__ == '__main__':
passo = 0.5
x = np.arange(0.0, 10.0 + passo, passo)
y = np.random.random(len(x))
b = len(x)
print b, '\n', y
x1, y1 = aproxima_curva(x,y)
plt.figure()
plt.plot(x, y, ':', x1, y1)
plt.legend(['y[x]', 'y(x)'])
plt.axis([-1.0, 11.0, -1.0, 2.0])
plt.title('Aproximacao por senos')
plt.show()
Resultado
(clique na imagem para a ver melhor)
Claro que o código ainda precisa de ser otimizado, por isso se houver sugestões, serão bem vindas
