Programowanie strukturalne w Pythonie Obliczanie całki z funkcji jednej zmiennej metodą trapezów na siatce nierównomiernej integral.py <sxh python> “”“Calculate integral. ”“” import sys def main(): [fun, a, b] = parse_command_line(sys.argv) mesh = read_mesh("mesh.dat") a = mesh[0][0] b = mesh[-1][0] integral = integrate(mesh, fun) print("Integral of %s in [%g %g] is %g" %(fun, a, b, integral)) def parse_command_line(argv): """Parse command line""" argc = len(sys.argv) if len(sys.argv) > 1: fun = sys.argv[1] else: print("Using default function f(x) = x^2") fun = "x**2" if len(sys.argv) > 3: a = float(sys.argv[2]) b = float(sys.argv[3]) else: print("Using default domian [0,1]") a = 0.0 b = 1.0 return [fun, a, b] def read_mesh(filename): """Read from file a list of nodes""" nodes = list() with open(filename, 'r') as f: for l in f: nodes.append(tuple(float(x) for x in l.split())) return nodes def integrate(mesh, fun): """Integrate function fun using numerical integration on given mesh""" mesh_fun = make_mesh_fun(mesh, fun) nelem = len(mesh)-1 integral = 0.0 for i in range(nelem): integral = integrate_element(i, mesh, mesh_fun) return integral def make_mesh_fun(mesh, fun): xcoord = [ node[0] for node in mesh ] discrete_fun = [ eval(fun) for x in xcoord ] return discrete_fun def integrate_element(i, mesh, mesh_fun): x1 = mesh[i][0] x2 = mesh[i+1][0] f1 = mesh_fun[i] f2 = mesh_fun[i+1] h = x2 - x1 integral = h * (f1+f2) / 2.0 return integral if name == 'main': main() </sxh> pl/teaching/subjects/oop/labs/lab4.txt Last modified: 2017/10/02 15:37(external edit)