您好、欢迎来到现金彩票网!
当前位置:秒速快3计划 > 数值精度 >

如何提高运算时的数值精度

发布时间:2019-07-14 15:58 来源:未知 编辑:admin

  这里主要麻烦就是红色部分造成的,其他项都是常数。而实际上含 x 的项只有前面两个红色项。红色部分之所以可能会造成麻烦,是因为当x 1 且 n 较大时 (n 也不需要特别大,比如 n = 10),Hermite1(n,x) 的取值很大,而分母里 factorial(n)^0.5 也很大,当两个数都很大并相除时浮点误差可能很大。最极端的情况是,当两项分别大到为 Inf 时,他们相除的结果是 NaN。另外,当 x 较大且 n 较大时 (x 并不需要很大,比如 x = 10),此时,exp(-0.5.*x.*x) 非常小,而 Hermite1(n,x) 可能非常大,二者相乘的误差也很大。这两种因素共同作用,使得这个积分用数值方法很难精确计算。MATLAB 的数值计算精度最高为双精度计算精度,而且默认是在双精度范围计算,所以,你无法提高其数值计算精度了。

  不过,这个积分可以转化为符号计算来精确计算,计算过程很容易,不会有误差。我大致看了一下你的 Hermite1 子函数的定义,可以看出你的 Hermite1 函数就是 physicists Hermite polynomials,它的解析式实际上就是常规多项式,只要你计算出每个 n 对应多项式系数即可。那么生下来,你需要计算的积分实际上就是:

  显然这个积分当 m 为奇函数时,原函数是偶函数,所以积分为0。所以,你只需计算m为偶数的情形,而这种情形下,积分简化为:

http://hostgladjens.net/shuzhijingdu/465.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有