kxcoze

practice6.3

Jun 4th, 2022 (edited)
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.17 KB | None | 0 0
  1. from math import log
  2. from decimal import Decimal
  3. from itertools import product
  4.  
  5.  
  6. def prettifier(coll):
  7.     return "f(a{}da, b{}db, c{}dc)".format(*('+' if elem else '-' for elem in coll))
  8.  
  9.  
  10. # Мой вариант
  11. # a, b, c = Decimal('12.72'), Decimal('0.34'), Decimal('0.029')
  12. # f = lambda a, b, c: (a*b - Decimal('4.0')*c)/(Decimal(f'{log(a)}')+b)
  13.  
  14. # Пример в методичке
  15. a, b, c = Decimal('0.7219'), Decimal('135.347'), Decimal('0.013')
  16. f = lambda a, b, c: (Decimal(f'{log(b)}')-a)/(a**2 + 12*c)
  17.  
  18. print(f'a = {a}, b = {b}, c = {c}')
  19.  
  20. da, db, dc = map(lambda x: Decimal('0.1')**len(str(x).split('.')[-1]), (a, b, c))
  21. print(f'da = {da}, db = {db}, dc = {dc}')
  22.  
  23. result = []
  24. for step in product([1, 0], repeat=3):
  25.     _a = a + da if step[0] else a - da
  26.     _b = b + db if step[1] else b - db
  27.     _c = c + dc if step[2] else c - dc
  28.     result.append((f(_a, _b, _c), step))
  29.  
  30. z = f(a, b, c)
  31. z_min = min(result, key=lambda x: x[0])
  32. z_max = max(result, key=lambda x: x[0])
  33. print(f'z = {z}')
  34. print(f'Нижняя граница z1 = {prettifier(z_min[1])} = {z_min[0]}')
  35. print(f'Вверхняя граница z2 = {prettifier(z_max[1])} = {z_max[0]}')
Add Comment
Please, Sign In to add comment