【问题标题】:Save Complex vector from Matlab to text file将复杂向量从 Matlab 保存到文本文件
【发布时间】:2021-04-22 10:31:45
【问题描述】:

我使用 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 每个复数都应该存储在新行和实部中,虚部应该用逗号分隔
有什么想法吗?

【问题讨论】:

  • 这个工作writematrix([real(y).' + "," + imag(y).'] , 'data.txt' ); 吗? (≥R2019a)

标签: matlab complex-numbers


【解决方案1】:

lifay:

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

【讨论】:

  • 非常好的答案。欢迎使用 Stack Overflow!
  • 谢谢!一直想回复,但我很久以后才解锁了特权。 XD
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2014-02-18
  • 2013-12-09
  • 1970-01-01
  • 2021-12-10
  • 2015-01-16
  • 2020-06-30
相关资源
最近更新 更多