数值积分环Python

2024-04-25 05:53:55 发布

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

我想写一个程序,在循环中求解下面的定积分,循环中每次迭代考虑常数c的不同值。

然后我希望积分的每个解都被输出到一个新的数组中。

如何用python编写这个程序?

enter image description here

限制在0到1之间。

from scipy import integrate

integrate.quad

在这里可以接受。我的主要努力是组织这个计划。

这是一个旧的尝试(失败了)

# import c
fn = 'cooltemp.dat'
c = loadtxt(fn,unpack=True,usecols=[1])

I=[]
for n in range(len(c)):

    # equation
    eqn = 2*x*c[n]

    # integrate 
    result,error = integrate.quad(lambda x: eqn,0,1)

    I.append(result)

I = array(I)

Tags: fromimport程序常数scipy数组result计划
3条回答

例如计算[0,9]中c的给定积分:

[scipy.integrate.quadrature(lambda x: 2 * c * x, 0, 1)[0] for c in xrange(10)]

这是使用list comprehensionlambda functions

或者,可以将从给定c返回整数的函数定义为ufunc(感谢vectorize)。这也许更符合努比的精神。

>>> func = lambda c: scipy.integrate.quadrature(lambda x: 2 * c * x, 0, 1)[0]
>>> ndfunc = np.vectorize(func)
>>> ndfunc(np.arange(10))
array([ 0.,  1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.])
constants = [1,2,3]

integrals = []                                  #alternatively {}

from scipy import integrate

def f(x,c):
    2*x*c

for c in constants:
    integral, error = integrate.quad(lambda x: f(x,c),0.,1.)
    integrals.append(integral)                 #alternatively integrals[integral]

这将为任何常量列表输出一个与Nicolas answer相同的列表。

你真的很亲近。

fn = 'cooltemp.dat'
c_values = loadtxt(fn,unpack=True,usecols=[1])

I=[]
for c in c_values: #can iterate over numpy arrays directly.  No need for `range(len(...))`

    # equation
    #eqn = 2*x*c[n] #This doesn't work, x not defined yet.

    # integrate 
    result,error = integrate.quad(lambda x: 2*c*x, 0, 1)

    I.append(result)

I = array(I)

我觉得你对lambda的工作方式有点困惑。

my_func = lambda x: 2*x

是一样的:

def my_func(x):
    return 2*x

如果你仍然不喜欢lambda,你可以这样做:

f(x,c):
   return 2*x*c

#...snip...
integral, error = integrate.quad(f, 0, 1, args=(c,) )

相关问题 更多 >