Work in progress....

MNUM – SimpsonCsv

Posted: May 10th, 2008 | Author: lrei | Filed under: Programming, Python | Tags: , , , | Comments Off

This one instead reads the values from a CSV file containing experimental data.
Link to my previous implementation of Simspson’s rule.


import csv

class simpsonCsv:
    def __init__(self, filename):
        reader = csv.reader(open(filename, "rb"))

        xlist = []
        ylist = []
       
        for row in reader:
            try:
               x = float(row[0])
               y = float(row[1])
            except TypeError:
                continue
            except ValueError:
                continue
            xlist.append(float(x))
            ylist.append(float(y))
       
        self.len = len(xlist) - 1
        self.xstart = xlist[0]
        self.xend = xlist[self.len]
        self.interval = self.xend / self.len
       
        self.data = map(None, xlist, ylist)
   
    def f(self, x):
        for (u,v) in self.data:
            if u == x:
                return v
               
        print "Bad x value (probably bad n): %s" % (x)
        return None
       
       
   
    def simpson(self, n):
        "Approximate the definite integral of f from a to b by Simpson's rule."

        if self.len % n != 0:
            print "Error: %d mod %d is not zero but should be." % (self.len, n)
            return -1
       
       
        h  = float(self.xend - self.xstart)/n
       
   
        si = 0.0
        sp = 0.0
        xk = 0.0
   
        for i in range(1, n, 2):
            xk = self.xstart + i*h
            si += self.f(xk)
   
        for i in range(2, n, 2):
            xk = self.xstart + i*h
            sp += self.f(xk)
       
       
        s = 2*sp + 4*si + self.f(self.xstart) + self.f(self.xend)

        return (h/3)*s
   

filename = "integral_tabela_CO2_csv.csv"
s = simpsonCsv(filename)

print s.simpson(20)
print s.simpson(40)
print s.simpson(60)
print s.simpson(100)
print s.simpson(300)
print s.simpson(600)
print s.simpson(900)
print s.simpson(1800)
Share and Enjoy:
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Reddit
  • StumbleUpon
  • Technorati
  • email
  • Twitter
Creative Commons License
This work, unless otherwise expressly stated, is licensed under a Creative Commons Attribution 3.0 Unported License.

Related posts:

  1. MNUM – Simpson’s Rule in Python
  2. MNUM – Gauss
  3. Numerical Methods and Python


No Comments on “MNUM – SimpsonCsv”

  1. 1 andrezero said at 23:46 on May 10th, 2008:

    cheguei aqui por causa do python (que ando a aprender aos poucos) mas o que me impressionou mesmo foi o color coding.. isto é um plugin do wordpress? por defeito no wordpress.com? será que consigo instalar no meu?

  2. 2 lrei said at 11:38 on May 11th, 2008:

    @andrezero
    http://faq.wordpress.com/2007/09/03/how-do-i-post-source-code/