我希望在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 >= 0
、sik
和sjk
是实数,情况就是这样。
一开始的积分可以简化为exp(-t^2)
的积分(使用一些仿射变换(,这是出了名的没有"闭合形式",但它通常被写成
erf(x) = 2/sqrt(pi) * integral(@(t)exp(-t.^2),0,x)
我强烈建议阅读维基百科上关于错误函数的文章。
此外,我建议使用比MATLAB符号工具箱更适合初学者的CAS。我推荐一个免费的开源CAS是Maxima。
(由于SO上缺少LaTeX,所以这都是用MATLAB表示法编写的。(