gpt4 book ai didi

Python 类型错误 : unsupported operand type(s) for/: 'NoneType' and 'float'

转载 作者:太空宇宙 更新时间:2023-11-03 12:18:56 24 4
gpt4 key购买 nike

这是老师给我们布置的作业。我们应该使用辛普森法则对函数进行数值积分 f(x) = x*cos(third_root(x))

但我们不允许使用cos 的内置函数或使用x**(1.0/3.0) 来求三次方根。

我得到错误:

Traceback (most recent call last):
File "path", line 104, in <module>
print simpson(f, 1.0, 50.0, 10)
File "path", line 91, in simpson
I += 2 * f(x) + (4.0 * f(x + h))
File "path", line 101, in f
return x*final_cos(final_3root(x))
File "path", line 72, in final_cos
x = float_mod(x, 2 * pi)
File "path", line 42, in float_mod
k = int(x / a)
TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'

Process finished with exit code 1

这是我的代码:

import math


def final_3root(a):
q, m = math.frexp(a)

if 0.5 > q or q > 1.0:
raise ValueError('Math domain error')

x = 0.8968521468804229452995486
factor_1 = 0.6299605249474365823836053
factor_2 = 0.7937005259840997373758528

q_croot = (q / (x * x) + 2.0 * x) / 3.0
q_croot = (q / (q_croot * q_croot) + 2.0 * q_croot) / 3.0
q_croot = (q / (q_croot * q_croot) + 2.0 * q_croot) / 3.0
q_croot = (q / (q_croot * q_croot) + 2.0 * q_croot) / 3.0

if m % 3.0 == 0.0:
m /= 3
answer = math.ldexp(q_croot, m)

elif m % 3 == 1:
m += 2
m /= 3
answer = factor_1 * math.ldexp(q_croot, m)

elif m % 3 == 2:
m += 1
m /= 3
answer = factor_2 * math.ldexp(q_croot, m)

fasit = a ** (1.0 / 3.0)

#----------------------------------------------

def float_mod(x, a):
k = int(x / a)
if (x * a) < 0:
k -= 1
return x - float(k) * a


def ratio_based_cosinus(x):
epsilon = 1.0e-16

previous_Value = 1
return_Value = 1
n = -1
while True:
n += 1
ratio = (-x * x) / (((2 * n) + 1) * ((2 * n) + 2))

previous_Value *= ratio
return_Value += previous_Value

if abs(previous_Value) < epsilon:
break
return return_Value


def final_cos(x):
if isinstance(x, int):
x += 0.0

pi = 3.1415926

x = float_mod(x, 2 * pi)

if x > pi:
return ratio_based_cosinus(-x)
else:
return ratio_based_cosinus(x)

#----------------------------------------------


def simpson(f, a, b, N):
if N & 1:
raise ValueError('Ugyldig tall')

I = 0
h = float((b - a) / N)
x = float(a)

for i in range(0, N / 2):
I += 2 * f(x) + (4.0 * f(x + h))
x += 2 * h

I += float(f(b) - f(a))
I *= h / 3

print "The sum is: ", I


def f(x):


return x*final_cos(final_3root(x))


print simpson(f, 1.0, 50.0, 10)

最佳答案

final_3root 缺少返回语句。

仔细查看错误。 xNone。如果你追溯它,你会看到使用了那个函数的返回值,但它从不返回任何东西。

关于Python 类型错误 : unsupported operand type(s) for/: 'NoneType' and 'float' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22762078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com