Untitled
unknown
python
2 years ago
2.0 kB
6
Indexable
def bisection_method(f, a, b, epsi):
c = 0
while (b - a) / 2.0 > epsi:
c += 1
midpoint = (a + b) / 2.0
if (f(midpoint) == 0):
break
elif f(a) * f(midpoint) < 0:
b = midpoint
else:
a = midpoint
print("Метод половинного деления: x = ", round((a + b) / 2.0, 6), "; Число итераций: ", c, ";")
def secant_method(f, f_p2, a, b, epsi):
fa = f(a)
fp2a = f_p2(a)
if fa * fp2a > 0:
x_0 = a
else:
x_0 = b
x_1 = a if x_0 == b else b
c = 0
for _ in range(1000):
c += 1
fx_0 = f(x_0)
fx_1 = f(x_1)
x_new = x_1 - fx_1 * (x_1 - x_0) / (fx_1 - fx_0)
if abs(x_new - x_1) < epsi:
break
x_0, x_1 = x_1, x_new
print("Метод секущих: x = ", round(x_new, 6), "; Число итераций: ", c, ";")
def simple_iteration_method(f, fi, fi_p, a, b, x0, epsi):
if abs(fi_p(a)) >= 1 or abs(fi_p(b)) >= 1:
print("Метод простой итерации расходится на интервале.")
return
else:
x_prev = x0
x_curr = fi(x_prev)
c = 0
while abs(x_curr - x_prev) > epsi and abs(f(x_curr)) > epsi:
x_prev = x_curr
x_curr = fi(x_prev)
c += 1
if abs(fi_p(x_curr)) >= 1:
print("Метод может не сойтись на шаге", c)
return
if (x_curr < a or x_curr > b):
print("Новое приближение метода простой итерации выходит за пределы интервала на шаге", c)
return
print("Метод простой итерации: x = ", round(x_curr, 6), "; Число итераций: ", c, ";")Editor is loading...
Leave a Comment