将复杂向量从 Matlab 保存到文本文件

问题描述

我用 Matlab 生成一个复数向量,我想将该向量保存到文本文件 (.txt) 中以将其用作我的 C 代码中的输入,因此复数向量如下所示:

y = zeros(1,N);

for n = 1:N
    y(n) = exp(-1i*(n-1)*k*d*sind(Qtgt));
    
end

picture
所以我尝试了函数 dlmwrite 将向量保存到文本文件中:

dlmwrite('data.txt',y,'delimiter','\n','newline','pc')

这样存储的向量: picture 2

但我希望它以这种方式存储:picture3 每个复数都应该存储在新行和实部中,虚部应该用逗号分隔
请问有什么想法吗?

解决方法

利菲:

这有一个非常简单的修复:在您对 dlmwrite 的标注中,将 y 输入替换为 [real(y'),imag(y')]

这是我的尝试:

N = 10;
y = zeros(1,N);
for n = 1:N
    y(n) = exp(-1i*(n-1));
    re = real(y(n));
    im = imag(y(n));
    fprintf('%6.10f,%6.10f\n',re,im)
end
filename = 'output';
dlmwrite(filename,[real(y)',imag(y')],'precision',16)

上面的输出(当然我的公式略有不同)是: enter image description here

如您的“图片 2”所示给出输出的原因是 y 是一个行向量。除非程序员明确“告知”,否则 MATLAB 假定数组是行向量。 MATLAB 的 dlmwrite 输出模拟输入数组的形状,在本例中为行向量,因此,您将得到图 2。要得到图 3 的输出,必须输入一个矩形矩阵。我通过连接转置为列向量的两(2)行向量来实现上述目标。要执行换位,请使用 ' 运算符,如图所示。请注意,我转置了 real 函数的输出,然后是 imag 函数的输入。这些函数还将其各自输入数组的形状模拟到各自的输出数组中。因此,[real(y)',imag(y')][real(y'),imag(y')] 具有相同的效果。

另外,不要忘记指定“precision”参数以确保 dlmwrite 存储所有可能的数字,如果未指定,dlmwrite 将截断数字并将截断误差引入您的进一步计算在 C.