0

我想知道是否可以执行以下操作:如果一个函数将一个函数作为参数,我可以制作它以便可以在循环中更改内部函数的参数吗?

我有一个函数,它接受任何函数 f 并将其集成到 a、b 上。问题是如果我在一个循环中想要整合 cos(1* x) 然后 cos(2*x) ....cos(N*x) 我不知道如何让我的第一个函数明白当我说积分(f(i),a,b)我不是说积分cos(1)或cos(2)而是cos(1*x)或cos(2*x)等等。

例如:

def integrate(f,a,b):
 h = float(b-a)/10;
 I = 0;
 for i in range(10):
   I+= f(h*i);   <----(1)
return I;

A = zeros(N);
for k in range(N):
  A[k] = integrate(cos(k), a,b)   <-----(2)

我想要的是调用 (2) 中的 cos(k),使得在 (1) 中它变为 f(k * h * i),这对您有意义吗?我想通过改变(2)来改变(1)的参数。我需要这个用于我正在做的傅立叶级数函数。它目前的工作方式是在括号内调用 cos() 而不是使用 (k * h* i) 调用 cos(k)。

4

2 回答 2

2

你可以这样做functools.partial

import functools

def cos_(k, x):
    return cos(k * x)

#...
A[k] = integrate(functools.partial(cos_, k), a, b)

此外,Python 不需要分号。

于 2012-10-05T02:21:24.943 回答
1

没有将函数传递给integrate,而是将返回的值传递给cos(k). 如果我正确理解您的目标,这应该可以通过传递lambda(匿名函数)来解决:

def integrate(f, a, b):
    h = float(b-a)/10
    I = 0;
    for i in range(10):
        I += f(h*i)

    return I

A = zeros(N)
for k in range(N):
    A[k] = integrate(lambda x: cos(k*x), a, b)

def如果这很难阅读,您可以使用关闭的“正常” d 函数完成等效的结束k

A = zeros(N)
for k in range(N):
    def callback(x):
        return k*x

    A[k] = integrate(callback, a, b)

(代码未测试)

于 2012-10-05T02:16:15.270 回答