78 lines
1.6 KiB
Python
78 lines
1.6 KiB
Python
def half_div_method(f, f_d, a, b, max_iter=10_000, eps=0.00001):
|
|
x_n = (a + b) / 2
|
|
i = 0
|
|
while abs(f(x_n)) >= eps and i < max_iter:
|
|
x_n = (a + b) / 2
|
|
|
|
f_ = f(x_n)
|
|
if f_ == 0:
|
|
break
|
|
|
|
if f(a) * f_ < 0:
|
|
b = x_n
|
|
else:
|
|
a = x_n
|
|
i += 1
|
|
return x_n
|
|
|
|
|
|
def chord_method(f, f_d, f_dd, a, b, max_iter=1_000_000, eps=0.01):
|
|
x_n = (a + b) / 2
|
|
i = 0
|
|
while abs(f(x_n)) >= eps and i < max_iter:
|
|
X = a
|
|
if f(X) * f_dd(X) <= 0:
|
|
X = b
|
|
if f(X) * f_dd(X) <= 0:
|
|
return None
|
|
|
|
x_n = x_n - f(x_n) * (X - x_n) / (f(X) - f(x_n))
|
|
i += 1
|
|
|
|
return x_n
|
|
|
|
|
|
def newtons_method(f, f_d, a, b, max_iter=10_000, eps=0.00001):
|
|
x_n = a
|
|
i = 0
|
|
while abs(f(x_n)) >= eps and i < max_iter:
|
|
x_n = x_n - f(x_n) / f_d(x_n)
|
|
i += 1
|
|
return x_n
|
|
|
|
|
|
def modified_newtons_method(f, f_d, a, b, max_iter=1_000_000, eps=0.01):
|
|
x_n = a
|
|
f_d_0 = f_d(x_n)
|
|
i = 0
|
|
|
|
while abs(f(x_n)) >= eps and i < max_iter:
|
|
x_n = x_n - f(x_n) / f_d_0
|
|
i += 1
|
|
return x_n
|
|
|
|
|
|
def combined_method(f, f_d, a, b, max_iter=10_000, eps=0.00001):
|
|
x_n = a
|
|
y_n = b
|
|
i = 0
|
|
|
|
while abs(x_n - y_n) >= eps and i < max_iter:
|
|
x_n = x_n - f(x_n) / f_d(x_n)
|
|
y_n = y_n - f(y_n) * (x_n - y_n) / (f(x_n) - f(y_n))
|
|
i += 1
|
|
return (x_n + y_n) / 2
|
|
|
|
|
|
def iterative_method(f, f_d, a, b, max_iter=10_000, eps=0.0001):
|
|
def phi(x):
|
|
return x - f(x) / f_d(x)
|
|
|
|
i = 0
|
|
x = phi(a)
|
|
|
|
while abs(f(x)) >= eps and i < max_iter:
|
|
x = phi(x)
|
|
i += 1
|
|
return x
|