Рассчитать значения функции f(x) в целочисленном интервале Python
Дана функция, вычисляющая значение переменной
yв зависимости от переменнойx. Дан интервал целых чисел, которые может принимать переменная x.Необходимо написать программу на языке Python, которая выведет в текстовый файл
result.txtзначения переменной y для каждого из предложенныхx.Точность значений
*у*при распечатке установить в 3 знака после запятой.
Кодировка в текстовом файле должна быть Unicode. Путь к входному и выходному файлу в коде программы нужно сделать относительным.
Сваял вот такое:
import math
import cmath
f = open('source_data.txt')
a = f.readlines()
for i in a:
x = float(i.strip('x='))
if x < -6:
n = ((64 * x ** 7 - 44 * x ** 2 + 44) ** 5 + 56 * x ** 7) / (
(15 * x ** 7 + x ** 3) ** 3 + (34 * x ** 2 + 15) ** 4)
f1 = open("result.txt", 'a')
f1.write("При x = " + str(x) + " значение y = " + str(n) + "\n")
elif -6 <= 0 and x < 0:
n = (math.sqrt(((65 * x ** 4 + 47 * x ** 2 + 14) ** 5)) - 66 * x ** 3) / (
(9 * x ** 6 + x ** 2) ** 5 + (71 * x ** 2 - 57) ** 5)
print(n)
else:
n = ((46 * x ** 7 + 39 * x ** 2 + 16) ** 8 - 91 * x ** 5) / ((27 * x ** 8 - x ** 3) ** 3 + cmath.sqrt(((8 * x - 65) ** 3)))
print(n)
Интересует правильность ввода формул, как сделать точность до 3 знаков после запятой, и конечно же ошибки которые есть в коде.
Ответы (2 шт):
Какие-то правки:
import math
import cmath
with open('source_data.txt') as f, open("result.txt", 'w', encoding="utf-8") as f1:
for i in f:
x = float(i.strip('x='))
if x < -6:
n = ((64 * x ** 7 - 44 * x ** 2 + 44) ** 5 + 56 * x ** 7) / (
(15 * x ** 7 + x ** 3) ** 3 + (34 * x ** 2 + 15) ** 4)
elif -6 <= x < 0:
n = (math.sqrt(((65 * x ** 4 + 47 * x ** 2 + 14) ** 5)) - 66 * x ** 3) / (
(9 * x ** 6 + x ** 2) ** 5 + (71 * x ** 2 - 57) ** 5)
print(n)
else:
n = ((46 * x ** 7 + 39 * x ** 2 + 16) ** 8 - 91 * x ** 5) / ((27 * x ** 8 - x ** 3) ** 3 + cmath.sqrt(((8 * x - 65) ** 3)))
f1.write("При x = {} значение y = {:.3e}\n".format(x, n))
print("{:.3e}".format(n))
- Я не поверял ваши вычисления.
- Я исправил ошибки в отступах.
- Я исправил ошибку в команде
elif -6 <= 0 and x < 0: open("result.txt", 'w', encoding="utf-8")(вместо вашегоopen("result.txt", 'a'))- Точность значений у при распечатке установил в 3 знака после запятой.
- ... и что-то другое...
Я проверил этот код — вот мой выводной файл result.txt:
При x = 7.0 значение y = 1.125e+36-8.058e+12j При x = -4.0 значение y = 5.859e-13 При x = -10.0 значение y = 3.182e+19 При x = 0.0 значение y = 0.000e+00-8.196e+06j
После длительных "переговоров" вырисовывается следующее.
Если исходить из ДОСЛОВНОЙ трактовки вопроса, а именно - "как сделать точность до 3 знаков после запятой" оказывается, что просто написать, например
n = ((64 * x ** 7 - 44 * x ** 2 + 44) ** 5 + 56 * x ** 7) / (
(15 * x ** 7 + x ** 3) ** 3 + (34 * x ** 2 + 15) ** 4)
некорректно, потому что получаемый ответ, опять же например, при x = -10.0 дает значение y= 3.182e+19, а это НИКАК не 3 знака после запятой.
Что-бы получить именно знаки после запятой - можно написать так:
from decimal import Decimal
x=10
a=(64 * x ** 7 - 44 * x ** 2 + 44) ** 5 + 56 * x ** 7
b=((15 * x ** 7 + x ** 3) ** 3 + (34 * x ** 2 + 15) ** 4)
format(Decimal.from_float(a)/Decimal.from_float(b),'.3f')
Результат
'31812853625432199804.219'
Что в точности соответствует поставленному условию.