Розв’язання нелінійних рівнянь
Автор: Jbowdark • Сентябрь 28, 2023 • Лабораторная работа • 995 Слов (4 Страниц) • 109 Просмотры
Лабораторна работа №1
Розв’язання нелінійних рівнянь.
Виконав : Ковальов Ілля
Група: САТР-32
Використана теорія: [pic 1]
[pic 2]
[pic 3][pic 4][pic 5]
Графік заданої функції:
x*x*x + sinx – 12x + 1 = 0
[pic 6]
[pic 7]
[pic 8][pic 9][pic 10][pic 11]
Код методу простої ітерації на Python[pic 12][pic 13][pic 14]
import math
eps = 0.0001
delta = 0.25
a = -4
b = -3.5
def func(x):
return x ** 3 + math.sin(x) - 12 * x + 1
def fiFunc1(x):
return (x ** 3 + math.sin(x) + 1) / 12
def primeFiFunc1(x):
return (math.cos(x) + 3 * x * x) / 12
def zbishnist_1_for_1(a, b):
if primeFiFunc1(a) > primeFiFunc1(b):
return primeFiFunc1(a)
else:
return primeFiFunc1(b)
q1 = zbishnist_1_for_1(a, b)
def zbishnist_2_1_for_1(x0):
return abs(fiFunc1(x0) - x0)
def q_1(x):
return (1 - q1) * delta
def checkConvergence1(x):
if q_1(x) > zbishnist_2_1_for_1(x):
return "True"
else:
return "False"
def fiFunc2(x):
return (12 - (math.sin(x) + 1) / x) ** (1 / 2)
def primeFiFunc2(x):
return abs((math.sin(x) - x * math.cos(x) + 1) / (2 * x ** 2 * (-(math.sin(x) - 12 * x + 1) / x) ** (1 / 2)))
def zbishnist_1_for_2(a, b):
if primeFiFunc2(a) > primeFiFunc2(b):
return primeFiFunc2(a)
else:
return primeFiFunc2(b)
q2 = zbishnist_1_for_2(a, b)
def zbishnist_2_1_for_2(x0):
return abs(fiFunc2(x0) - x0)
def q_2(x):
return (1 - q2) * delta
def checkConvergence2(x):
if q_2(x) > zbishnist_2_1_for_2(x):
return "True"
else:
return "False"
def AnswerCon(q, riznica, delta, answer, func_num):
print("------------------------------")
print("q = ", q)
print("|fi(x0) - x0| = ", riznica)
print("(1 - q) * delta = ", delta)
print("Convergence ", func_num, ":", answer)
return "------------------------------"
[pic 15]
[pic 16]
[pic 17]
Код методу Ньютона
import math
x0 = -4
eps = 0.0001
a = -4
b = -3.5
delta = 0.5
def func(x):
return x ** 3 + math.sin(x) - 12 * x + 1
def primeFunc(x):
return 3 * x * x + math.cos(x) - 12
def doublePrimeFunc(x):
return 6 * x - math.sin(x)
def inital_approx(a, b):
if func(a) * doublePrimeFunc(a) > 0:
return a
elif func(b) * doublePrimeFunc(b):
return b
else:
return "f(x0) * f``(x0) < 0"
def m1(a, b):
return min(abs(primeFunc(a)), abs(primeFunc(b)))
def M2(a, b):
return max(abs(doublePrimeFunc(a)), abs(doublePrimeFunc(b)))
def q(a, b):
if (M2(a, b) * delta) / (2 * m1(a, b)) < 1:
return (M2(a, b) * delta) / (2 * m1(a, b))
else:
return "q > 1"
q_value = q(a, b)
def itterations(x0):
i = 1
print("___________________________________")
print("Значення х 0: ", x0)
print("___________________________________")
while True:
x1 = x0 - func(x0)/primeFunc(x0)
print("Номер ітерації:", i)
print("Значення х", i," :", x1)
print("===================================")
if abs(x1 - x0) <= eps:
break
i += 1
x0 = x1
print("Апостеріорна оцінка: ", i)
print()
print("Апріорна оцінка:\n", "[", apriorna_ozinka(-4, x1) -1, "]","+ 1", "=", math.floor(apriorna_ozinka(-4, x1)))
...