Python 我怎样才能更简化这一点?
我正在尝试将numpy应用于我为梯形规则集成编写的代码:Python 我怎样才能更简化这一点?,python,Python,我正在尝试将numpy应用于我为梯形规则集成编写的代码: def integral(a,b,n): delta = (b-a)/float(n) s = 0.0 s+= np.sin(a)/(a*2) for i in range(1,n): s +=np.sin(a + i*delta)/(a + i*delta) s += np.sin(b)/(b*2.0) return s * delta 我试图从新函数中获取返回值,如
def integral(a,b,n):
delta = (b-a)/float(n)
s = 0.0
s+= np.sin(a)/(a*2)
for i in range(1,n):
s +=np.sin(a + i*delta)/(a + i*delta)
s += np.sin(b)/(b*2.0)
return s * delta
我试图从新函数中获取返回值,如下所示:
return delta *((2 *np.sin(x[1:-1])) +np.sin(x[0])+np.sin(x[-1]) )/2*x
我已经尝试了很长一段时间来取得突破,但是我所有的尝试都失败了
我尝试过但不明白的一点是,为什么下面的代码为数组错误提供了太多索引
非常感谢您的每一个提示/建议。您忘了对sinx进行求和:
我同时也试过这个
import numpy as np
def T_n(a, b, n, fun):
delta = (b - a)/float(n) # delta formula
x_i = lambda a,i,delta: a + i * delta # calculate x_i
return 0.5 * delta * \
(2 * sum(fun(x_i(a, np.arange(0, n + 1), delta))) \
- fun(x_i(a, 0, delta)) \
- fun(x_i(a, n, delta)))
使用本页底部的公式重新构建了代码
在0,n+1范围内求和,得出[0,1,…,n]-
是使用numpy实现的。通常,您会在普通Python中使用for循环来收集值。
但这里可以使用numpy的矢量化行为。
np.arange0,n+1给出一个np.array[0,1,…,n]
如果作为参数提供给这里抽象为fun的函数-x_0到x_n的函数公式
然后将进行计算。并收集在一个小数组中。所以funx_i。。。返回应用于x_0到x_n的函数的numpy数组。此数组/列表按总和求和
整个总和乘以2,然后减去x_0和x_n的函数值。因为在梯形公式中,只有中间总和乘以2,而不是第一个和最后一个。这是一种黑客行为
链接的德语页面将funx=x^2+3用作函数
可以通过使用lambda表达式动态地很好地定义:
fun = lambda x: x ** 2 + 3
a = -2
b = 3
n = 6
您也可以使用普通函数定义:defun funx:return x**2+3。
因此,我通过键入以下命令进行测试:
T_n(a, b, n, fun)
正确返回的:
## Out[172]: 27.24537037037037
对于您的情况,只需将np.sin tofun和a、b和n的值分配到这个函数调用中
比如:
最后,您可以拨打:
T_n(a, b, n, fun)
它会起作用的
## Out[172]: 27.24537037037037
fun = np.sin # by that eveywhere where `fun` is placed in function,
# it will behave as if `np.sin` will stand there - this is possible,
# because Python treats its functions as first class citizens
a = #your value
b = #your value
n = #your value
T_n(a, b, n, fun)