#!/usr/bin/env python3 """ Program całkujący ćwiartkę okręgu metodą midpoint (punktu środkowego) i rysujący wykres. """ import numpy as np import matplotlib.pyplot as plt def calka(N): """ Oblicza całkę oznaczoną ćwiartki okręgu (y=sqrt(1-x**2) metodą midpoint. """ x = np.linspace(0, 1, N + 1) #wartości x oddzielające przedziały xc = (x[1:] + x[:-1])/2 #środki przedziałów return np.sum(np.sqrt(1 - xc**2))/N #zwraca wartości y dla środków przedziałów def wykres_calka(Nbar,Nline = 200): """ Funkcja rysująca wykres. Zarówno dla czytelności, jak i zaoszczędzenia czasu obliczeniowego, warto wywoływać ją z N znacznie mniejszym niż w praktycznych obliczeniach. Nbar - liczba przedziałów do narysowania Nline - (opcjonalna) liczba punktów do narysowania ćwiartki okręgu """ x = np.linspace(0, 1, Nbar + 1) #wartości x (oddzielające przedziały) do wykresu słupkowego xc = (x[1:] + x[:-1])/2 #środki przedziałów yc = np.sqrt(1 - xc**2) #wartości y dla środków przedziałów x2 = np.linspace(0, 1, Nline) #wartośći x dla wykresu liniowego plt.bar(xc,yc,1/Nbar,edgecolor="k",zorder=1) #wykres słupkowy plt.plot(x2,np.sqrt(1 - x2**2),color="red",linewidth=2,alpha=0.66,zorder=2) #wykres liniowy plt.axis("scaled") plt.show() print("N, "+chr(0x03c0)+", błąd") for n in (10,100,1000,10000,100000): wynik=4*calka(n) print(n,wynik,np.pi-wynik) wykres_calka(6)