Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
matlab符号与实数的集成给出了一个复杂的答案_Matlab_Symbolic Math - Fatal编程技术网

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

matlab符号与实数的集成给出了一个复杂的答案,matlab,symbolic-math,Matlab,Symbolic Math,我希望在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

我希望在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);
你所得到的(直到一些常数)形式

这包括两个术语的形式

- 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

(由于此处缺少乳胶,所以全部用MATLAB表示法编写。)

您得到的是(在某些常数因子下)形式

这包括两个术语的形式

- 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

(由于此处缺少乳胶,因此全部用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”,而这个“i”反过来将“杀死”与之“接触”的其他“i”。由于(-thetak)^(1/2)可以在以下位置找到,因此该取消将在不同的位置发生:

1) 在erf表达式和

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

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

最后给出(我将Tak=s^2设置为s>0):

编辑:您可能已经跳过了集成。其思想是将$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\u a^b exp(-t^2}dt)(erf(b)-erf(a))$$

您得到的答案(如果您有一个类似于我的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”。由于(-thetak)^(1/2)可以在以下位置找到,因此该取消将在不同的位置发生:

1) 在erf表达式和

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

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

最后给出(我将Tak=s^2设置为s>0):

编辑:您可能已经跳过了集成。其思想是将$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\u a^b exp(-t^2}dt)(erf(b)-erf(a))$

PS:我需要一个只包含实部的封闭形式的分析表达式。虚部确实是零(但函数“real”不能只给出实部)。小注释:“simplify(collect(expand(Bijk_raw))”应该是简单的“simplify(expand(Bijk_raw))”(不需要收集任何东西)。实际上,我试过使用和不使用collect。使用collect给出了一个更简洁的答案。PS:我想要一个封闭形式的分析表达式,它只包含真实的部分。虚部确实是零(但函数“real”不能只给出实部)。小注释:“simplify(collect(expand(Bijk_raw))”应该是简单的“simplify(expand(Bijk_raw))”(不需要收集任何东西)。实际上,我试过使用和不使用collect。使用collect可以给出更简洁的答案。感谢您提供的信息丰富的答案。错误函数是OK(我认为它是为了我的目的而关闭的)。谢谢你的信息性回答。错误函数是OK(我认为它是为了我的目的而关闭的)。谢谢。根据你的答案,我只需要添加一行额外的代码,让Matlab显式生成一个没有虚部的答案。我添加了“假设(thetak>0)”。我没有想到约束变量域的这种可能性。关于你问题的数学方面,我有一个相当重要的补充意见;我将对它作另一个评论(如下)我有一个