2016-07-15 107 views
0

我是Matlab新手。我想集成一個函數。我嘗試int()和整合(),但他們都給我造成問題 - 沒有足夠的參數或其他不同的錯誤,我已經嘗試過許多與文檔組合。我當前的代碼是下面,我想能夠數p和q傳遞給資源和獲得數值結果:在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 =」表示爲連接錯誤雖然根據似乎確定文檔。

謝謝。

回答

4

您與Symbolic Toolbox音樂會使用anonymous functions,並錯誤地使用了MuPAD版本的int,這實際上是產生錯誤,當你想要的Symbolic int

雖然混合匿名函數與符號調用是不是非法的,我想你會通過每次堅持計算的一個範例得到更好的服務:使用符號功能

  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); 
    

  • 這兩種版本生成NaNres被評估,但這可能是一個缺點o被積函數。但是,上述腳本背後的功能形式和想法不會隨着不同的被積函數而改變。