将数学方程作为参数传递(numpy)

时间:2016-03-03 01:03:33

标签: python python-3.x math

我正在寻找一个程序来计算函数的左+右黎曼和。我唯一的问题是,我希望函数将np.sin(x ^ 2)或np.cos(3 * x +2)或者ax ^ 2 + 3 * x + 2(多项式函数)作为y参数并且np.linspace()作为x参数,'left'或'right'作为字符串。到目前为止,我的代码确实采用sin(x)/ cos(x)来计算这两个函数的左/右黎曼和。但我正在努力让我们说通过像sin(x ^ 2)+3这样的函数并接受它的逼近。我有正确的逻辑,但也许,我不是很好地理解numpy / python的数据结构。这是我的代码:

import numpy as np
def r_sums(y,x,method='left'):
    #f = y(x)
    l = []
    delta_x = abs(x[0]-x[-1])/len(x)
    while method != 'right':
        #Calculating Left Riemann Sum (below the list comprehension is a normal for loop of the list comprehension func)
        return sum([ y(x[0]+ i*delta_x) for i in range(0,len(x))])*delta_x
        #for i in range(0,len(x)):
            #f_a = x[0] + i*(delta_x) #Calculating left endpoint
            #l.append(y(f_a))         #Appends all the left endpoint into a list l
        #return sum(l)*delta_x

    #Calculating Right Riemann Sum (below the list comprehension is a normal for loop of the list comprehension func)
    return sum([y(x[0]+ i*delta_x) for i in range(1,len(x)+1)])*delta_x
    #for i in range(1,len(x)+1):
        #f_a = x[0] + i*(delta_x)
        #l.append(y(f_a))
    #return sum(l)*delta_x

r_sums(np.sin,np.linspace(1,4,200),'left')应该可以工作,但我希望让y参数采取像

这样的东西

r_sums(np.sin(x ** 2 + 3),np.linspace(1,4,200),'left')< - 不起作用

真的很感激一些帮助/反馈!谢谢。

1 个答案:

答案 0 :(得分:1)

你可能想传递一个真实的"功能(而不是值!)。请注意,您必须在此处定义函数或使用lambda表达式。

r_sums(lambda x: np.sin(x**2+3),np.linspace(1,4,200),'left')

会奏效。

lambda表达式只是一个函数,它接受一个参数x并返回np.sin(x**2+3)

它将与:

相同
def function_sin_xsqaured_plus_3(x):
    return np.sin(x**2+3)

r_sums(function_sin_xsqaured_plus_3,np.linspace(1,4,200),'left')

(也可以)