我只是想检查矩阵是否是埃尔米特。设A [] []是2D数组。 C [] []是A [] []的共轭矩阵。 T [] []是C [] []的转置矩阵。现在我要检查T [] [] == A [] []。我编译了程序,在输入有效的埃尔米特矩阵之后,它说矩阵不是Hermitian。我找到了背后的原因。编译器将0 == - 0评估为false。但在我的朋友pc编译器中说矩阵是Hermitian。我们都运行相同的代码。这背后的原因是什么? 我打算给你一个例子。我有一个元素A [0] [0] = 5。在共轭和转置之后,该元素变为5-0i(复数部分为零)。所以我的计算机无法评估5和5-0i的相等性。如何克服这个问题?
#include<iostream>
#include<complex>
using namespace std;
int main() {
typedef complex<double> comp;
comp A[3][3]={{2,comp(2,1),4},{comp(2,-1),3,comp(0,1)},{4,comp(0,-1),1}};
comp C[3][3]; comp T[3][3];
int a=0;
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
C[i][j]=conj(A[i][j]); }}
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
T[i][j]=C[j][i]; }}
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
if(T[i][j]==A[i][j])
a=a+1;
else a=0; }}
if(a==9)
cout << "Hermitian" << endl;
else cout << "Not Hermitian" << endl;
return 0;
}