gpt4 book ai didi

c++ - dgesv 中的舍入错误?

转载 作者:行者123 更新时间:2023-11-28 03:28:37 26 4
gpt4 key购买 nike

我正在使用 C++ 中的 dgesv 和 dgemm fortran 子例程来执行一些简单的矩阵乘法和左除法。

对于随机矩阵 A 和 B,我这样做:

A\(A\(A*B));

其中 * 使用 dgemm 定义,而\使用 dgesv 定义。显然,这个表达式应该简化为单位矩阵。我正在针对 MATLAB 测试我的答案,我在对角线上或多或少地得到了 1,但其他条目略微偏离(数字在 e-15 的数量级,所以它们已经接近 0) .

我只是想知道这个结果是否符合预期?因为如果我这样做:

C = A+B;
D = A*B;

D\(C\(C*C));

结果应该交给D\C。基本上,C(C*C) 非常准确(与 MATLAB 完美匹配),但第二次我执行 D\C 我得到的结果是 e-1 甚至 e+00。我猜这不应该发生?

最佳答案

您的问题似乎与 C/C++ 中浮点变量的有限精度有关。您可以阅读更多相关信息 here .有一些技术可以最大限度地减少这种影响(其中一些在 wiki 文章中有所描述),但在几次操作后总会有一些准确性损失。您可能想要使用一些支持任意精度数字的第三方数学库(例如 GMP)。但是仍然 - 只要您坚持使用数值方法,您的计算的准确性就会始终受到污染。

关于c++ - dgesv 中的舍入错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235941/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com