Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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_Precision_Integral - Fatal编程技术网

具有重抑制指数的Matlab二重积分

具有重抑制指数的Matlab二重积分,matlab,precision,integral,Matlab,Precision,Integral,我最近一直在尝试计算函数的二重积分fun=@(v,x)(10^4)*0.648*(1+v*0.001)。*(exp(-2.83./(10^-8+(sqrt(1+2*v*0.001))。*(x.^2))-1.*(exp(-v.^2)*0.33)),范围为-10001000(v)和(0,a)x,其中a是一个非常大的数字或无穷大。我所发现的是,虽然在a=inf的情况下,该值似乎相当精确(它减少到一个单一的积分,数值计算起来比较简单),但如果我从0积分到10^9,从10^9积分到无穷大,积分总和就不会达

我最近一直在尝试计算函数的二重积分
fun=@(v,x)(10^4)*0.648*(1+v*0.001)。*(exp(-2.83./(10^-8+(sqrt(1+2*v*0.001))。*(x.^2))-1.*(exp(-v.^2)*0.33))
,范围为-10001000(v)和(0,a)x,其中a是一个非常大的数字或无穷大。我所发现的是,虽然在a=inf的情况下,该值似乎相当精确(它减少到一个单一的积分,数值计算起来比较简单),但如果我从0积分到10^9,从10^9积分到无穷大,积分总和就不会达到正确的值,后者为零。我真正感兴趣的是从0到10^9的积分,但是这些结果让我怀疑我是否能相信它。 在我所做的工作中,我还必须在函数前面使用一个大的前置因子(10^200)来“补偿”小的数字;否则,结果都是胡说八道。我曾尝试使用vpa,但没有成功。我做错了什么


Rob

看起来您的问题与Matlab在不同情况下使用的不同方法以及您处理的大量数据有关

我们可以使用
ezsurf
查看您的函数,以便了解它的行为

提示1是这个值将是负值,让我们在小范围内积分,看看它的近似值

integral2(fun,-100,100,0,100)

%ans =
%  -5.9050e+04
假设函数趋于零,我们知道最终值应该在邻域上

现在提示2:

integral2(fun,-1000,1000,0,100)

%ans =
%  -2.5613e-29
这没有多大意义,通过增加极限范围,积分基本上变为零。检查后

“方法”-积分法 “自动”(默认)|“平铺”|“迭代”

集成方法,指定为逗号分隔对,由“方法”和下面描述的方法之一组成

积分方法描述

“自动”对于大多数情况,integral2使用“平铺”方法。当任何积分极限为无穷大时,它使用“迭代”方法。这是默认方法

“平铺”积分2将积分区域转换为矩形形状,并根据需要将其细分为较小的矩形区域。积分极限必须是有限的

“iterated”integral2调用integral来执行迭代积分。外积分在xmin上求值≤ x≤ xmax。内积分在ymin(x)上求值≤ Y≤ ymax(x)。积分极限可以是无限的

如果我们不定义一个方法,如果极限是有限的,它将使用“平铺”,如果极限是无限的,它将使用“插值”

可能是因为如果范围太大,那么“平铺”方法创建的平铺太大,无法准确计算积分吗?如果是这种情况,那么“迭代”不应该有这个问题,让我们检查一下

integral2(fun,-1000,1000,0,100,'Method','iterated')

%ans =
%  -5.9050e+04
有趣的是,看起来我们有兴趣了。让我们试试原来的问题

integral2(fun,-1000,1000,0,inf)

%ans =
%  -5.9616e+04

integral2(fun,-1000,1000,0,10^9,'Method','tiled')

%ans =
%  -2.1502e-33

integral2(fun,-1000,1000,0,10^9,'Method','iterated')

%ans =
%  -5.9616e+04

integral2(fun,-1000,1000,10^9,inf)

%ans =
%     0

看起来好多了。所以看起来“平铺”方法是函数的问题,因为它的特性和限制范围的大小。因此,只要使用“迭代”,您就可以了。

看起来您的问题与Matlab在不同情况下使用的不同方法以及处理的大数字有关

我们可以使用
ezsurf
查看您的函数,以便了解它的行为

提示1是这个值将是负值,让我们在小范围内积分,看看它的近似值

integral2(fun,-100,100,0,100)

%ans =
%  -5.9050e+04
假设函数趋于零,我们知道最终值应该在邻域上

现在提示2:

integral2(fun,-1000,1000,0,100)

%ans =
%  -2.5613e-29
这没有多大意义,通过增加极限范围,积分基本上变为零。检查后

“方法”-积分法 “自动”(默认)|“平铺”|“迭代”

集成方法,指定为逗号分隔对,由“方法”和下面描述的方法之一组成

积分方法描述

“自动”对于大多数情况,integral2使用“平铺”方法。当任何积分极限为无穷大时,它使用“迭代”方法。这是默认方法

“平铺”积分2将积分区域转换为矩形形状,并根据需要将其细分为较小的矩形区域。积分极限必须是有限的

“iterated”integral2调用integral来执行迭代积分。外积分在xmin上求值≤ x≤ xmax。内积分在ymin(x)上求值≤ Y≤ ymax(x)。积分极限可以是无限的

如果我们不定义一个方法,如果极限是有限的,它将使用“平铺”,如果极限是无限的,它将使用“插值”

可能是因为如果范围太大,那么“平铺”方法创建的平铺太大,无法准确计算积分吗?如果是这种情况,那么“迭代”不应该有这个问题,让我们检查一下

integral2(fun,-1000,1000,0,100,'Method','iterated')

%ans =
%  -5.9050e+04
有趣的是,看起来我们有兴趣了。让我们试试原来的问题

integral2(fun,-1000,1000,0,inf)

%ans =
%  -5.9616e+04

integral2(fun,-1000,1000,0,10^9,'Method','tiled')

%ans =
%  -2.1502e-33

integral2(fun,-1000,1000,0,10^9,'Method','iterated')

%ans =
%  -5.9616e+04

integral2(fun,-1000,1000,10^9,inf)

%ans =
%     0

看起来好多了。所以看起来“平铺”方法是函数的问题,因为它的特性和限制范围的大小。因此,只要您使用“迭代”就可以了。

请提供您的代码。我不确定这是否是一个编程问题。它看起来更像是一个数值/数学问题。@obchardon我声明了上面所写的函数,然后用a,b适当的极值输入了“integral2(-10001000,a,b)”。@m我把它贴在这里,因为我看到了一个类似的问题,但这对我没有帮助。你建议在别的地方问一下吗?我不是一个数字数学专家,所以我不知道哪个堆栈交换站点更合适。这是一个相当具体的专业领域,我不知道真正的专家在哪里