Integrale di Riemann Nelle seguenti figure è rappresentato il grafico della funzione f(x, y) = x 2 y 2 +1. Nella prima figura, assieme al grafico è rappresentata una somma inferiore di Riemann mentre nella seconda figura una somma superiore. Infine nella terza figura è rappresentato il volume sotteso dal grafico. La misura del volume è data dall integrale doppio della funzione. Somme inferiori=3.200 X Y Somme Superiori=4.800 X Y 1
Integrale = 4 Y X I grafici sono stati ottenuti con il seguente programma in Python (http://www.python.it/). Occorre avere installato anche il pacchetto gnuplot.py (http://gnuplot-py.sourceforge.net/). Eseguendo il programma si possono visualizzare somme di Riemann superiori e inferiori relative a diverse partizioni del dominio. #! /usr/bin/env python # -*- coding: utf-8 -*- # import math import Gnuplot, Gnuplot.funcutils import cmath import numpy # inizializza il grafico e fissa la lunghezza # degli assi e le proporzioni g = Gnuplot.Gnuplot() g( set xrange [-1:1] ) g( set yrange [-1:1] ) g( set zrange [0:2] ) g( set isosamples 30,30 ) g( set urange [-1:1] ) g( set vrange [-1:1] ) g( unset xtics; unset ytics; unset ztics ) g( unset key; set hidden3d ) g( set parametric ) g( set terminal wxt font "LMSans12" ) g( set termoption enhanced ) g( set data style lines ) 2
g( set xlabel "X" font "LMMathItalic7" ) g( set ylabel "Y" font "LMMathItalic7" ) # definisce la funzione da integrare # # definizione per gnuplot g( f(u,v) = u**2 - v **2 + 1 ) Comando_gnuplot = "u,v,f(u,v)" # definizione per python def f(x,y): return x * x - y * y + 1 # definisce la griglia while True: a = float(-1) b = float(1) c = float(-1) d = float(1) n = 4 m = 4 n = input("numero intervalli sell asse X (0 per fermare il ciclo): ") if n < 1: break m = input("numero intervalli sell asse Y: ") xstep = (b - a) / n ystep = (d - c) / m xgrid = numpy.linspace(a,b,n+1) ygrid = numpy.linspace(c,d,m+1) # Calcola i minimi della funzione F = numpy.zeros((n,m),float) F[i,j] = min(f(xgrid[i],ygrid[j]),\ f(xgrid[i+1],ygrid[j]),\ f(xgrid[i],ygrid[j+1]),\ f(xgrid[i+1],ygrid[j+1])) # Calcola i massimi della funzione G = numpy.zeros((n,m),float) G[i,j] = max(f(xgrid[i],ygrid[j]),\ 3
f(xgrid[i+1],ygrid[j]),\ f(xgrid[i],ygrid[j+1]),\ f(xgrid[i+1],ygrid[j+1])) # Grafico delle somme inferiori A = numpy.zeros((2*m,2*n,3),float) A[2 * j,2 * i,:] = numpy.array([xgrid[i],ygrid[j],f[i,j]]) A[2 * j,2 * i+1,:] = numpy.array([xgrid[i+1],ygrid[j],f[i,j]]) A[2 * j +1,2 * i,:] = numpy.array([xgrid[i],ygrid[j+1],f[i,j]]) A[2 * j +1,2 * i+1,:] = numpy.array([xgrid[i+1],ygrid[j+1],f[i,j]]) # Somme inferiori Somma_inf = F.sum() * xstep * ystep # Grafico delle somme superiori B = numpy.zeros((2*m,2*n,3),float) B[2 * j,2 * i,:] = numpy.array([xgrid[i],ygrid[j],g[i,j]]) B[2 * j,2 * i+1,:] = numpy.array([xgrid[i+1],ygrid[j],g[i,j]]) B[2 * j +1,2 * i,:] = numpy.array([xgrid[i],ygrid[j+1],g[i,j]]) B[2 * j +1,2 * i+1,:] = numpy.array([xgrid[i+1],ygrid[j+1],g[i,j]]) # Somme superiori Somma_sup = G.sum() * xstep * ystep # Bordo per somme inferiori bordo_inf = numpy.zeros(((2*n+2*m)*3,3),float) bordo_inf[3 * i,:] = numpy.array([xgrid[i],ygrid[0],0]) bordo_inf[3 * i + 1,:] = numpy.array([xgrid[i],ygrid[0],f[i,0]]) bordo_inf[3 * i + 2,:] = numpy.array([xgrid[i],ygrid[0],0]) bordo_inf[3 * n + 3 * j,:] = numpy.array([xgrid[n],ygrid[j],0]) bordo_inf[3 * n + 3 * j + 1,:] = numpy.array([xgrid[n],ygrid[j],f[n-1,j]]) bordo_inf[3 * n + 3 * j + 2,:] = numpy.array([xgrid[n],ygrid[j],0]) bordo_inf[3 * (n+m) + 3 * i,:] = numpy.array([xgrid[n-i],ygrid[m],0]) bordo_inf[3 * (n+m) + 3 * i + 1,:] = numpy.array([xgrid[n-i],ygrid[m],f[n-i-1,m-1]]) bordo_inf[3 * (n+m) + 3 * i + 2,:] = numpy.array([xgrid[n-i],ygrid[m],0]) bordo_inf[3 * (2*n+m) + 3 * j,:] = numpy.array([xgrid[0],ygrid[m-j],0]) 4
bordo_inf[3 * (2*n+m) + 3 * j + 1,:] = numpy.array([xgrid[0],ygrid[m-j],f[0,m-j-1]]) bordo_inf[3 * (2*n+m) + 3 * j + 2,:] = numpy.array([xgrid[0],ygrid[m-j],0]) # Bordo per somme superiori bordo_sup = numpy.zeros(((2*n+2*m)*3,3),float) bordo_sup[3 * i,:] = numpy.array([xgrid[i],ygrid[0],0]) bordo_sup[3 * i + 1,:] = numpy.array([xgrid[i],ygrid[0],g[i,0]]) bordo_sup[3 * i + 2,:] = numpy.array([xgrid[i],ygrid[0],0]) bordo_sup[3 * n + 3 * j,:] = numpy.array([xgrid[n],ygrid[j],0]) bordo_sup[3 * n + 3 * j + 1,:] = numpy.array([xgrid[n],ygrid[j],g[n-1,j]]) bordo_sup[3 * n + 3 * j + 2,:] = numpy.array([xgrid[n],ygrid[j],0]) bordo_sup[3 * (n+m) + 3 * i,:] = numpy.array([xgrid[n-i],ygrid[m],0]) bordo_sup[3 * (n+m) + 3 * i + 1,:] = numpy.array([xgrid[n-i],ygrid[m],g[n-i-1,m-1]]) bordo_sup[3 * (n+m) + 3 * i + 2,:] = numpy.array([xgrid[n-i],ygrid[m],0]) bordo_sup[3 * (2*n+m) + 3 * j,:] = numpy.array([xgrid[0],ygrid[m-j],0]) bordo_sup[3 * (2*n+m) + 3 * j + 1,:] = numpy.array([xgrid[0],ygrid[m-j],g[0,m-j-1]]) bordo_sup[3 * (2*n+m) + 3 * j + 2,:] = numpy.array([xgrid[0],ygrid[m-j],0]) Titolo = "Somme inferiori=" + "%.3f" % Somma_inf g.title(titolo) g.splot(gnuplot.func(comando_gnuplot),\ Gnuplot.Data(A, with_="lines"),\ Gnuplot.Data(bordo_inf, with_="lines lt 4")) ferma = raw_input( Press Enter ) Titolo = "Somme Superiori=" + "%.3f" % Somma_sup g.title(titolo) g.splot(gnuplot.func(comando_gnuplot),\ Gnuplot.Data(B, with_="lines"),\ Gnuplot.Data(bordo_sup, with_="lines lt 4")) g( x(u) = u; y(u) = -1; x1(u) = u; y1(u) = 1;\ x2(u) = 1; y2(u) = u; x3(u) = -1; y3(u) = u ) Nuovo_comando = "u,v,f(u,v),x(u),y(u),((v+1)/2)*f(x(u),y(u)),\ x1(u),y1(u),((v+1)/2)*f(x1(u),y1(u)),\ x2(u),y2(u),((v+1)/2)*f(x2(u),y2(u)),\ x3(u),y3(u),((v+1)/2)*f(x3(u),y3(u))" g( set terminal wxt font "LMMathItalic7" ) Titolo = "{/LMMathSymbols10=20 \342\210\253}{/LMMathSymbols10=20 \342\210\253}\ f(x,y) dxdy = 4" g.title(titolo) 5
g.splot(gnuplot.func(nuovo_comando)) ferma = raw_input( Press Enter ) 6