2017-05-04 23 views
0

のために使用しなくても、私はそれがループのために使用して作成する方法を知っているし、それがこののpython積分計算ループ

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; 
ようになります。この整数 Here is the integral

を計算することができますPythonプログラムを、実装したいですループなし

は、私はそれがこのようなものであるべきだと思う:

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 ...間違っANです私はそれを修正する方法を知らない。助言がありますか ?

EDIT:先端として

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機能で使用する方法がわかりません。

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である。

は、(X)=(x^3)/ 3(X)= X^2 Fを使用すると、F 0から10までの積分を探していると言います。 ..

あなたは任意の機能でFを置き換えることができますが、キーはnp.diffで、配列のサイズを1減らします。その後、間隔に沿って差を合計すれば、結果は得られます。

単純にステップ数(この例では1000)を増やすことで、結果の精度を向上させることができます。

+0

申し訳ありませんが、私はどのように正確に私のコードでこれを使用するか分からない。私の関数は、数値積分のための直交方程式を計算する必要があります。このdiff関数の使い方を教えてください。 –

+0

b = f(x + h * c) dif = np.diff(b); これを使用しますか? –

+0

あなたの編集内容が私に見せた内容であるかどうか教えていただけますか? –