Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import math
- from math import exp
- a = 1
- b = 3
- def f(x):
- return exp(-x) - x + 2
- def df(x):
- return -(1+exp(x)/x)
- def ddf(x):
- return 1 / exp(x)
- def equitonHasOneRoot(a, b, f, df):
- if (f(a) > 0 and f(b) < 0) or (f(a) < 0 and f(b) > 0):
- if df(a) > 0 and df(b) > 0 or df(a) < 0 and df(b) < 0:
- return True
- return False
- def getConstC(x, df, eps):
- if df(x) < 0:
- return -2 / df(x) + eps
- if df(x) > 0:
- return -2 / df(x) - eps
- def getX0(a, b, f, ddf):
- if f(a) * ddf(a) > 0:
- return a
- if f(b) * ddf(b) > 0:
- return b
- return max(a, b) # Иначе ничего не сошлось
- eps = 10 ** -3
- d = 10 ** -2
- def beatifulPrint(*args, size):
- str = ''
- for arg in args:
- str += f'{arg:<{size}}'
- print(str)
- def MPI():
- if not equitonHasOneRoot(a, b, f, df):
- print("Больше одного корня")
- return
- c = getConstC(a, df, eps)
- xn = x0 = a
- fn = f(xn)
- i = 0
- print(f'Метод простых итераций')
- beatifulPrint('Итерация', 'xn', 'xn1', '|xn1 - xn|', '|fn1-fn|', size=24)
- while True:
- i += 1
- xn1 = xn + c * f(xn)
- fn1 = f(xn1)
- if math.fabs(xn1 - xn) < eps and math.fabs(fn1 - fn) < d:
- print("Итог: ")
- beatifulPrint(i, xn, xn1, math.fabs(xn1 - xn), math.fabs(fn1 - fn), size=24)
- print(f'Итоговое значение функции: {fn1}')
- break
- beatifulPrint(i, xn, xn1, math.fabs(xn1 - xn), math.fabs(fn1 - fn), size=24)
- xn = xn1
- fn = fn1
- def Newton():
- if not equitonHasOneRoot(a, b, f, df):
- print("Больше одного корня")
- return
- xn = x0 = getX0(a, b, f, ddf)
- fn = f(xn)
- i = 0
- print(f'Метод нъютона')
- beatifulPrint('Итерация', 'xn', 'xn1', '|xn1 - xn|', '|fn1-fn|', size=24)
- while True:
- i += 1
- xn1 = xn - f(xn) / df(xn)
- fn1 = f(xn1)
- if math.fabs(xn1 - xn) < eps and math.fabs(fn1 - fn) < d:
- print("Итог: ")
- beatifulPrint(i, xn, xn1, math.fabs(xn1 - xn), math.fabs(fn1 - fn), size=24)
- print(f'Итоговое значение функции: {fn1}')
- break
- beatifulPrint(i, xn, xn1, math.fabs(xn1 - xn), math.fabs(fn1 - fn), size=24)
- xn = xn1
- fn = fn1
- def ModNewton():
- if not equitonHasOneRoot(a, b, f, df):
- print("Больше одного корня")
- return
- xn = x0 = getX0(a, b, f, ddf)
- fn = f(xn)
- i = 0
- print(f'Модифицированный метод нъютона')
- beatifulPrint('Итерация', 'xn', 'xn1', '|xn1 - xn|', '|fn1-fn|', size=24)
- while True:
- i += 1
- xn1 = xn - f(xn) / df(x0)
- fn1 = f(xn1)
- if math.fabs(xn1 - xn) < eps and math.fabs(fn1 - fn) < d:
- print("Итог: ")
- beatifulPrint(i, xn, xn1, math.fabs(xn1 - xn), math.fabs(fn1 - fn), size=24)
- print(f'Итоговое значение функции: {fn1}')
- break
- beatifulPrint(i, xn, xn1, math.fabs(xn1 - xn), math.fabs(fn1 - fn), size=24)
- xn = xn1
- fn = fn1
- MPI()
- Newton()
- ModNewton()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement