2017-05-04 82 views
0

我想实现一个Python程序,它可以计算出这个积分 Here is the integral蟒蛇积分计算,而无需使用for循环

我知道如何使用For循环,使它,它会是这个样子

import numpy as np; 


def numint(f,alpha,beta,N,b,c): 
    s = np.size(b); 
    x = np.linspace(alpha,beta,N); 
    h = x[1]-x[0]; 
    result = 0; 
    result1 = 0; 
    for j in range(1,N+1): 
     for i in range(1,s+1): 
      result1+=b[i]*f(x[j-1]+h*c[i]); 
     result+=h*result1; 
     result1 = 0; 
    return result; 

没有环路我想应该是这样的:

def numint(f,alpha,beta,N,b,c): 
    s = np.size(b); 
    x = np.linspace(alpha,beta,N); 
    h = np.ones(N,dtype=int)*(x[1] - x[0]); 
    result = 0; 
    result = np.sum(h[1:N+1] * np.sum(b*(f(x[0:N]+h[0]*c)))); 
    return result; 

但结果的第二部分= np.sum ...是错误的d我不知道如何解决它。有什么建议么 ?

编辑:

def numint(f,alpha,beta,N,b,c): 
    s = np.size(b); 
    x = np.linspace(alpha,beta,N); 
    h = np.ones(N,dtype=int)*(x[1] - x[0]); 
    functionResult = f(x+h*c); 
    dif = np.diff(functionResult); 
    result = 0; 
    result = np.sum(h[1:N+1] * np.sum(b*dif.sum())); 
    return result; 

有一个小窍门:矢量化他们 ,但我不知道如何使用它

回答

0

你要找的是np.diff功能。

说您正在寻找的积分从0到10 F(X)= X^2 F(X)=(X^3)/ 3:

x = np.linspace(0, 10, 1000) 
F = lambda x: x**3/3 
b = F(x) 

dif = np.diff(b) 

sum = dif.sum() 

print(sum) 
333.33333333333326 

实际结果是333.3。 ..

你可以用你想要的任何函数替换F,但是关键是np.diff,它将数组的大小减1。然后,只需根据您的时间间隔对差异进行总结即可获得结果。

您可以通过简单地增加步数(在我的示例中为1000)来提高结果的精度。

+0

噢,抱歉,但我不确定在我的代码中如何使用它。我的函数应该计算数值积分的积分公式。你能告诉我如何使用这个差异函数。 –

+0

b = f(x + h * c) dif = np.diff(b); 然后用这个? –

+0

你能告诉我,我的编辑是你给我看的吗? –