【发布时间】:2017-11-02 02:53:05
【问题描述】:
我正在解决一些中间步骤需要求解 Ax=b 线性系统的问题。我打算使用 lapack 通过使用 DGESV 之类的子程序来解决它。但是我发现 lapack 将矩阵“A”转换为“PLU”(一些较低和较高的矩阵格式)。我希望“A”在我未来的操作中完好无损。我是否需要在每次发送到 lapack 之前制作它的副本?复制“b”是可以的,但是,如果“A”很大,那么复制自身很耗时。有没有办法避免它或lapack的其他一些功能,以避免改变“A”。另外,如果复制是不可避免的,那么有没有一种有效的方法来实现它?我使用“C”作为编程语言。
【问题讨论】:
-
(1) 如果一个函数修改了一个数据结构,并且需要保留原来的内容,那么需要先复制它 (2) 复制一个矩阵所花费的时间相比于求解涉及该矩阵的线性系统所需的时间。
-
您是否使用
memcpy()函数一次复制整个矩阵?它比使用 for 循环更有效。 -
谢谢。我认为 lapack 有一些额外的输入参数可以将新信息存储到其他矩阵中。无论如何,如果不可能,那么正如弗朗西斯所建议的那样; memcpy() 是一个不错的选择。