2016-07-15 179 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被积函数。但是,上述脚本背后的功能形式和想法不会随着不同的被积函数而改变。