Решение нелинейного уравнения

skroller

Новичок
Пользователь
Май 30, 2022
3
0
1
Решить методом бисекции уравнение - x4+x3–6x2+20x–16=0.
Решить методом Ньютона уравнение - x4+10x3–1=0.
Как это можно сделать с помощью команд? Введите в курс дела. Спасибо
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
974
220
43
21
Москва
Решение методом Ньютона
Python:
def func(x):
    return x**4 + 10*x**3 - 1

def func_derivative(x):
    # Производная изначальной функции
    return 4*x**3 + 30*x**2

x = 1
while True:
    x = x - func(x)/func_derivative(x)
    if func(x) < 0.000001:
        print(x)
        break
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
974
220
43
21
Москва
Методом бисекции

Python:
def func(x):
    return x**4+x**3-6*x**2+20*x-16

def find_interval(f):
    count = 0
    start, end = 0, 0
    while True:
        count += 1
        a = f(count)
        b = f(-count)
        if (a > 0 or b > 0) and not end:
            end = count * ((a > b) * 2 - 1)
        if (a < 0 or b < 0) and not start:
            start = count * ((a < b) * 2 - 1)
        if start and end:
            return [start, end]

def main():
    interval = find_interval(func)
    f_interval = list(map(func, interval))
    while True:
        c = sum(interval) / 2
        index = func(c) > 0
        interval[index] = c
        f_interval[index] = func(c)
        if interval[1]-interval[0] < 0.000001:
            break
    print(round(sum(interval)/2, 6))

if __name__ == "__main__":
    main()

* Метод бисекции находит один из корней
 
Последнее редактирование:

Форум IT Специалистов