MATLAB

2017-02-04 10 views
0

に機能を統合Iは、以下のように定義される密度関数f_Nを有する(K_nu(z)ある変形ベッセル関数):MATLAB

IがNの各値は、次の積分を計算するenter image description here

enter image description here

以下は、MATLABにおける上記の実装です。

for N=1:100 
    syms z 
    f [email protected](z) (1/(gamma(N)*sqrt(pi))*(z/2).^(N-0.5).*besselk(0.5-N,z)); 
    g = @(z) f(z).*log(f(z)); 
    val=integral(g,0,Inf); 

しかし、私は上記のコードを実行すると、それは常に次の警告でNのvaroiousの値についてはNaNを返します:

Warning: Infinite or Not-a-Number value encountered 

誰かがこれを行うか、この問題を回避するための簡単な方法を提案することはできますか?

+0

「^」を「。^」で置き換え、何が起こるか教えてください。 –

+0

私はこのエラーが表示されます: '* 内部行列の寸法が一致している必要があります。 ' – pikachuchameleon

+0

' * 'を'。* 'に置き換える必要もあります。そのドットは操作が要素単位であるようになっています –

答えて

0

私はあなたがあなたがしていると思っているとは思わないと思います。シンボルとしてのzの宣言は、関数ハンドル定義によってオーバーライドされます。つまり、積分は記号的なものではなく、数値的なものです。したがって、関数ハンドル表記法 "@(z)"を削除し、記号的に積分を行うことです。

これを徹底的に分析することなく、私の推測では、 [0、inf]はf(x)= infの値を生成します。これは数値的な統合手法を破壊しますが、シンボリックな手法ではない可能性があります。

+0

しかし、私は記号的ではなく積分の数値が必要です。 – pikachuchameleon

+0

はい。という事は承知しています。しかし、この場合、シンボリック積分は定数 –

+0

と評価されます。たとえば、t = 0 ... piのcos(t)を積分しようとすると、いくつかの数値が得られます。しかし、あなたはその数に2つの方法で着くことができます...あなたはそれを記号的に統合して正確な解を得るか、数値的に近似する –