为什么MATLAB会不断重复这个标题?这是一个屏幕截图:
它应该在Freq之后停止,但它会重复整个事情。
这是我用于显示的代码:
I1_amp = max(I1_FFT);
I1_RMS = I1_amp/sqrt(2);
I1_freq = find(I1_FFT==I1_amp)-1; % -1 because in matlab the index starts from 1
subplot 511
plot(axis,I1_FFT);
title(sprintf(' 1st harmonic => Ipeak = %.2f , Irms = %.2f , Freq = %i',I1_amp,I1_RMS,I1_freq));
答案 0 :(得分:4)
sprintf
和朋友是矢量化的,所以如果数据中有剩余的元素,它将继续重复格式字符串,直到它尽可能多地消耗。那是"为什么"。
据推测,在这种情况下,最大值不是唯一的,因此find
返回了多个索引。如果您不需要专门处理此问题而只想要第一次或最后一次出现,您可以将适当的选项传递给find
:
I1_freq = find(I1_FFT==I1_amp, 'last')-1;
如果第一个索引足够,在大多数情况下,您可以完全跳过find
,因为max
已经存在:
[I1_amp I1_freq] = max(I1_FFT); % assuming I1_FFT is a vector
请注意,find
会返回线性索引,而max
会在给定维度上运行,因此对于矩阵,您需要使用(:)
将它们线性化,以获得等效的{{} 1}},而不是每列/行索引的向量。