高效 – 在c#中使用两个向量进行对称矩阵乘法
按照以下步骤,从cMinor中有效地复制c-sharp中的对称矩阵 。
关于如何通过使用矩阵的数组实现来构建具有一个行向量和一个列向量的对称方矩阵乘法的一些输入,我将非常有趣,而不是经典
long s = 0; List columnVector = new List(N); List lineVector = new List(N); //- init. vectors and symmetric square matrix m for (int i=0; i < N; i++) { for(int j=0; j < N; j++){ s += lineVector[i] * columnVector[j] * m[i,j]; } }
感谢您的输入 !
线矢量乘以对称矩阵等于矩阵的转置乘以列矢量。 因此,只需考虑列向量情况。
最初y=A*x
第i
个元素定义为
y[i] = SUM( A[i,j]*x[j], j=0..N-1 )
但由于A
是对称的,所以总和被分成总和,一个在对角线下方,另一个在上面
y[i] = SUM( A[i,j]*x[j], j=0..i-1) + SUM( A[i,j]*x[j], j=i..N-1 )
从其他发布矩阵索引是
A[i,j] = A[i*Ni*(i+1)/2+j] // j>=i A[i,j] = A[j*Nj*(j+1)/2+i] // j< i
对于N×N
对称矩阵A = new double[N*(N+1)/2];
在C#
代码中,上面是:
int k; for(int i=0; i
您尝试的示例:
| -7 -6 -5 -4 -3 | | -2 | | 10 | | -6 -2 -1 0 1 | | -1 | | 16 | | -5 -1 2 3 4 | | 0 | = | 22 | | -4 0 3 5 6 | | 1 | | 25 | | -3 1 4 6 7 | | 7 | | 25 |
要获得二次forms,请使用乘法结果向量x·A·y = Dot(x,A*y)
执行点积
您可以使用不安全的代码快速进行矩阵乘法。 我在博客上写过这篇文章 。
尽可能快地进行矩阵乘法很容易:使用一个众所周知的库。 疯狂的表演工作已经进入这些图书馆。 你不能与之竞争。