Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在将双精度矩阵的数组发送给解算器之前,将该矩阵拆分为一个大数的逻辑是什么?_C++_Arrays_Matrix_Fortran - Fatal编程技术网

C++ 在将双精度矩阵的数组发送给解算器之前,将该矩阵拆分为一个大数的逻辑是什么?

C++ 在将双精度矩阵的数组发送给解算器之前,将该矩阵拆分为一个大数的逻辑是什么?,c++,arrays,matrix,fortran,C++,Arrays,Matrix,Fortran,我得到了一个代码,当组装矩阵[a]时,它将[a]{X}=[B]中[a]的成员分成10^4。 然后它还将结果数组除以该数字以计算正确的值。 我不明白为什么要这样做?双精度是否对其可容纳的整数数量有限制;那么这个代码的制作者想要增加浮点数?或者他误解了双精度的概念?没有看到代码,很难说 有时,进行缩放是出于IO原因,而不是计算原因 如果“*1E-4”是单精度的,则可能会对传入数据进行离散化,然后计算可以是双精度的 显然,查看代码会有所帮助。除以某个常数不会提高解决方案的精度,因为浮点数具有指数表示形

我得到了一个代码,当组装矩阵[a]时,它将[a]{X}=[B]中[a]的成员分成10^4。 然后它还将结果数组除以该数字以计算正确的值。
我不明白为什么要这样做?双精度是否对其可容纳的整数数量有限制;那么这个代码的制作者想要增加浮点数?或者他误解了双精度的概念?

没有看到代码,很难说

有时,进行缩放是出于IO原因,而不是计算原因

如果“*1E-4”是单精度的,则可能会对传入数据进行离散化,然后计算可以是双精度的


显然,查看代码会有所帮助。

除以某个常数不会提高解决方案的精度,因为浮点数具有指数表示形式。因此,一些大数字的缩放将在很大程度上影响指数,在较小程度上影响有效位。 求解时,数值上比较困难的部分是添加不同数量级的浮点数,因为这会影响有效位的数量。但是,这不受全局缩放的影响,因为指数差保持不变。同样,除法、乘法和平方根也不会受到影响


影响解决方案的因素是使用不同的比例因子,例如强制对称a的对角线为1。然而,这对迭代解算器有很大帮助,而cholesky分解和类似的分解只会受到较小程度的影响。

什么是“组装”?密码在哪里?是C++还是FORTRAN?为什么两个标签都有?你会为所有可能遇到矩阵的语言添加标记吗?@VladimirF通过组合,我指的是将成员aij添加到矩阵[a]以及相应的I&j的过程。你应该发布显示操作的代码片段。显然,仅仅分割矩阵并不会改变任何可能的病态,它会影响某些浮点运算的精度。例如,将1添加到。0000345比将1与5e50相加更精确。这取决于用于计算“结果数组”的算法。一些矩阵求逆(或求解一组线性方程组)稳定性较差的快速算法对非常大或非常小的值非常敏感,即使矩阵
a
不是病态的,在这些情况下,缩放可以减轻舍入误差的影响。这种情况下所需的比例因子取决于
A
B
,因此
10^4
的固定值似乎是任意的。