Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的厄米矩阵与符号零+;_C++_Matrix_G++_Signed_Hermite - Fatal编程技术网

C++ c+中的厄米矩阵与符号零+;

C++ c+中的厄米矩阵与符号零+;,c++,matrix,g++,signed,hermite,C++,Matrix,G++,Signed,Hermite,我只想检查矩阵是否是厄米特矩阵。设[][]为二维数组。C[][]是A[]]的共轭矩阵。T[][]是C[]]的转置矩阵。现在我要检查T[][]==A[][]。我编译了这个程序,输入了一个有效的厄米矩阵后,它说这个矩阵不是厄米矩阵。我找到了背后的原因。编译器将0==-0计算为false。但在我朋友的电脑里,编译器说矩阵是厄米特矩阵。我们都运行相同的代码。这背后的原因是什么? 我要给你举个例子。我有一个元素A[0][0]=5。在共轭和转置之后,这个元素变成了5-0i(复数部分为负零)。因此,我的计算机

我只想检查矩阵是否是厄米特矩阵。设[][]为二维数组。C[][]是A[]]的共轭矩阵。T[][]是C[]]的转置矩阵。现在我要检查T[][]==A[][]。我编译了这个程序,输入了一个有效的厄米矩阵后,它说这个矩阵不是厄米矩阵。我找到了背后的原因。编译器将0==-0计算为false。但在我朋友的电脑里,编译器说矩阵是厄米特矩阵。我们都运行相同的代码。这背后的原因是什么? 我要给你举个例子。我有一个元素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;
} 
#包括
#包括
使用名称空间std;
int main(){
typedef复合comp;
compa[3][3]={{2,comp(2,1),4},{comp(2,-1),3,comp(0,1)},{4,comp(0,-1),1};
薪酬C[3][3];薪酬T[3][3];
int a=0;

对于(int i=0;i您可以替换

typedef complex<double> comp;
typedef复杂comp;

typedef复杂comp;
或者,如果您想继续使用double(从您的示例中,我看不出任何原因),您可以使用此函数来比较两个复数:

bool double_equals(complex<double> a, complex<double> b, double epsilon = 0.001)
{
    bool retval = false;
    if ((std::abs(a.real() - b.real()) < epsilon) && (std::abs(a.imag() - b.imag()) < epsilon))
        retval = true;
    return retval;
}
bool double_等于(复数a,复数b,双ε=0.001)
{
bool-retval=false;
if((std::abs(a.real()-b.real())
另见:
1)
0==-0
没有
-0
这样的事情,2)如果你不给我们看一些代码,没有人能帮你。@DimChtz如果OP使用的是浮点数,那么就有
+0
-0
@NathanOliver是的,你是对的。@DimChtz,我编辑了这个问题。我只是想检查我的矩阵是否是hermitian矩阵。
bool double_equals(complex<double> a, complex<double> b, double epsilon = 0.001)
{
    bool retval = false;
    if ((std::abs(a.real() - b.real()) < epsilon) && (std::abs(a.imag() - b.imag()) < epsilon))
        retval = true;
    return retval;
}