Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import log
- from decimal import Decimal
- from itertools import product
- def prettifier(coll):
- return "f(a{}da, b{}db, c{}dc)".format(*('+' if elem else '-' for elem in coll))
- # Мой вариант
- # a, b, c = Decimal('12.72'), Decimal('0.34'), Decimal('0.029')
- # f = lambda a, b, c: (a*b - Decimal('4.0')*c)/(Decimal(f'{log(a)}')+b)
- # Пример в методичке
- a, b, c = Decimal('0.7219'), Decimal('135.347'), Decimal('0.013')
- f = lambda a, b, c: (Decimal(f'{log(b)}')-a)/(a**2 + 12*c)
- print(f'a = {a}, b = {b}, c = {c}')
- da, db, dc = map(lambda x: Decimal('0.1')**len(str(x).split('.')[-1]), (a, b, c))
- print(f'da = {da}, db = {db}, dc = {dc}')
- result = []
- for step in product([1, 0], repeat=3):
- _a = a + da if step[0] else a - da
- _b = b + db if step[1] else b - db
- _c = c + dc if step[2] else c - dc
- result.append((f(_a, _b, _c), step))
- z = f(a, b, c)
- z_min = min(result, key=lambda x: x[0])
- z_max = max(result, key=lambda x: x[0])
- print(f'z = {z}')
- print(f'Нижняя граница z1 = {prettifier(z_min[1])} = {z_min[0]}')
- print(f'Вверхняя граница z2 = {prettifier(z_max[1])} = {z_max[0]}')
Add Comment
Please, Sign In to add comment