πŸ” Как Π½Π°ΠΉΡ‚ΠΈ экстрСмумы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python πŸ”

Как Π½Π°ΠΉΡ‚ΠΈ экстрСмумы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Python

Для поиска экстрСмумов Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ SciPy. Π’Π°ΠΌ понадобятся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ шаги:

  1. Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ:
  2. 
    from scipy.optimize import minimize
    
  3. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ экстрСмум:
  4. 
    def objective(x):
        # Π’Π°ΡˆΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ здСсь
        return result
    
  5. Π—Π°Π΄Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поиска экстрСмума:
  6. 
    x0 = [initial_guess]
    
  7. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ minimize ΠΈΠ· SciPy для поиска экстрСмума:
  8. 
    result = minimize(objective, x0)
    
  9. ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ экстрСмума ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ достигаСтся:
  10. 
    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. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для вашСй Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ своих Π·Π°Π΄Π°Ρ‡.

Π’ΠΈΠ΄Π΅ΠΎ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ° Π±Π΅Π· Π₯Ρƒ%!Π½ΠΈ. ЭкстрСмум Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ 2Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Найти Ρ‚ΠΎΡ‡ΠΊΠΈ экстрСмума Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

АЛГЕБРА Π‘ НУЛЯ - Π’ΠΎΡ‡ΠΊΠΈ ЭкстрСмума Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ:

Как возвСсти 2 Π² ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ 1234 Π² python? 🐍

Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ end Π² Python? 🐍

Как ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ 'insert' Π² Python для вставки элСмСнта Π² список?

πŸ” Как Π½Π°ΠΉΡ‚ΠΈ экстрСмумы Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python πŸ”

πŸ”¨ Как Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ число Π½Π° массив Π² Python: Π›ΡƒΡ‡ΡˆΠΈΠ΅ способы ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° πŸ”’

Как Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ нулями Π² Python: простой способ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² πŸ“

πŸ”¨ΠšΠ°ΠΊ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π°ΡƒΠ΄ΠΈΠΎΡ„Π°ΠΉΠ» Π½Π° части с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python