首页 > 解决方案 > 将复杂向量从 Matlab 保存到文本文件

问题描述

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

y = zeros(1,N);

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

图片
所以我尝试了函数 dlmwrite 将矢量保存到文本文件中:

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

像这样存储的向量: 图 2

但我希望它以这种方式存储: picture3 每个复数都应该存储在新行和实部中,虚部应该用 coma 分隔
任何想法吗?

标签: matlabcomplex-numbers

解决方案


生活:

这有一个非常简单的解决方法:在对 的标注中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 中的进一步计算。


推荐阅读