首页 文章

matlab与真实的符号整合给出了一个复杂的答案

提问于
浏览
0

我希望得到Matlab中以下积分的解析(封闭形式)解决方案 . 但是,Matlab给出了一个实部和虚部的答案 . 如何通过“真实”部分来获得答案 . 这是完整的代码 .

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);

2 回答

  • 2

    你得到的答案(如果你有类似我的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)   )
    

    给人的印象是你到处都有复杂的数字 .

    但事实上,由于(-thetak)^(1/2),这是一种错误的印象 .

    实际上,取负数的平方根将产生“i”,而“i”又“杀死”与其“接触”的其他“i” . 由于可以找到(-thetak)^(1/2)这一事实,这种取消将发生在不同的地方:

    1)在erf表达式和

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

    验证规则i ^ 2 = -1适用于任何地方,没有机会生存任何“我”......

    最后给出(我已设置thetak = 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(-thetak *((t-sik)^ 2(t-sjk)^ 2))$中的二次方,在你的情况下是:$ exp( -thetak *(((tA)^ 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))$$

  • 1

    你得到了什么(取决于一些常数因素)的形式

    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上的维基百科文章 .

    此外,我建议使用比MATLAB符号工具箱更友好的CAS . 我想推荐的一个免费和开源CAS是Maxima .

    (由于SO上缺少LaTeX,因此全部用MATLAB表示法编写 . )

相关问题