π ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Python π
ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Python
ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Python Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ SciPy. ΠΠ°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°Π³ΠΈ:
- ΠΠΌΠΏΠΎΡΡΠΈΡΡΠΉΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ:
- ΠΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌ:
- ΠΠ°Π΄Π°ΠΉΡΠ΅ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ°:
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ minimize ΠΈΠ· SciPy Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ°:
- ΠΠΎΠ»ΡΡΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ° ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ:
from scipy.optimize import minimize
def objective(x):
# ΠΠ°ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ Π·Π΄Π΅ΡΡ
return result
x0 = [initial_guess]
result = minimize(objective, x0)
extremum_value = result.fun
arg_extremum = result.x
ΠΡΠ΄ΡΡΠ΅ ΡΠ²Π΅ΡΠ΅Π½Ρ, ΡΡΠΎ Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ objective Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΡΡΠΈ ΡΠ°Π³ΠΈ, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ Π²Π°ΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π° Python.
ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ
ΠΠ°ΠΊ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python?
ΠΠ°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π°ΠΆΠ½ΡΡ Π·Π°Π΄Π°Ρ Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ. Π Python ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ².
1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ scipy.optimize
ΠΠΎΠ΄ΡΠ»Ρ scipy.optimize ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠΎΠ². ΠΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΡΡΠΎΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ - minimize_scalar. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΉΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ.
from scipy.optimize import minimize_scalar
# ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌ
def f(x):
return x**2 - 4*x + 3
# ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ minimize_scalar Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ°
result = minimize_scalar(f)
# ΠΡΠ²ΠΎΠ΄ΠΈΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ°
print(f"ΠΠΊΡΡΡΠ΅ΠΌΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ: {result.x}")
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ f(x)
, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ minimize_scalar ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π»ΠΈ Π΅ΠΉ ΡΡΠ½ΠΊΡΠΈΡ f(x)
. Π€ΡΠ½ΠΊΡΠΈΡ minimize_scalar Π½Π°ΠΉΠ΄Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΈ Π²Π΅ΡΠ½Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ result
. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΌΡ Π²ΡΠ²Π΅Π΄Π΅ΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ°.
2. ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΠΊΠ° ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π΅Π΅ Π³ΡΠ°ΡΠΈΠΊ ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΊΡ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ°. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ matplotlib Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² Π² Python.
import numpy as np
import matplotlib.pyplot as plt
# ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ
def f(x):
return x**2 - 4*x + 3
# ΠΠ°Π΄Π°Π΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x
x = np.linspace(-10, 10, 100)
# ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x
y = f(x)
# Π‘ΡΡΠΎΠΈΠΌ Π³ΡΠ°ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ
plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('f(x)')
plt.title('ΠΡΠ°ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ')
plt.grid(True)
plt.show()
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ f(x)
, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ Π³ΡΠ°ΡΠΈΠΊ. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ numpy, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΌΠ°ΡΡΠΈΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ x
ΠΎΡ -10 Π΄ΠΎ 10. ΠΠ°Π»Π΅Π΅ ΠΌΡ Π²ΡΡΠΈΡΠ»ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ y
Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x
. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΠΎΡΡΡΠΎΠΈΠ»ΠΈ Π³ΡΠ°ΡΠΈΠΊ ΡΡΠ½ΠΊΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ matplotlib.
ΠΡΠΎΡΠΌΠΎΡΡΠ΅Π² Π³ΡΠ°ΡΠΈΠΊ, ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠΎΡΠΊΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠ° - ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x
, Π³Π΄Π΅ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΡΠΌΠ° ΠΈΠ»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ°.
3. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ - ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ Π² ΡΠΎΡΠΊΠ΅, ΡΠΎ ΡΡΠ° ΡΠΎΡΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠΎΠΌ.
from sympy import symbols, diff
# ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
x = symbols('x')
# ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ
f = x**2 - 4*x + 3
# ΠΡΡΠΈΡΠ»ΡΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
f_prime = diff(f, x)
# ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x, Π³Π΄Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ
extrema_points = solve(f_prime, x)
# ΠΡΠ²ΠΎΠ΄ΠΈΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠΎΠ²
for point in extrema_points:
print(f"ΠΠΊΡΡΡΠ΅ΠΌΡΠΌ Π² ΡΠΎΡΠΊΠ΅ x = {point}")
Π Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ ΠΌΠΎΠ΄ΡΠ»Ρ sympy, ΡΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌΠΈ ΠΈ Π²ΡΡΠΈΡΠ»ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΠ΅. Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ x
ΠΈ ΡΡΠ½ΠΊΡΠΈΡ f
. ΠΠ°ΡΠ΅ΠΌ ΠΌΡ Π²ΡΡΠΈΡΠ»ΠΈΠ»ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ f
Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ diff
. ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π½Π°ΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x
, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½Π°Ρ ΡΠ°Π²Π½Π° Π½ΡΠ»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ solve
. Π, Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ Π²ΡΠ²Π΅Π»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΠΎΠ².
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² Π½Π°ΠΉΡΠΈ ΡΠΊΡΡΡΠ΅ΠΌΡΠΌΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π² Python. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΡΠ±ΡΠ°ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π²Π°ΡΠ΅ΠΉ Π·Π°Π΄Π°ΡΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΈΡ Π·Π°Π΄Π°Ρ.