def factorial(n):
if n == 0:
return 1
else:
return n*factorial(n-1)
sumVal = 0
alpha = 0.00001
n = 0
while True:
sumPrevious = sumVal
n += 1
sumVal += ((-1)**n)/(factorial(n)*(2*n + 1))
if abs(sumVal - sumPrevious) < alpha:
break
print("Сума ряду з точністю", alpha,"дорівнює",sumVal)
print(f"S({n-1}) = ",sumPrevious)
print(f"S({n}) = ",sumVal)
print(f"|S({n}) - S({n-1})| = ",abs(sumVal - sumPrevious),f"< {alpha}")
Сума ряду з точністю 1e-05 дорівнює -0.253175734260293
S(7) = -0.2531771931771931
S(8) = -0.253175734260293
= -0.2531771931771931
|S(8) - S(7)| = 1.458916900121121e-06 < 1e-05
import numpy as np
import math as mt
def func(x):
return np.power(x,4)/np.power(4-np.power(x,2),3/2)
def centralSquares(a,b,x,f):
n = x.shape[0] - 1
return ((b - a)/n)*f((x[0:n]+x[1:n+1])/2).sum()
def trapezium(a,b,x,f):
n = x.shape[0] - 1
return ((b - a)/(2*n))*(2*f(x[1:n]).sum() + f(x[0]) + f(x[n]))
def simpsons(a,b,x,f):
n = x.shape[0] - 1
return ((b - a)/(3*n))*(4*f(x[1:n:2]).sum() + 2*f(x[2:n:2]).sum() + f(x[0]) + f(x[n]))
def Runge(In,I2n,formula = centralSquares):
if (formula == trapezium) or (formula == centralSquares):
return abs(In - I2n)/3
elif formula == simpsons:
return abs(In - I2n)/15
def integration(a,b,f = func,formula = centralSquares,n=100,eps = 0.01):
if formula == trapezium:
text = 'трапецій'
textR = ' |In - I2n|/3'
elif formula == centralSquares:
text = 'середніх прямокутників'
textR = ' |In - I2n|/3'
elif formula == simpsons:
text = 'Сімпсона'
textR = ' |In - I2n|/15'
print('Інтегрування за формулою '+text)
while True:
print('Кількість точок n = ', n)
x = np.linspace(a,b,n + 1)
x2 = np.linspace(a,b,2*n + 1)
In = formula(a,b,x,f)
I2n = formula(a,b,x2,f)
print('In = ', In)
print('I2n = ', I2n)
print('Принцип Рунге для формули ' + text + ': ' + textR + ' = ',Runge(In,I2n,formula), end = ' ')
if Runge(In,I2n,formula) < eps:
print(' < ', eps)
break
else:
print(' > ', eps)
print('Збільшуємо кількість точок\n')
n += 10
print('\n\n\n')
a = 0
b = mt.sqrt(2)
n = 30
eps = 0.00001
print('Відрізок інтегрування [',a,',',b,']')
print('eps = ',eps)
integration(a,b,func,centralSquares,n,eps)
integration(a,b,func,trapezium,n,eps)
integration(a,b,func,simpsons,n,eps)
Відрізок інтегрування [ 0 , 1.4142135623730951 ]
eps = 1e-05
Інтегрування за формулою середніх прямокутників
Кількість точок n = 30
In = 0.28696435914033347
I2n = 0.2874490758697841
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 0.00016157224315020238 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 40
In = 0.2872469079098995
I2n = 0.28751990331448934
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 9.09984681966199e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 50
In = 0.2873778796358861
I2n = 0.2875526983812458
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 5.827291511989463e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 60
In = 0.2874490758697841
I2n = 0.2875705161916822
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 4.0480107299382485e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 70
In = 0.2874920223676872
I2n = 0.2875812608607118
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 2.9746164341519037e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 80
In = 0.28751990331448934
I2n = 0.287588235003634
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 2.2777229714887604e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 90
In = 0.2875390215938518
I2n = 0.2875930166529812
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 1.7998353043132315e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 100
In = 0.2875526983812458
I2n = 0.2875964370384107
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 1.4579552388297815e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 110
In = 0.28756281851346266
I2n = 0.28759896779037597
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 1.2049758971103644e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 120
In = 0.2875705161916822
I2n = 0.2876008926652994
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 1.0125491205733214e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 130
In = 0.2875765070870146
I2n = 0.28760239068884835
Принцип Рунге для формули середніх прямокутників: |In - I2n|/3 = 8.627867277917941e-06 < 1e-05
Інтегрування за формулою трапецій
Кількість точок n = 30
In = 0.2889056149775175
I2n = 0.28793498705892556
Принцип Рунге для формули трапецій: |In - I2n|/3 = 0.00032354263953064216 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 40
In = 0.2883396471470384
I2n = 0.287793277528469
Принцип Рунге для формули трапецій: |In - I2n|/3 = 0.00018212320618980296 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 50
In = 0.28807746527151257
I2n = 0.28772767245369935
Принцип Рунге для формули трапецій: |In - I2n|/3 = 0.00011659760593774049 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 60
In = 0.28793498705892556
I2n = 0.2876920314643548
Принцип Рунге для формули трапецій: |In - I2n|/3 = 8.098519819025689e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 70
In = 0.28784905728146437
I2n = 0.2876705398245758
Принцип Рунге для формули трапецій: |In - I2n|/3 = 5.9505818962857226e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 80
In = 0.287793277528469
I2n = 0.28765659042147906
Принцип Рунге для формули трапецій: |In - I2n|/3 = 4.556236899664704e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 90
In = 0.28775503146244846
I2n = 0.28764702652815016
Принцип Рунге для формули трапецій: |In - I2n|/3 = 3.600164476610009e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 100
In = 0.28772767245369935
I2n = 0.2876401854174725
Принцип Рунге для формули трапецій: |In - I2n|/3 = 2.9162345408950685e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 110
In = 0.287707428902594
I2n = 0.2876351237080283
Принцип Рунге для формули трапецій: |In - I2n|/3 = 2.4101731521897207e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 120
In = 0.2876920314643548
I2n = 0.28763127382801856
Принцип Рунге для формули трапецій: |In - I2n|/3 = 2.0252545445409442e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 130
In = 0.28768004830349564
I2n = 0.28762827769525506
Принцип Рунге для формули трапецій: |In - I2n|/3 = 1.7256869413525184e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 140
In = 0.2876705398245758
I2n = 0.28762590034264374
Принцип Рунге для формули трапецій: |In - I2n|/3 = 1.4879827310687599e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 150
In = 0.28766286873509606
I2n = 0.28762398240749837
Принцип Рунге для формули трапецій: |In - I2n|/3 = 1.2962109199228985e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 160
In = 0.28765659042147906
I2n = 0.28762241271255656
Принцип Рунге для формули трапецій: |In - I2n|/3 = 1.1392569640833461e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 170
In = 0.2876513870480617
I2n = 0.28762111178399963
Принцип Рунге для формули трапецій: |In - I2n|/3 = 1.0091754687358012e-05 > 1e-05
Збільшуємо кількість точок
Кількість точок n = 180
In = 0.28764702652815016
I2n = 0.2876200215905657
Принцип Рунге для формули трапецій: |In - I2n|/3 = 9.001645861483887e-06 < 1e-05
Інтегрування за формулою Сімпсона
Кількість точок n = 30
In = 0.2876177165718384
I2n = 0.28761144441939485
Принцип Рунге для формули Сімпсона: |In - I2n|/15 = 4.1814349623544206e-07 < 1e-05
def lezhandr(x,n):
return factorial(n)*(2**n)*(x**n)