πŸ” Как Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΡ€Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² 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. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ‚ свои особСнности ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящий ΠΌΠ΅Ρ‚ΠΎΠ΄ Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

НС Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для Π²Π°ΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡!

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

34 Π—Π°Π΄Π°Ρ‡Π°: Найти ΠΊΠΎΡ€Π½ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ уравнСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Python

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ ΠΊΠΎΡ€Π½ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ уравнСния. Π―Π·Ρ‹ΠΊ программирования Python.

#5. ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‚Π° с ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ math | Python для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

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

πŸ”„ Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ†ΠΈΠΊΠ» while Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅?

Как Π΄Π΅Π»Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ Π½Π° Python: простой ΠΈ понятный Π³Π°ΠΉΠ΄

Как вывСсти число ΠΈΠ· ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Python: Π»Π΅Π³ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ!

πŸ” Как Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΡ€Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Python: простоС руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…

Π§Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΏΠΈΡ‚ΠΎΠ½ 2 ΠΈ ΠΊΠ°ΠΊ это влияСт Π½Π° Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…

Как Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python?

🐍 Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Python Π½Π° Ubuntu - подробная инструкция