问题描述
我用 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)
如您的“图片 2”所示给出输出的原因是 y
是一个行向量。除非程序员明确“告知”,否则 MATLAB 假定数组是行向量。 MATLAB 的 dlmwrite
输出模拟输入数组的形状,在本例中为行向量,因此,您将得到图 2。要得到图 3 的输出,必须输入一个矩形矩阵。我通过连接转置为列向量的两(2)行向量来实现上述目标。要执行换位,请使用 '
运算符,如图所示。请注意,我转置了 real
函数的输出,然后是 imag
函数的输入。这些函数还将其各自输入数组的形状模拟到各自的输出数组中。因此,[real(y)',imag(y')]
与 [real(y'),imag(y')]
具有相同的效果。
另外,不要忘记指定“precision”参数以确保 dlmwrite
存储所有可能的数字,如果未指定,dlmwrite
将截断数字并将截断误差引入您的进一步计算在 C.