犰狳复矩阵乘法早期逼近

Posted

技术标签:

【中文标题】犰狳复矩阵乘法早期逼近【英文标题】:armadillo complex matrix multiplication early approximation 【发布时间】:2015-04-12 15:41:38 【问题描述】:

如何提高犰狳复矩阵乘法结果的精度。它近似为小数点后 4 位 [这是结果的示例 (35.9682,-150.246)] 但我想要至少 8 位小数的精度。谢谢

【问题讨论】:

这是常见问题解答。您始终可以将打印输出的精度提高到超出您所看到的默认值。 @Dirk Eddelbuettel,我该怎么做?在我的 matlab 代码中,我的复数矩阵乘法的精度为 10 或更高,但在我的犰狳 c++ 中,早期近似确实会影响结果。谢谢 您仍然将打印精度与计算精度混淆。这里没有早期近似 哦,谢谢。让我更多地检查一下我的犰狳矩阵乘法和 matlab 中出现差异的原因。我得到的最终结果是两者的差异,所以它可能是由另一件事引起的。 【参考方案1】:

因为你似乎不相信我在 cmets 中所说的话:

#include <armadillo>

using namespace std;
using namespace arma;

int main(int argc, char** argv) 
  mat A = randu<mat>(4,5);
  mat B = randu<mat>(4,5);

  mat C = A*B.t();
  cout << C << endl;

  cout.precision(11);
  cout.setf(ios::fixed);
  C.raw_print(cout, "With increased precisions:");

  return 0;

效果符合预期:

edd@max:/tmp$ g++ -o eze eze.cpp -larmadillo -lblas -llapack 
edd@max:/tmp$ ./eze  
   0.9713   1.3566   0.7946   1.6896
   1.2593   1.1457   0.9011   1.6260
   1.1954   0.8484   1.0444   1.6753
   1.6225   1.5009   1.2935   2.2019

With increased precisions:
0.97126557882 1.35660885673 0.79462856896 1.68955180769
1.25933041551 1.14565671740 0.90105251304 1.62595390611
1.19543745264 0.84844286454 1.04436441020 1.67528315350
1.62246223165 1.50087016389 1.29351914350 2.20190979625
edd@max:/tmp$ 

士气:打印精度几乎从来没有计算精度

【讨论】:

谢谢,Dirk Eddelbuettel 由于您似乎是新来的,现在通常 a) 接受答案(单击只有您看到的刻度线)和/或 b) 投票(单击 up-三角形)。 @DirkEddelbuettel 不认为 OP 可以投票(低代表),但应该(最终)接受它,因为确实解决了问题。

以上是关于犰狳复矩阵乘法早期逼近的主要内容,如果未能解决你的问题,请参考以下文章

犰狳向量矩阵乘法

犰狳:矩阵乘法精度损失

116.复矩阵乘法

116.复矩阵乘法

GPU可以用于Android Environmement上的数值计算(复矩阵乘法)吗?

犰狳:乘法时出错