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

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

\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

在这里插入图片描述

在这里插入图片描述

% 依据:B题.pdf明确测试数据中反射率≤0为无效点(仪器噪声/信号截断),需剔除 valid_idx = v1 > 0; % 筛选有效反射率数据 k1 = k1(valid_idx); % 有效波数(cm^-1) v1 = v1(valid_idx); % 有效反射率(%) N = length(k1); % 有效数据长度 [peaks_dope, peak_dope] = findpeaks(v1, k1,... 'MinPeakHeight', max(v1)*0.1, ... 'MinPeakDistance', 1, ... 'MinPeakProminence', 0.3,... 'MinpeakWidth',1); rs=@(n)((cosd(10)-sqrt(n^2-(sind(10))^2))/(cosd(10)+sqrt(n^2-(sind(10))^2)))^2; rp=@(n)((sqrt(1-(sind(10)/n)^2)-n*cosd(10))/(sqrt(1-(sind(10)/n)^2)+n*cosd(10)))^2; R=@(n)(rs(n)+rp(n))/200; % 1. 寻找反射率函数的最小值点 [n_min, R_min] = fminbnd(R, sind(10)+0.01, 5); % 在定义域内搜索最小值 % 2. 准备求解方程组 solutions = zeros(size(peaks_dope)); % 存储解 options = optimset('Display','off', 'TolX',1e-8); % 求解器配置 % 3. 遍历每个峰值反射率值 for i = 1:length(peaks_dope) R_t = peaks_dope(i); % 定义需要求解的方程 f = @(n) R(n) - R_t; % 根据目标值选择求解区间 if R_t < R(n_min+0.1) % 接近最小值解 solutions(i) = fminsearch(@(n) abs(f(n)), n_min, options); else % 正常分支 solutions(i) = fsolve(f, n_min, options); end end % 4. 结果展示 fprintf('\n===== 反射率-折射率对应关系 =====\n'); fprintf('最小反射率 R_min = %.6f (n_min = %.6f)\n', R_min, n_min); fprintf('--------------------------------\n'); fprintf('%-10s %-10s %-12s\n', '峰序号', '反射率R', '折射率n'); for i = 1:length(peaks_dope) fprintf('%-10d %-10.4f %-12.6f\n', i, peaks_dope(i), solutions(i)); end % 5. 验证结果 calc_R = arrayfun(R, solutions); % 计算验证反射率 errors = abs(calc_R - peaks_dope); fprintf('\n===== 结果验证 =====\n'); fprintf('最大绝对误差: %.4e\n', max(errors)); fprintf('平均绝对误差: %.4e\n', mean(errors));并入到这段代码
09-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

华毓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值