matlab 与 real 的符号积分给出了一个复杂的答案

matlab symbolic integration with real gives a complex answer

我希望在 Matlab 中得到以下积分的解析(封闭形式)解。然而,Matlab 给了我一个实部和虚部的答案。我如何让它只用 "real" 部分产生答案。这是完整的代码。

close all;
clear all;
clc;

syms t real;
syms thetak real;
syms sik real;
syms tbar real;
syms sjk real;

expr = exp(-thetak*((t-sik)^2 + (t-sjk)^2));
Bijk_raw = int(expr,t,0,1);
Bijk = simplify(collect(expand(Bijk_raw)));
fprintf('Bijk is as follows...\n');
pretty(Bijk);

你得到的(取决于一些常数因子)形式

 1i * (c * erf(1i * a) - erf(c * 1i * (a - 2)))

这由两个形式的术语组成

- 1i * erf(1i * x)

也称为 虚数误差函数 erfi()。结果是

erfi(x) = - 1i * erf(1i * x) = 2/sqrt(pi) * integral(@(t)exp(t.^2),0,x)

所以对于 x 的实数值,你的表达式实际上是实数,如果 thetak >= 0siksjk 是实数,情况就是这样。

你开始的积分可以简化为 exp(-t^2) 的积分(使用一些仿射变换),众所周知它没有 "closed form",但通常写成

erf(x) = 2/sqrt(pi) * integral(@(t)exp(-t.^2),0,x)

我强烈建议阅读 error function 上的维基百科文章。

此外,我建议使用更适合初学者的 CAS than the MATLAB symbolic toolbox. One free and opensource CAS I like to recommend is Maxima

(由于SO上缺少LaTeX,这里全部用MATLAB符号写成。)

您获得的答案(如果您有与我类似的 Matlab 版本)并且我在此处重现:

  /               /                     2 \ 
  |  1/2   1/2    |   thetak (sik - sjk)  | 
- | 2    pi    exp| - ------------------- | 
  \               \            2          / 
 /    /  1/2          1/2                 \ 
 |    | 2    (-thetak)    (sik i + sjk i) | 
 | erf| --------------------------------- | i - 
 \    \                 2                 / 

    /  1/2          1/2                       \   \ \ 
    | 2    (-thetak)    (sik i + sjk i - 2 i) |   | | 
 erf| --------------------------------------- | i | | / 
    \                    2                    /   / / 
             1/2 
 (4 (-thetak)   )

给人的印象是你到处都是复数 i。

但实际上由于(-thetak)^(1/2),这是一个错误的印象。

确实,对一个负数求平方根会生成一个 "i",它又会 "kill" 与它 "in contact" 的其他 "i"。由于可以找到 (-thetak)^(1/2) 的事实,这种取消将发生在不同的地方:

1) erf 表达式内部和

2) 作为共同点(最后一行)。

验证规则 i^2=-1 适用于所有地方,不给任何 "i"...

的生存机会

终于给出了(我设置了 s>0 的 thetak=s^2):

  /               /                      \ 
  |  1/2   1/2    |   s^2 (sik - sjk)^2   |   
- | 2    pi    exp| - ------------------- | 
  \               \            2          / 
 /    /  1/2                   \ 
 |    | 2    s    (sik  + sjk ) | 
 | erf| ----------------------- |  - 
 \    \           2            / 

    /  1/2                          \   \ \ 
    | 2    s   (sik  + sjk  - 2 )   |   | | 
 erf| ----------------------------- |   | |   /   (4 s)
    \             2                 /   / / 

编辑:您本可以逃脱整合。这个想法是在所谓的 "canonical form" 下转换 $exp(-thetak*((t-sik)^2 + (t-sjk)^2))$ 的二次,在你的情况下是: $ exp(-thetak*(((t-A)^2 + B))/C);$ 其中 $A,B,C$ 可以表示为 sik 和 sjk 的函数(例如 $A=(sik+sjk)/ 2$);通过这种方式,设置 $T=t-A$,您将回到经典的高斯积分,公式为:

$$\frac{2}/{\sqrt{\pi}}\int_a^b exp(-t^2} dt) (erf(b) - erf(a))$ $