2017-02-16 14 views
1

Iは数値scipy.integrate.fixed_quadは関数境界との積分を計算できますか?

import scipy.integrate as integrate 
inside = lambda x: integrate.quad(lambda x,y: 1, 0, x, args=(x))[0] 
outside = integrate.quad(inside, 0, 1)[0] 
print(outside) 
0.5 

なく(パラメータとして統合順序nを有する)scipy.integrate.fixed_quad関数を使用してと同様に三角形の上に機能を統合したいです。しかし、私は

inside = lambda x: integrate.fixed_quad(lambda x,y: 1, 0, x, args=(x), n=5) 
print(inside(5)) 

Traceback (most recent call last): File "", line 1, in File "", line 1, in File "/Users/username/anaconda/lib/python3.5/site-packages/scipy/integrate/ quadrature.py", line 82, in fixed_quad return (b-a)/2.0 * np.sum(w*func(y, *args), axis=0), None

TypeError:() argument after * must be an iterable, not int

を書くとき、私は私がscipy.integrate.fixed_quadのドキュメントを以下だと、私が間違ってやっているのか分かりません。

答えて

1

問題はargs,args=(x)の定義です。あなたがそれタプル作るために追加のコンマを追加する必要があるので、タプルとして渡される必要があります。

inside = lambda x: integrate.fixed_quad(lambda x,y: 1, 0, x, args=(x,), n=5) 

その後

inside(5) 

利回り

(5.0, None) 

ライン

integrate.quad(lambda x,y: 1, 0, x, args=(x))[0] 

はのように動作しますが、argsがタプルであるかどうかがチェックされる。ケースはないという

if not isinstance(args, tuple): 
     args = (args,) 

fixed_quadでは、あなたは両方のケースを一つにエラーを受信しなく理由です:それは変換されない場合(直接ソースコードから取られました)。

+0

興味深いことに、それがコンマなしでintegrate.quadのために働いたとは思いませんでした。しかし、 'outside = integrate.fixed_quad(inside、0,1、n = 5)[0]'を実行すると、別のValueErrorが返されるため、二重積分を計算することができません。それは 'integrate.quad(inside、0、1)'で動作しますが、両方の積分でn(ガウス積分次数)パラメータを持つことをお勧めします。 – Jan

+0

@Jan:「quad」が呼び出されたときにクラッシュしない理由についての情報を投稿に編集しました。 – Cleb

関連する問題