未赋值函数的线性组合

2024-09-28 20:49:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建立一个类来构造某种类型的近似函数(数学函数)。这个近似函数是给定数量的基函数的线性组合,我把它们存储在一个列表中,它将返回一个标量。该类的一个方法需要在每次迭代中更新我的近似函数,方法是将每个基函数乘以一个标量(不同基函数的标量不同),然后形成和。换句话说,我需要通过形成一个基函数的线性组合来更新我的近似函数,并将我的近似函数设置为这个未赋值的函数和。在

这个类的默认基是多项式基,我用NumPy的poly1d class实现了这个基。我形成线性组合的方式是

sum(self.basis[i]*self.coeffs[i] for i in range(self.dim))

哪里(显然)自我基础是基本函数的列表,自身系数与基函数相乘的标量列表,以及自聚焦是基函数的个数。这适用于poly1d类,但如果我使用的基础如下:

^{pr2}$

或者

def x(y):
    return y
def x2(y):
    return y**2
basis2 = [x, x2]

Basis1告诉我错误

TypeError: only length-1 arrays can be converted to Python scalars

Basis2给出了错误

TypeError: unsupported operand type(s) for *: 'function' and 'numpy.float64'

同样,使用

sum(itertools.imap(operator.mul, self.basis, self.lambdas))

适用于poly1d基,但不适用于上述其他基,并给出相同的错误消息。在

所以我的问题是:如何在Python中形成未赋值函数的线性组合(使用或不使用NumPy)?在


Tags: 方法函数selfnumpy列表forreturndef
2条回答

将函数基与系数相结合的一种快速方法是python字典:

 f = lambda x : x+1
 g = lambda x : 2*x
 d = { f : 7, g : 3 }
 print(d)
 d[f]=8
 print(d)
 def app (d,x): return  np.sum([ v * k(x) for k,v in d.items() ] )
 print(app(d,0))

打印:

^{pr2}$

然后需要派生Dict子类来处理所需的数学运算。在

更简单的方法是将coef和函数列表分开,在需要求值之前只对coef列表进行操作。在

TypeError是指数组为null或者不是数组,或者是空的,或者是NaN等等,所以可以尝试打印x和x2,并与总和中的内容进行比较。 通常情况下,把这个操作分解成一个更难的原子操作结果。在

相关问题 更多 >