Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我怎样才能更简化这一点?_Python - Fatal编程技术网

Python 我怎样才能更简化这一点?

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 我试图从新函数中获取返回值,如

我正在尝试将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
我试图从新函数中获取返回值,如下所示:

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)