【发布时间】: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) 时?