mathPlotting - mathPlotting.py
Cerca
 











mathPlotting.py

Caricato da: Delta
Scarica il programma completo

  1. #!/usr/bin/env python
  2. #*-* coding:utf-8 *-*
  3.  
  4.  
  5.  
  6. __author__="Balzano Alessandro aka delta (alfateam123@gmail.com or http://twitter.com/deltainf)"
  7. __license__='CC v3.0 BY-SA'
  8.  
  9. import re
  10. import logging
  11. import matplotlib.pyplot as plt
  12. import numpy as np
  13.  
  14. import os
  15. LOG_FILE=os.path.abspath('mathPlotting_log.txt')
  16. logging.basicConfig(filename=LOG_FILE, level=logging.DEBUG)
  17.  
  18. class Function(object):
  19.     """
  20.    this class is the Function class.
  21.    the aim of this class is
  22.    >evaluate function
  23.    """
  24.     def __init__(self,formula):
  25.         """
  26.        format: name(par1, par2, ...)=formula
  27.        example
  28.        >f(x)=2+x
  29.        >G(x)=x**2+3**(1/2)
  30.        >j(x, y)=x**(y-x)
  31.        """
  32.         self.parameters=self.get_parameters(formula)
  33.         self.name=self.get_name(formula)
  34.         self.formula=self.get_formula(formula)
  35.         self.values=[]
  36.         self.x_values=[]
  37.    
  38.     def get_parameters(self, formula=None):
  39.         if formula:
  40.             openPar, closedPar=formula.index('('), formula.index(')')
  41.             #tolgo gli spazi con filter, poi ottengo una list splittando la stringa
  42.             return filter(lambda c: c!=" ", formula[openPar+1:closedPar]).split(',')
  43.         else:
  44.             return self.parameters
  45.    
  46.     def get_name(self, formula=None):
  47.         if formula:
  48.             openPar=formula.index('(')
  49.             #il nome si trova prima dei parametri
  50.             return formula[:openPar]
  51.         else:
  52.             return self.name
  53.    
  54.     def get_formula(self, formula=None):
  55.         if formula:
  56.             equal=formula.index('=')
  57.             #la formula si trova dopo il simbolo di uguale (=)
  58.             return formula[equal+1:]
  59.         else:
  60.             return self.formula
  61.    
  62.     def evaluate_with_parameters(self, params=[]):
  63.         if not params:
  64.             pass
  65.         else:
  66.             formula=self.formula[:] #we work on a copy of the formula
  67.             paramsList=zip(self.parameters, [str(p) for p in params])
  68.             for param in paramsList:
  69.                 regex=re.compile(param[0])
  70.                 formula=regex.sub('('+str(param[1])+')', formula)
  71.             return eval(formula)
  72.    
  73.     def evaluate(self, lowerLimit=-10, higherLimit=10, valueNumber=100):
  74.         self.x_values=np.arange(start=lowerLimit, stop=higherLimit,step=float(higherLimit-lowerLimit)/float(valueNumber))
  75.         self.values=[self.evaluate_with_parameters([n]*len(self.parameters)) for n in self.x_values]
  76.         return self.values
  77.  
  78. class Plotter(object):
  79.     def __init__(self, functions=[]):
  80.         self.functions=list()
  81.         for f in functions:
  82.             self.add_function(f)
  83.  
  84.     def add_function(self, new_function):
  85.         if isinstance(new_function, Function):
  86.             self.functions.append(new_function)
  87.        
  88.     def remove_function(self, function_name):
  89.         if [f.name for f in self.functions].count(function_name):
  90.             pass
  91.  
  92.     def plot(self):
  93.         """ attualmente plot stampa solo una funzione. """
  94.         f=self.functions[0].evaluate()
  95.         logging.debug('Plotter::plot %r'%f)
  96.         plt.plot(f)
  97.         plt.xlabel('X axis')
  98.         plt.ylabel('Y axis')
  99.         plt.show()
 

Creative Commons License
Il layout di questo sito è concesso sotto licenza Creative Commons.
Per maggiori informazioni sulle licenze dei contenuti del sito, clicca.