在 MATLAB 中集成函数

Integrate function in MATLAB

我是 Matlab 新手。我想集成一个功能。我尝试了 int() 和 integrate() 但它们都会给我带来问题 - 参数不足或其他不同的错误,我尝试了很多与文档的组合。我当前的代码如下,我希望能够将数字 p 和 q 传递给 res 并获得数值结果:

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 错误,尽管根据文档看起来没问题。

谢谢。

您正在使用 anonymous functions in concert with the Symbolic Toolbox and have mistakenly used the MuPAD version of int, which is actually generating the error, when you wanted the 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 的值用引号括起来,以强制使用提供的值,而不是在计算过程中会被强制使用的最接近的有理表示。


  1. 使用匿名函数和数字 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,但这可能是被积函数的缺点。但是,上述脚本背后的函数形式和思想不会随着被积函数的不同而改变。