Untitled
unknown
python
a year ago
2.0 kB
5
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