k****f 发帖数: 3794 | 1 做laplace逆变换
中间结果是一堆浮点数求和:有大有小,有正有负
大的能够到10^40,小的能小到10^(-40),
求和结果是应该在10^(-40)附近。
现在程序写出来,可是不稳定。。
经常变成负的(应该是正的结果)。
有谁给推荐一个数值稳定的laplace变换软件包
不能用bignum,速度实在是太慢了。 |
O*******d 发帖数: 20343 | |
k****f 发帖数: 3794 | 3 就是这样子的式子
b_i是在【-100,100】之间的,n大概是40左右
怎么算才会稳定呢?
【在 k****f 的大作中提到】 : 做laplace逆变换 : 中间结果是一堆浮点数求和:有大有小,有正有负 : 大的能够到10^40,小的能小到10^(-40), : 求和结果是应该在10^(-40)附近。 : 现在程序写出来,可是不稳定。。 : 经常变成负的(应该是正的结果)。 : 有谁给推荐一个数值稳定的laplace变换软件包 : 不能用bignum,速度实在是太慢了。
|
t****t 发帖数: 6806 | 4 分子全是b_j-1?不是b_k-1?
BTW, M$的公式真丑
【在 k****f 的大作中提到】 : 就是这样子的式子 : b_i是在【-100,100】之间的,n大概是40左右 : 怎么算才会稳定呢?
|
k****f 发帖数: 3794 | 5 nod,全是b_j -1,
选定所有b_j>1,每个b_j,求n个分式的积。对所有的积再求和。
刚好是正负号交错的序列。不知道有什么好技巧,要求数值很稳定的。
好像跟超几何分布有关的。
【在 t****t 的大作中提到】 : 分子全是b_j-1?不是b_k-1? : BTW, M$的公式真丑
|
t****t 发帖数: 6806 | 6 数值计算主要就是减小误差了,所以你把正负分开,都从小到大排列,然后从小加到大,再
相减
你应该没有能够对消的项吧,如果有,要先对消
【在 k****f 的大作中提到】 : nod,全是b_j -1, : 选定所有b_j>1,每个b_j,求n个分式的积。对所有的积再求和。 : 刚好是正负号交错的序列。不知道有什么好技巧,要求数值很稳定的。 : 好像跟超几何分布有关的。
|
k****f 发帖数: 3794 | 7 好像没有的。正负分开也不行的。
关键是有大数相减得一个小数
这很难处理的。
结果应该是很小的数。
【在 t****t 的大作中提到】 : 数值计算主要就是减小误差了,所以你把正负分开,都从小到大排列,然后从小加到大,再 : 相减 : 你应该没有能够对消的项吧,如果有,要先对消
|
t****t 发帖数: 6806 | 8 你还是自己推导吧...看有什么变换的办法能提高相减的精度,
【在 k****f 的大作中提到】 : 好像没有的。正负分开也不行的。 : 关键是有大数相减得一个小数 : 这很难处理的。 : 结果应该是很小的数。
|
d*****l 发帖数: 8441 | 9 你的交错级数满足莱布尼兹收敛准则吗?
【在 k****f 的大作中提到】 : 做laplace逆变换 : 中间结果是一堆浮点数求和:有大有小,有正有负 : 大的能够到10^40,小的能小到10^(-40), : 求和结果是应该在10^(-40)附近。 : 现在程序写出来,可是不稳定。。 : 经常变成负的(应该是正的结果)。 : 有谁给推荐一个数值稳定的laplace变换软件包 : 不能用bignum,速度实在是太慢了。
|
d*****l 发帖数: 8441 | 10 我觉得正好相反,是要正的和负的加,而且是两个操作数的绝对值越接近越好。
【在 O*******d 的大作中提到】 : 建议读一下这个帖子。 就是把正负结果分开加起来,最后作总的加法。 : http://www.mitbbs.com/article_t/Programming/24172384.html
|
k****f 发帖数: 3794 | 11 是有限项的,无所谓收敛
不过终于解决了,用big num的长整数算
速度慢了上百倍。不过数值终于稳定了
【在 d*****l 的大作中提到】 : 你的交错级数满足莱布尼兹收敛准则吗?
|
O*******d 发帖数: 20343 | 12 我说的正负分开不是按照运算符号分开,而是按照每一项的具体运算结果的正负。这样
作,你作的都是加法, 只有在
最后总正和总负相加时,才作一次减法。
【在 k****f 的大作中提到】 : 好像没有的。正负分开也不行的。 : 关键是有大数相减得一个小数 : 这很难处理的。 : 结果应该是很小的数。
|
d*****l 发帖数: 8441 | 13 有没有试一试将同等数量级(相近)的数值配对相减,最后
将这些差值加起来呢?
也有可能需要多次这种配对,(对这些差值再按照绝对值
相近的配对相减,。。。,直到最后)
反正是不能把特大的和特小的配对加减,那样会损失精度的。
【在 k****f 的大作中提到】 : 是有限项的,无所谓收敛 : 不过终于解决了,用big num的长整数算 : 速度慢了上百倍。不过数值终于稳定了
|
d*****l 发帖数: 8441 | 14 我又看了一下你的运算式子,那些乘积是有理分式的连乘。
我想,只要每一个连乘结果的动态范围不是出奇的大就应该不是
非常的难。首先我们把它的2N个分子分母都表示成连乘。跟连续
加减相似,我们先将各个因子按照大小排序,然后将最小的和最大
的配对相乘,次小的和次大的配对相乘,。。。,这样就能保证
中间结果的精度和动态范围了。
【在 k****f 的大作中提到】 : 就是这样子的式子 : b_i是在【-100,100】之间的,n大概是40左右 : 怎么算才会稳定呢?
|