具有重抑制指数的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我把它贴在这里,因为我看到了一个类似的问题,但这对我没有帮助。你建议在别的地方问一下吗?我不是一个数字数学专家,所以我不知道哪个堆栈交换站点更合适。这是一个相当具体的专业领域,我不知道真正的专家在哪里