π ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΠΊΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python: ΠΏΡΠΎΡΡΠΎΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΠΈΡ
ΠΠ»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
1. ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΡΠ΅ΠΊΡΠΈΠΈ:
def bisection_method(function, a, b, tolerance):
while abs(b - a) > tolerance:
c = (a + b) / 2
if function(c) == 0:
return c
elif function(c) * function(a) < 0:
b = c
else:
a = c
return (a + b) / 2
# ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
def equation(x):
return x**2 - 4
root = bisection_method(equation, 0, 2, 0.001)
print("ΠΠΎΡΠ΅Π½Ρ:", root)
2. ΠΠ΅ΡΠΎΠ΄ ΠΡΡΡΠΎΠ½Π°-Π Π°ΡΡΠΎΠ½Π°:
def newton_method(function, derivative, initial_guess, tolerance):
x = initial_guess
while abs(function(x)) > tolerance:
x = x - function(x) / derivative(x)
return x
# ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ:
def equation(x):
return x**2 - 4
def derivative(x):
return 2 * x
root = newton_method(equation, derivative, 2, 0.001)
print("ΠΠΎΡΠ΅Π½Ρ:", root)
ΠΠΎΠΌΠΈΠΌΠΎ ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², Π²Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ NumPy ΠΈ SciPy.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΠΊΠΎΡΠ½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python
ΠΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ Π½Π°ΡΡΠ½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ - ΠΏΠΎΠΈΡΠΊ ΠΊΠΎΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ. Π Python Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΠ΅ΡΠΈΡΡ ΡΡΡ Π·Π°Π΄Π°ΡΡ. Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ .
ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΡΠ΅ΠΊΡΠΈΠΈ
ΠΠ΅ΡΠΎΠ΄ Π±ΠΈΡΠ΅ΠΊΡΠΈΠΈ - ΡΡΠΎ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ½ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ΅ΠΎΡΠ΅ΠΌΠ΅ ΠΎ ΠΏΡΠΎΠΌΠ΅ΠΆΡΡΠΎΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ Π³Π»Π°ΡΠΈΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠ΅Π½ΡΠ΅Ρ Π·Π½Π°ΠΊ Π½Π° ΠΊΠΎΠ½ΡΠ°Ρ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π°, ΡΠΎ Π½Π° ΡΡΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ Π΅ΡΡΡ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΡΠ΅Π½Ρ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
def bisection_method(f, a, b, epsilon):
if f(a) * f(b) >= 0:
return None
while abs(b - a) > epsilon:
c = (a + b) / 2
if f(c) == 0:
return c
elif f(c) * f(a) < 0:
b = c
else:
a = c
return (a + b) / 2
# ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΡΠ΅ΠΊΡΠΈΠΈ Π΄Π»Ρ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ
def f(x):
return x**2 - 4
root = bisection_method(f, 1, 3, 0.01)
print("ΠΠΎΡΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ:", root)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `bisection_method`, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ `f`, Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° `a` ΠΈ `b`, Π° ΡΠ°ΠΊΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `epsilon`, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΡΠ½ΠΎΡΡΡ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Ρ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ `f(x) = x^2 - 4` Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ ΠΎΡ 1 Π΄ΠΎ 3 Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ 0.01.
ΠΠ΅ΡΠΎΠ΄ ΠΡΡΡΠΎΠ½Π°
ΠΠ΅ΡΠΎΠ΄ ΠΡΡΡΠΎΠ½Π° - ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π»ΠΈΠ½Π΅Π°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π² ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΠΈ Π΅Π΅ ΠΊΠΎΡΠ½Ρ. ΠΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ Π·Π½Π°Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΠΏΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
def newton_method(f, f_prime, x0, epsilon, max_iterations):
x = x0
iterations = 0
while abs(f(x)) > epsilon and iterations < max_iterations:
x = x - f(x) / f_prime(x)
iterations += 1
return x
# ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ ΠΡΡΡΠΎΠ½Π° Π΄Π»Ρ Π½Π°Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ
def f(x):
return x**2 - 4
def f_prime(x):
return 2 * x
root = newton_method(f, f_prime, 2, 0.01, 100)
print("ΠΠΎΡΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ:", root)
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `newton_method`, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ `f`, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ `f_prime`, Π½Π°ΡΠ°Π»ΡΠ½ΡΡ ΡΠΎΡΠΊΡ `x0`, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ `epsilon` Π΄Π»Ρ ΡΠΎΡΠ½ΠΎΡΡΠΈ ΠΈ `max_iterations` Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ `f(x) = x^2 - 4` Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ 2, ΡΠΎΡΠ½ΠΎΡΡΡΡ 0.01 ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΌ ΡΠΈΡΠ»ΠΎΠΌ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ 100.
ΠΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SciPy
SciPy - ΡΡΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Π½Π°ΡΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Π² Python. ΠΠ½Π° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ Π·Π°Π΄Π°Ρ, Π²ΠΊΠ»ΡΡΠ°Ρ ΠΏΠΎΠΈΡΠΊ ΠΊΠΎΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°:
from scipy.optimize import root
def f(x):
return x**2 - 4
root = root(f, 2)
print("ΠΠΎΡΠ΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ:", root.x[0])
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ `root` ΠΈΠ· ΠΌΠΎΠ΄ΡΠ»Ρ `scipy.optimize` Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Ρ ΡΡΠ½ΠΊΡΠΈΠΈ `f(x) = x^2 - 4` Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΎΠΉ 2. ΠΠ΅ΡΠΎΠ΄ `root` Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ `OptimizeResult`, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠ½Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° `x`.
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠΎΡΠ½Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΉ Π² Python: ΠΌΠ΅ΡΠΎΠ΄ Π±ΠΈΡΠ΅ΠΊΡΠΈΠΈ, ΠΌΠ΅ΡΠΎΠ΄ ΠΡΡΡΠΎΠ½Π° ΠΈ ΠΌΠ΅ΡΠΎΠ΄ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ Ρ ΠΏΠΎΠΌΠΎΡΡΡ SciPy. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΡΠΈΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΈ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΈΠΏΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ.
ΠΠ΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π²Π°ΡΠΈΡ Π·Π°Π΄Π°Ρ!