matlab与real的符号集成给出了一个复杂的答案



我希望在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);

你得到的答案(如果你有一个类似于我的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",这个"i"反过来会"杀死"与它"接触"的其他"i"。由于可以找到(-θ(^(1/2(,这种抵消会在不同的地方发生:

1( 在erf表达式和内部

2( 作为公分母(最后一行(。

验证规则i^2=-1适用于任何地方,不给任何"i"的生存留下任何机会。。。

最后给出(我已经设置了tak=s^2,s>0(:

/               /                       
|  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                 /   / / 

编辑:您本可以逃脱集成。这个想法是将$exp(-tetak*((t-sik(^2+(t-sjk(^2(($中的二次型转换为所谓的"规范形式",在您的情况下是:$exp其中$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(($$

您得到的是(多达一些常量因子(形式

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)的积分(使用一些仿射变换(,这是出了名的没有"闭合形式",但它通常被写成

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

我强烈建议阅读维基百科上关于错误函数的文章。

此外,我建议使用比MATLAB符号工具箱更适合初学者的CAS。我推荐一个免费的开源CAS是Maxima。

(由于SO上缺少LaTeX,所以这都是用MATLAB表示法编写的。(