Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News Sign UpSign In
| Download
Project: two
Views: 74
Kernel: Python 3 (Anaconda)
import random from math import * import numpy as np from sympy import * import matplotlib.pyplot as pl func = lambda x: np.log(x) - 1/x**2 def y(pok): import numpy as np h = log(pok) - 1 / pok ** 2 return h def proizv(a): pok = Symbol('pok') h = log(pok) - 1 / pok ** 2 j = h.diff() pok = a k = eval(str(j)) return k def proizv2(a): pok = Symbol('pok') h = log(pok) - 1 / pok ** 2 j = h.diff() i = j.diff() pok = a k = eval(str(i)) return k def DelOtrPop(): a = float(input('Введите начало интервала: \n')) while True: b = float(input('Введите конец интервалла:\n')) if b > a: break else: print('Введите конец интервала, больший начального:\n') e = float(input('Введите точность решения:\n')) if y(a) * y(b) > 0: print('Решением данной функции на представленном отрезке не существует') else: while abs(a - b) > 2 * e: x = (a + b) / 2 if y(a) * y(x) < 0.0: b = x elif y(b) * y(x) < 0.0: a = x elif y(a) * y(x) == 0.0 or y(b) * y(x) == 0.0: return x break return x def horda(): a = float(input('Введите начало интервалл: \n')) while True: b = float(input('Введите конец интервалла:\n')) if b > a: break else: print('Введите конец интервала, больший начального:\n') e = float(input('Введите точность решения:\n')) if y(a) * y(b) > 0: print('Решением данной функции на представленном отрезке не существует') else: if proizv2(a) * y(a) > 0: x0 = a x = b else: x0 = b x = a while abs(x0 - x) > e: x1 = x - y(x) * (x0 - x) / (y(x0) - y(x)) if y(x) * y(x1) <= 0: x0 = x1 else: x = x1 return x1 def kasat(): a = float(input('Введите начало интервалл: \n')) while True: b = float(input('Введите конец интервалла:\n')) if b > a: break else: print('Введите конец интервала, больший начального:\n') e = float(input('Введите точность решения:\n')) if y(a) * y(b) > 0: print('Решением данной функции на представленном отрезке не существует') else: x0 = (a + b) / 2.0 xn = y(x0) xn1 = xn - y(xn) / proizv(xn) while abs(xn1 - xn) > e: xn = xn1 xn1 = xn - y(xn) / proizv(xn) return xn1 def prostit(): a = float(input('Введите начало интервалл: \n')) while True: b = float(input('Введите конец интервалла:\n')) if b > a: break else: print('Введите конец интервала, больший начального:\n') e = float(input('Введите точность решения:\n')) if y(a) * y(b) > 0: print('Решением данной функции на представленном отрезке не существует') else: while abs(a - b) > e: a = b - y(b) / proizv(b) b = a - y(a) / proizv(a) return b metod = int(input('''Введите предпочтительный способ решения: 1) Метод деления отрезка пополам 2) Метод хорд 3) Метод касательных 4) Простой итерации\n''')) if metod == 1: print('Решение методом деления отрезка пополам:', DelOtrPop()) elif metod == 2: print('Решение методом хорд:', horda()) elif metod == 3: print('Решение методом касательных:', kasat()) elif metod == 4: print('Решение методом простой итерации:', prostit()) x = np.linspace(0.2,5,100) pl.plot(x,func(x)) pl.annotate('root', xy=(1.318, 0), xytext=(2, 3), arrowprops=dict(facecolor='black', shrink=0.05),) pl.grid(1) pl.show()
Введите предпочтительный способ решения: 1) Метод деления отрезка пополам 2) Метод хорд 3) Метод касательных 4) Простой итерации
Введите начало интервалл:
Введите конец интервалла:
Введите точность решения: