File: check.py

package info (click to toggle)
gerris 20131206%2Bdfsg-21
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 14,252 kB
  • sloc: ansic: 66,595; sh: 15,922; f90: 1,513; makefile: 1,150; fortran: 696; python: 493; awk: 104; lisp: 89; xml: 27
file content (69 lines) | stat: -rw-r--r-- 1,558 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
from sys import *
from math import *

class Curve:
	def read(self,file,x,y):
		line = file.readline()
		while line:
			record = line.split()
			if record[0] != "#":
				self.l.append((float(record[x-1]),float(record[y-1])))
			line = file.readline()
	def __init__(self,f=None,x=1,y=2):
		self.l = []
		if f:
			self.read(open(f,'r'),x,y)
	def value(self,x):
		l,u = 0,len(self.l)-1
		if u == l:
			return self.l[u][1]
		while u - l > 1:
			i = (u + l)/2
			if self.l[i][0] > x:
				u = i
			else:
				l = i
		x0,x1,y0,y1 = self.l[l][0],self.l[u][0],self.l[l][1],self.l[u][1]
		return y0 + (x - x0)/(x1 - x0)*(y1 - y0)
	def __sub__(self,other):
		c = Curve()
		if len(self.l) < len(other.l):
			for p in self.l:
				c.l.append((p[0], p[1] - other.value(p[0])))
		else:
			for p in other.l:
				c.l.append((p[0], self.value(p[0]) - p[1]))
		return c
	def sum(self,f=lambda x: x):
		s = 0.
		p1 = None
		for p in self.l:
			if p1:
				s += (p[0] - p1[0])*f((p[1] + p1[1])/2.)
			p1 = p
		return s
	def max(self,f=lambda x: x):
		m = None
		for p in self.l:
			v = f(p[1])
			if not m or v > m:
				m = v
		return m
	def min(self,f=lambda x: x):
		m = None
		for p in self.l:
			v = f(p[1])
			if not m or v < m:
				m = v
		return m
	def mean(self):
		return self.sum()/self.sum(lambda x: 1.)
	def norm1(self):
		return self.sum(lambda x: abs(x))/self.sum(lambda x: 1.)
	def norm2(self):
		return sqrt(self.sum(lambda x: x*x)/self.sum(lambda x: 1.))
	def normi(self):
		return self.max(lambda x: abs(x))
	def write(self):
		for p in self.l:
			print(p[0],p[1])