2016-07-15 23 views
0

これはMATLABの新機能です。私は関数を統合したいと思います。私はint()とintegrate()を試していますが、それらはすべて私に問題を引き起こします。パラメータや他のさまざまなエラーではなく、ドキュメントとの多くの組み合わせを試しました。それによればOKと思われるがMATLABでの積分関数

syms x; 
w = 1; 
hbar = 1.054571800*10^(-34); 
k = (w/(pi*hbar))^(1/4); 
e = @(q) (w*q/hbar)^(1/2); 
waveF = @(q) k*exp(-feval(e,q)*feval(e,q)*1/2.0)*1.0/1; 
func = @(p,q) waveF(q-x/2)*waveF(q+x/2)*exp(1i*p*x/(hbar)); 

res = @(p,q) int(func(p,q), x = -Inf..Inf); 

現在「X =」エラーENとして示されている:私の現在のコードは、次のは、私は数値結果をRESに番号pとqを通過して得ることができるようにしたいですドキュメンテーション

ありがとうございました。

答えて

4

あなたはSymbolic Toolboxと協調してanonymous functionsを使用していて、誤ってあなたがSymbolic intを望んでいたときに実際に、エラーを生成しているintMuPADバージョンを、使用しています。シンボリック呼び出しで無名関数を混合しながら

は違法ではない、私はあなたが良い時間で計算の一つのパラダイムにこだわるによって提供されるだろうと思う:シンボリック関数を使用して

  1. 純粋にシンボリックバージョン:

    syms x p q e(q) waveF(q) func(p,q) res(p,q); 
    w   = sym(1); 
    hbar  = sym('1.054571800E-34'); 
    k   = (w/(pi*hbar))^(1/4); 
    e(q)  = sqrt(w*q/hbar); 
    waveF(q) = k*exp(-e(q)^2/2); 
    func(p,q) = waveF(q-x/2)*waveF(q+x/2)*exp(1i*p*x/(hbar)); 
    res(p,q) = int(func(p,q),x,-Inf,Inf); 
    

    hbarの値を引用符で囲み、計算中に強制された最も近い有理表現ではなく、指定された値を強制的に使用します。


匿名関数および数値 integral機能を使用して
  • 純粋数値バージョン:

    w  = 1; 
    hbar = 1.054571800E-34; 
    k  = (w/(pi*hbar)).^(1/4); 
    e  = @(q) sqrt(w*q/hbar); 
    waveF = @(q) k*exp(-e(q).^2/2); 
    func = @(p,q,x) waveF(q-x/2).*waveF(q+x/2).*exp(1i*p*x/hbar); 
    res = @(p,q) integral(@(x) func(p,q,x),-Inf,Inf); 
    

  • これらのバージョンの両方の生成resが評価されたときのNaNが、これはおそらく欠点です被積分関数。しかし、上記のスクリプトの背後にある機能的な形式やアイデアは、さまざまな被扶養家族によって変わることはありません。