Matlab里fprintf个人理解(fprintf、display、%f、%f\n)

本文详细介绍了Matlab中fprintf函数的使用方法,包括换行符 和变量格式化%f的作用,通过具体示例展示了如何利用这些功能进行格式化输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

\n、%f、%f\n

fprintf里经常会用到%f、%f\n,将它们拆开来看

1、 \n、fprintf(‘\n’)表示换行:

例:输出5个*

for i = 1:5       
fprintf('*')
end

在这里插入图片描述
这5个*是没有换行的,如果想让它们竖着排列加上\n即可:

for i = 1:5       
fprintf('*\n')
end

在这里插入图片描述

fprintf(‘\n’)也可用来进行段落里的换行

如:输出三行,每行都是5个*

for i=1:5
    fprintf('*')
end
fprintf('\n')    %第一行的5*输出后进行换行
for i=1:5
    fprintf('*')
end
fprintf('\n')    %第二行的5*输出后进行换行
for i=1:5
    fprintf('*')
end

2、 %f在fprintf指令里指的是调用后面的变量:

如:计算半径为3的圆的面积,并输出结果:

r = 3;
area = pi * r^2;
fprintf('该圆的面积为:%f',area) %此时的%f指的是调用变量area的值

结果如下:
在这里插入图片描述
多个%f指的是按照次序依次调用变量的值:

r = 3;
area = pi * r^2;
fprintf('半径为:%f的圆的面积为:%f',r,area) %第一个%f调用的是r的值,第二个%f调用的是area的值

输出结果如下:
在这里插入图片描述

3、 %f\n在fprintf指令里指的是调用后面的变量且换行:

%     %f只是调取变量不换行
for i = 1:5
    fprintf('the value is : %f',i)
end

%     %f\n只是调取变量且换行
for i = 1:5
    fprintf('the value is : %f\n',i)
end

输出结果对比如下:
在这里插入图片描述

在这里插入图片描述

fprintf与display

disp函数直接将内容输出在Matlab命令窗口中,可以理解为比较死板,只能将disp里的内容原封不动的输出出来。但是fprintf具有更好的交互性,可以进行修饰

%用disp输出
for i = 1:5
    disp('该for循环输出的值是:i')
end

%用fprintf输出
for i = 1:5
    fprintf('该for循环输出的值是:%f\n',i)
end

在这里插入图片描述

在这里插入图片描述

``` %% 波形相似度分析(MATLAB 2024b 优化版) % 生成示例数据(含时间偏移和噪声的正弦波) fs = 100; % 采样率 (Hz) t = 0:1/fs:2; % 时间向量 (s) f = 2; % 基频 (Hz) % 波形1:标准正弦波 signalReference = sin(2*pi*f*t); % 波形2:加入时移、噪声和幅度变化的波形 timeShift = 0.2; % 时间偏移量 (s) noiseAmplitude = 0.3; % 噪声幅度 signalTest = 0.8*sin(2*pi*f*(t-timeShift)) + noiseAmplitude*randn(size(t)); % 数据标准化(消除幅度/偏移影响) signalReference = zscore(signalReference); signalTest = zscore(signalTest); %% 方法1:相关系数分析 correlationCoefficient = corr(signalReference(:), signalTest(:)); fprintf('相关系数: %.4f\n', correlationCoefficient); %% 方法2:动态时间规整 (DTW) if ~license('test', 'Signal_Toolbox') error('Signal Processing Toolbox required for DTW'); end [dtwDistance, ~, ~, dtwPath] = dtw(signalReference, signalTest, 'AbsoluteDistance', false); dtwSimilarity = 1 / (1 + dtwDistance); % 相似度映射 fprintf('DTW相似度: %.4f (原始距离: %.4f)\n', dtwSimilarity, dtwDistance); %% 方法3:交叉相关分析 [crossCorrSequence, lags] = xcorr(signalReference, signalTest, 'normalized'); [maxCorr, maxIdx] = max(crossCorrSequence); optimalLag = lags(maxIdx); fprintf('最大交叉相关: %.4f (最佳时移: %d samples)\n', maxCorr, optimalLag); %% 方法4:互信息计算(使用内置函数) if exist('mutualinfo', 'file') mi = mutualinfo(signalReference, signalTest, 'NumBins', 20); fprintf('互信息: %.4f bits (内置函数)\n', mi); else % 兼容旧版本的直方图法 numBins = 20; jointHist = histcounts2(signalReference, signalTest, numBins, numBins); jointProb = jointHist / sum(jointHist, 'all'); pSignal1 = sum(jointProb, 2); pSignal2 = sum(jointProb, 1); H1 = -sum(pSignal1 .* log2(pSignal1 + eps), 'omitnan'); H2 = -sum(pSignal2 .* log2(pSignal2 + eps), 'omitnan'); HJoint = -sum(jointProb .* log2(jointProb + eps), 'all', 'omitnan'); mutualInfo = H1 + H2 - HJoint; fprintf('互信息: %.4f bits (手动计算)\n', mutualInfo); end %% 可视化(使用现代图形布局) figure('Position', [100 100 1200 800], 'Color', 'w') tiledLayout(3,1, 'TileSpacing', 'compact'); % 波形对比 nexttile plot(t, signalReference, 'LineWidth', 1.5, 'DisplayName', '参考波形') hold on plot(t, signalTest, 'LineWidth', 1.5, 'DisplayName', '测试波形') title('波形时空对比') xlabel('时间 (s)'), ylabel('标准化幅值') legend('Location', 'northeastoutside') grid on xlim([0 2]) % DTW路径 nexttile plot(dtwPath(:,1), dtwPath(:,2), 'k', 'LineWidth', 1) hold on plot([1 length(signalReference)], [1 length(signalTest)], 'r--', 'LineWidth', 1) title('DTW对齐路径') xlabel('参考波形索引'), ylabel('测试波形索引') axis equal tight box on % 交叉相关分析 nexttile stem(lags, crossCorrSequence, 'Marker', 'none', 'LineWidth', 1.5) hold on plot(optimalLag, maxCorr, 'ro', 'MarkerSize', 10, 'LineWidth', 2) title(sprintf('交叉相关峰值: %.2f at lag %d', maxCorr, optimalLag)) xlabel('时移 (samples)'), ylabel('归一化相关系数') grid on```请将此代码优化为符合matlab2024b的代码
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华毓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值