当前位置: 首页 > 知识库问答 >
问题:

c中的厄米矩阵与符号零

穆远
2023-03-14

我只想检查矩阵是否是厄米特矩阵。设[][]为二维数组。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;
} 

共有1个答案

公西永嘉
2023-03-14

你可以换一个

typedef complex<double> comp;

具有

typedef complex<int> 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;
}

另请参阅: c两个不正常工作的双重值的比较

 类似资料:
  • 我使用的是JavaSwing,我需要显示一个带有方括号的矩阵(普通方括号,就像我们在数学中使用的跨越多行的方括号),矩阵大小不是固定的,它取决于输入。 下面是我用来显示矩阵的代码: 所以我正在搜索如何做到这一点,我找到了这个链接https://docs.oracle.com/javase/tutorial/uiswing/components/border.html但它不包含我需要的括号,也找到了

  • 我想使用寄存器(逐行信息)通过向量算法创建矩阵乘法。打开外循环4次我有空洞matvec_XMM(双* a,双* x,双* y,整数n,整数磅)函数的问题,它返回了不好的结果,这是算法wchich我必须使用: 它是ma代码:

  • 着色器语言中通过关键字mat2、mat3、mat4分别声明一个2x2矩阵、3x3矩阵、4x4矩阵,通过内置函数mat2()、mat3()、mat4()分别创建一个2x2矩阵、3x3矩阵、4x4矩阵。 关键字 数据类型 mat2 2x2矩阵,4个元素 mat3 3x3矩阵,9个元素 mat4 4x4矩阵,16个元素 声明变量 关键子mat4声明一个4x4矩阵 mat4 matrix4; 构造函数赋

  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准

  • 我目前正在做一个音频信号处理项目,需要在Java中的一个复杂矩阵上使用SVD。我当前的线性代数库是Apache Commons。但它只提供实矩阵的SVD,JAMA、JBLAS、EJML、ojAlgo都不支持复杂的SVD。 我一直在用一些技巧从一个等效的实矩阵中找到SVD。然而,当我重建矩阵时,这种技术对于虚部有很大的不准确性。

  • 问题内容: 我正在自学一些Java,并且坚持创建2D数组,该数组使用随机值对其进行初始化,然后创建该数组的转置。 示例输出为: 原始矩阵 转置矩阵 ^应该是最终输出。代码的一些帮助将不胜感激! 如果行或列的数量超出指定范围,我想编写代码以生成错误消息。以及是否从命令行读取矩阵元素而不是随机生成它们。 问题答案: 这是返回转置矩阵的int [] []的简单方法… 比起打印二维矩阵,您可以使用如下方法