【问题标题】:Passing a math equation as an argument (numpy)将数学方程作为参数传递(numpy)
【发布时间】:2016-03-03 01:03:33
【问题描述】:

我正在寻找编写一个计算函数左+右黎曼和的程序。我唯一的问题是,我希望函数将 np.sin(x^2) 或 np.cos(3*x +2) 或者 x^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')

非常感谢一些帮助/反馈!谢谢。

【问题讨论】:

    标签: python python-3.x math


    【解决方案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')
    

    (也可以)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2013-09-11
      • 1970-01-01
      • 2018-09-09
      • 2019-02-22
      相关资源
      最近更新 更多