【问题标题】:Integrate function in MATLAB在 MATLAB 中集成函数
【发布时间】:2016-07-15 10:38:08
【问题描述】:

我是 Matlab 的新手。我想集成一个功能。我尝试了 int() 和 integration() 但它们都给我带来了问题 - 没有足够的参数或其他不同的错误,我尝试了许多与文档的组合。我当前的代码如下,我希望能够将数字 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 错误,尽管根据文档看起来没问题。

谢谢。

【问题讨论】:

    标签: matlab integration


    【解决方案1】:

    您将anonymous functionsSymbolic Toolbox 一起使用,并且在您想要Symbolic int 时错误地使用了MuPAD 版本的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,但这可能是被积函数的缺点。但是,上述脚本背后的函数形式和思想不会随着被积函数的不同而改变。

    【讨论】:

      猜你喜欢
      • 2020-07-27
      • 2017-03-09
      • 2017-06-22
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      相关资源
      最近更新 更多