java 计算数据_Java中的数值计算

无穷积分有两个问题:收敛性和收敛值。也就是说,积分是否收敛?如果是,它会收敛到什么值?有保证收敛的积分,但其值不可能精确确定(尝试从e^(-x^2)的1到无穷大的积分)。如果不能精确返回,那么在数学上就不可能得到精确的答案,只剩下近似值。ApacheCommons使用了几种不同的近似方案,但所有这些方案都需要使用有限边界来保证正确性。

得到适当答案的最好方法是反复计算有限积分,不断增加边界,并比较结果。在伪代码中,它看起来像这样:

double DELTA = 10^-6//your error threshold here

double STEP_SIZE = 10.0;

double oldValue=Double.MAX_VALUE;

double newValue=oldValue;

double lowerBound=-10; //or whatever you want to start with--for (-infinity,1), I'd

//start with something like -10

double upperBound=1;

do{

oldValue = newValue;

lowerBound-= STEP_SIZE;

newValue = integrate(lowerBound,upperBound); //perform your integration methods here

}while(Math.abs(newValue-oldValue)>DELTA);

最后,如果积分收敛,那么你会得到足够多的重要信息,因为进一步扩大边界不会产生有意义的信息。

不过,给聪明人一句话:如果积分不收敛的话,这种情况会非常糟糕。在这种情况下,可能会出现两种情况之一:要么您的终止条件永远不满足,而您陷入无限循环,要么积分的值围绕一个值无限振荡,这可能导致您的终止条件不正确地满足(给出不正确的结果)。

为了避免第一种情况,最好的方法是在返回之前执行一些最大数量的步骤——这样做应该停止可能产生的无限循环。

为了避免第二个,希望它不会发生,或者证明积分必须收敛(为微积分2欢呼三声,有人吗?;-)

要正式回答你的问题,不,在Java中没有其他这样的方法来执行你的计算。事实上,没有保证的方法可以做到这一点

任何

语言,与

任何

算法——数学并不是按照我们想要的方式计算出来的。然而,在实践中,有很多(尽管不是全部!)关于实际积分的收敛性,我的经验是,只有大约20次迭代才能给你一个合理精度的近似值,而Apache应该足够快,能够在不花费荒谬的时间的情况下处理它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值