python中函数对象的线性组合

时间:2016-05-02 13:46:36

标签: python

问题:我想在数字上集成一个函数f(t,N),该函数可以写成N个其他已知函数g_1(t), ..., g_N(t)的线性组合。

我的解决方案I:我知道函数g_i以及系数,所以我最初的想法是创建一个系数的行向量和一个包含lambda函数的列向量{{ 1}}然后使用g_i作为内部产品来获取我想要的函数对象。不幸的是,你不能只添加两个函数对象,也不能用函数对象乘以标量。

我的解决方案II:当然我可以做一些事情(基本上定义点我想要的东西):

np.dot

def f(t,N,a,g): """ a = numpy array of coefficients g = numpy array of lambda functions corresponding to functions g_i """ res = 0 for i in xrange(N): res += a[i] * g[i](t) return res 循环当然不是很好,特别是在:

  1. 我需要在许多时间步骤t
  2. 运行此功能
  3. 我将此函数f传递给数字集成例程,如scipy.integrate.quad。

1 个答案:

答案 0 :(得分:0)

简要地:

在Cython中您可以使用内存视图加快索引编制。

如果这些方程式是线性的,您可以使用sympy:

来叠加它们

示例:

import sympy as sy
x,y = sy.symbols('x y')

g0 = x*0.33 + 6
g1 = x*0.72 + 1.3
g2 = x*11.2 - 6.5
gn = x*3.3 - 7.3

G = [g0,g1,g2,gn]
#this is superimposition
print sum(G).subs(x,15.1)
print sum(gi.subs(x,15.1) for gi in G)
'''
output:
228.305000000000
228.305000000000
'''

如果它不是你想要的,给出一些输入和输出的例子,这样我就可以试着不要失明......

低ram avaiable你可以得到finxpr等于mathxpr并用一些输入来评估它。否则最好在numpy数组上工作。