def frange(start, end, step): t = start while t < end: yield t t += step def f(x, v): if v == 'log(x+4)+x^4': return log(x + 4) + x ** 4 elif v == '(e^(-x)*sin(x))/x': return (e ** (-x) * sin(x)) / x def integ(a, b, n, v): h = float((b - a)) / n s = 0 s = (((f(a, v) + f(b, v)) / 2) + s) for x in frange(a + h, b, h): s = f(x, v) + s s = s * h return s def calc_integ(): a = int(a_num.get()) b = int(b_num.get()) n = int(n_num.get()) v = (variable.get()) res = integ(a, b, n, v)
Traceback (most recent call last):
File "C:\\Python 3.8.2(64-bit)\lib\tkinter\__init__.py“, line 1883, in __call__
return self.func(*args)
File ”CUsers/Виктя/Desktop/Попытка курсача/prog1.py“, line 40, in calc_integ
res = integ(a, b, n, v)
File ”CUsers/Виктя/Desktop/Попытка курсача/prog1.py", line 28, in integ
s = (((f(a, v) + f(b, v)) / 2) + s)
TypeError: unsupported operand type(s) for +: ‘NoneType’ and ‘NoneType’
Process finished with exit code 0
Просиходит такое, если работать с уравнением '(e^(-x)*sin(x))/x, если же работать с другим, ошибки нет и все считает правильно.
Так же у меня в этой же программе есть дифференцирование
def diff1(x0, v, dx): ra = (((f(x0, v)*(x0+dx)) - (f(x0, v) * x0)) / dx) return ra def diff2(x0, v, dx): ra = (((f(x0, v) * (x0 + dx)) - (f(x0, v) * (x0 - dx))) / (2 * dx)) return ra def diff3(x0, v, dx): ra = (((f(x0, v)*(x0)) - (f(x0, v) * (x0 - dx))) / dx) return ra def calc_diff(): v = (variable.get()) x0 = float(x_num.get()) dx = float(dx_num.get()) ff = (e ** -(x0) * sin(x0)) / x0 if v == 'log(x+4)+x^4': res2 = diff1(x0, v, dx) res3 = diff2(x0, v, dx) res4 = diff3(x0, v, dx) else: res2 = (((ff*(x0+dx)) - (ff * x0)) / dx) res3 = (((ff * (x0 + dx)) - (ff * (x0 - dx))) / (2 * dx)) res4 = (((ff*(x0)) - (ff * (x0 - dx))) / dx) result2.configure(text=res2) result3.configure(text=res3) result4.configure(text=res4)