繁体   English   中英

Python 中的辛普森积分规则

[英]Simpson's rule of Integration in Python

我已经为它编写了一个代码,但是无论我尝试什么,它都不起作用 有人可以看看吗

def y(x):
    y=(x**3+2*x)/(x**2+2*x)

a=int(input("Enter lower limit:"))
b=int(input("Enter higher limit:"))
n=int(input("Enter no. of points:"))
h=1.0*(b-a)/n
x=[a+i*h for i in range(n)]
y=[y(i) for i in x]
I=1.0*(h/3)*(y[0]+y[-1]+4*sum(y[1:-1:2])+2*sum(y[2:-1:2]))
print (I)

它显示错误:

I=1.0*(h/3)*(y[0]+y[-1]+4*sum(y[1:-1:2])+2*sum(y[2:-1:2]))
TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'

这意味着什么?

您必须在 function 中使用return

def y(x):
    return (x**3+2*x)/(x**2+2*x)

a=int(input("Enter lower limit:"))
b=int(input("Enter higher limit:"))
n=int(input("Enter no. of points:"))
h=1.0*(b-a)/n
x=[a+i*h for i in range(n)]
y=[y(i) for i in x]
I=1.0*(h/3)*(y[0]+y[-1]+4*sum(y[1:-1:2])+2*sum(y[2:-1:2]))
print(I)

该错误告诉您表达式中的值为None 这是Python中的一个特殊值,表示没有值。 由于表达式如此之大,可以通过打印出表达式的部分内容来查找问题,例如print(h)print(y)来查找问题。 具体来说,从您的代码中查看这些行并添加print(y)

def y(x):
    y=(x**3+2*x)/(x**2+2*x)


y=[y(i) for i in x]
print(y)

这将打印出类似

[None, None, None, None]

这是因为y() function 缺少return语句。 要解决此问题,只需添加return

def y(x):
    return (x**3+2*x)/(x**2+2*x)

提示:您将 function 命名为y ,然后将y分配给列表。 如果您尝试更改此代码,则为两个不同的事物重用一个名称可能会在以后导致问题。 我建议将 function 重命名为f

def f(x):
    return (x**3+2*x)/(x**2+2*x)

y=[f(i) for i in x]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM