Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- import math
- import pylab
- import matplotlib.pyplot as plt
- from matplotlib import mlab
- #Определение функции f(x), φ(x), f'(x), f''(x)
- function_f = lambda x: math.e**(0.2 * x) - 5 * x
- function_phi = lambda x: math.e**(0.2 * x) / 5
- derivative = lambda x: 0.2 * math.e**(0.2 * x) - 5
- second_derivative = lambda x: 0.04 * math.e**(0.2 * x)
- #Метод половинного деления
- def Half_Division_Method (x_min, x_max, eps):
- iteration = 0
- while (((x_max - x_min) / 2) > eps):
- iteration += 1
- middle_point = (x_min + x_max) / 2
- if ((function_f(x_min) * function_f(middle_point)) > 0):
- x_min = middle_point
- else:
- x_max = middle_point
- print ("Количество итераций метода половинного деления:", iteration)
- return middle_point
- #Метод итераций
- def Iterative_Method (x_min, eps):
- last_result = 0
- iteration = 0
- while (abs(last_result - x_min) > eps):
- iteration += 1
- last_result = x_min
- x_min = function_phi(x_min)
- print ("\nКоличество итераций метода итераций:", iteration)
- return x_min
- #Метод Ньютона
- def Newton_Method (x_min, x_max, eps):
- last_result = 0
- iteration = 0
- if ((function_f(x_min) * second_derivative(x_min)) > 0):
- while (abs(last_result - x_min) > eps):
- iteration += 1
- last_result = x_min
- x_min = x_min - function_f(x_min) / derivative(x_min)
- print ("\nКоличество итераций методом Ньютона:", iteration)
- return x_min
- else:
- while (abs(last_result - x_max) > eps):
- iteration += 1
- last_result = x_max
- x_max = x_max - function_f(x_max) / derivative(x_max)
- print ("\nКоличество итераций методом Ньютона:", iteration)
- return x_max
- x_min = float(input("Введите начальное значение интервала x_min: "))
- x_max = float(input("Введите конечное значение интервала x_max: "))
- if (function_f(x_min) * function_f(x_max) > 0):
- print ("На данном интервале корней у функции нет!")
- else:
- print ("\nРезультаты:")
- print ("Mетодом половинного деления с точностью до 0.01 =", "%.2f" % Half_Division_Method(x_min, x_max, 0.01))
- print ("Mетодом итераций с точностью до 0.001 =", "%.3f" % Iterative_Method(x_min, 0.001))
- print ("Методом Ньютона с точностью до 0.000001 =", "%.6f" % Newton_Method(x_min, x_max, 0.000001))
- # Шаг между точками
- increment = 0.1
- # Создадим список координат по оси X на отрезке [-x_min; x_max], включая концы
- xlist = mlab.frange (x_min, x_max, increment)
- # Вычислим значение функции в заданных точках
- ylist = [function_f(x) for x in xlist]
- # Нарисуем одномерный график
- pylab.plot (xlist, ylist)
- plt.grid(True)
- # Покажем окно с нарисованным графиком
- pylab.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement