【问题标题】:Conjugate of a complex number in MatlabMatlab中复数的共轭
【发布时间】:2015-03-24 15:29:13
【问题描述】:

为了将 Matlab 代码转换为 C,我想先以与 C 类似的方式编写它,然后它的翻译将变得微不足道。 我遇到了这一行的问题:

A = E*[SOLS' ; ones(1,10 ) ];

其中 E 是 (9x4) 实矩阵,SOLS 是 (3x10) 复矩阵。 A 应该是一个 9x10 的复数矩阵。

我将这一行翻译如下:

for i=1:9
  for j=1:10
    A(i,j)=E(i,1)*conj(SOLS(j,1))+E(i,2)*conj(SOLS(j,2))+E(i,3)*conj(SOLS(j,3))+ E(i,4);
  end
end

我得到了同样的结果。当我将conj(X) 替换为real(X)-i*imag(X) 时,例如:

conj(SOLS(j,1))  by `real(SOLS(j,1))-imag(SOLS(j,1))*i`, 

我得到了一个错误的结果,我不明白为什么。

我这样做是因为在 C 代码中,每个复数都由一个带有 variable.re 实部和 variable.im 虚部的结构表示。

typedef struct COMPLEX{
    float re;
    float im;
}Complex;

我想编写一个与 C 非常相似的 matlab 代码,以便在 C 中轻松操作变量,并获得与 Matlab 类似的结果。

请问如何改正?

【问题讨论】:

  • 你的结果怎么错了?此外,A = E*[SOLS' ; ones(1,10 ) ]; 中的矩阵尺寸不同意。 ' 运营商应该在那里吗?
  • 我想将 matlab 代码翻译成 C。为什么在嵌套循环中,当我将 conj(X) 替换为 (real(X)-imag(X)*i) 时,我得到了不同的结果当我只写 conj(X) 时?

标签: c matlab


【解决方案1】:

您将i 用作循环索引和sqrt(-1)。 如果您想替换 conj(SOLS(j,1)),请改用

 real(SOLS(j,1))-imag(SOLS(j,1))*1i 

【讨论】:

  • 不错的收获。如果我没记错的话,j 也应该是列索引SOLS,而不是行索引。我认为 OP 在他们的代码中出错了。
  • @eigenchris 如果我理解 OP 想要做什么,这实际上不是错误,它是列索引,因为应用了转置操作
  • 我看到 OP 在 A = E*[SOLS' ; ones(1,10 ) ]; 中使用了 ' 运算符,但是如果 SOLS 是 3 乘 10,这会使索引不一致,所以我不完全确定那里发生了什么。如果E 是 9 x 4,那么 SOLS 不应该有额外的 4 x 10 行吗?因此j 应该遍历列?无论哪种方式,我认为你抓住了主要问题。也许有些东西我没看到。
  • @eigenchris 你是对的,SOLS 是 10x3 而 SOLS' 是 3x10,OP 在那里犯了一个错误......
  • 是的,事实上 SOLS 是 (10x3) 而 SOLS' 是 (3x10)
猜你喜欢
  • 2013-06-05
  • 2013-03-21
  • 2014-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 2017-04-17
  • 1970-01-01
相关资源
最近更新 更多