- 主题:最近用一个数值计算的库,Debug版和Release版本计算出的结果差
最开始怀疑是“Floating Point Model”的问题,但是发现Debug和Release版本都是"Precise (/fp:precise)"。
后来尝试把Release的优化关掉,结果就一致了,但是Release版本关掉优化并不是一个解决方案。
库是Eigen,一直把它当作黑盒子用,实现也比较复杂,没精力深入进去debug
--
FROM 223.70.159.*
你是指一个编译选项?我用VS2015,没发现这个编译选项。
内部都是用double型在运算。
【 在 Akyrum 的大作中提到: 】
: float都提升精度到double试试?
--
FROM 223.72.43.*
这么庞大的库,学会怎么用已费劲了,还要进去debug,想想都头大
【 在 dormouseBHU 的大作中提到: 】
: 浮点数不满足加减法的结合律,所以优化一下可能结果就不同了。
: 想要结果一致就需要上汇编。
: EIGEN 这样的头文件的库就比较容易出这个问题。那种传统的库就没事。因为他们基本只提供release的版本。。。
: ...................
--
FROM 223.72.43.*
结果差别很大。是L-M拟合算法,可能就是因为局部的微小差别引起的最终结果差别明显
【 在 dormouseBHU 的大作中提到: 】
: 只要精度满足要求,rel和debug的结果不一样也没什么问题吧。。。
: 本来计算机算的就是个近似解,没必要要求必须完全相同
: 【 在 iamrzd 的大作中提到: 】
: ...................
--来自微微水木3.5.14
--
FROM 223.72.43.*
就是运算结果差别肉眼可见
【 在 lwp 的大作中提到: 】
: 差什么?
: 标题没写完啊
: 【 在 iamrzd 的大作中提到: 】
: ...................
--来自微微水木3.5.14
--
FROM 223.104.40.*
曲线拟合,公式的形式是已知的,调用Eigen库的LM进行拟合,想不到算法有啥问题
【 在 foliver 的大作中提到: 】
: 我的理解是你的程序算法的有问题。
: 在绝大多数数值计算中,float已经足够使用了。
:
: ...................
--来自微微水木3.5.14
--
FROM 223.104.40.*
两个版本计算出来的值有明显差别
【 在 mango7788 的大作中提到: 】
: 你的意思是 debug 版的结果是对的,release 版的不对?
:
: --
: ...................
--来自微微水木3.5.14
--
FROM 223.70.159.*
对,第一次接触这块,有什么需要注意的地方,能指点一下吗
【 在 ziqin 的大作中提到: 】
: 听起来只是机械的套用了矩阵的那些理论,没有考虑实际数值计算问题
:
: 【 在 iamrzd 的大作中提到: 】
: ...................
--来自微微水木3.5.14
--
FROM 223.70.159.*
应该属于非线性最小二乘法范畴(Non-linear Least Squares)
具体的是eigen的eigen-3.4.0\unsupported\Eigen\LevenbergMarquardt,从名称来看,就是属于eigen里非官方正式支持的功能。
【 在 fourwind 的大作中提到: 】
: 如果是线性的话(我猜大概率是线性,因为Eigen好像就是一个处理矩阵相关的),那么很可能是自变量共线性了;如果是非线性那就更麻烦了。
--
FROM 223.70.159.*
具体的是根据实验室测试出来的一组数据,进行数据拟合,拟合公式的格式是固定的,用L-M算法来拟合出4个公式参数。
【 在 easior 的大作中提到: 】
: 说起这些算法细节,忽然来了兴趣
: 不知道楼主在做什么问题
: 算法的数值稳定性有没有结论?
: ...................
--
FROM 223.70.159.*