
Hao B.
V1
2023/03/07阅读:12主题:极简黑
合理的处理数据
不知道大家在用MATLAB中有没有遇到这样的问题,有些实验数据我们是不需要的,。
内容不难,但愿能帮到应帮的道友。
基本情况描述
(1) 求取2组数据的拟合系数,每组数据量约3000多。
(2) B数组中发现有大量的0元素,那么A./B的时候肯定会出现Inf,进而影响最终的结果。
处理办法
问题的出现肯定是B数组中的0元素,所以就要删除掉这些0元素。而相对应的A数组中位置上的元素也应该被裁剪掉,不然数组维度出现了问题。
(1) loc = find(B==0)。先用find函数找到这个B数组中要删除的数据。
(2) B(loc) = []; A(loc) = [];
代码细说
path_p1 = fullfile("path", "p-30.txt");
path_p2 = fullfile("path", "p-900.txt");
p30 = readtable(path_p1, "Delimiter",...
"space", "ReadVariableNames", false);
p900 = readtable(path_p2, "Delimiter",...
"space", "ReadVariableNames", false);
p900 = p900(:, 3).Var3 / 10^3;
loc = isnan(p900);
p90(loc) = [];
% 找到B数组中0元素的位置,并删除
loc02 = find(p900 == 0);
p900(loc02) = [];
p30 = p30(:, 3).Var3 / 10^3;
loc = isnan(p30);
p30(loc) = [];
% 将找到的元素位置应用到A数组中
p30(loc02) = [];
ft_1 = fittype('poly1'); %一次函数拟合
[M, ~] = fit(p900, p30, ft_1);
% 绘图
hold on
pm = plot(p900, p30);
pm.LineStyle = 'none';
pm.Marker = 'o';
pm.MarkerSize = 3;
pm.MarkerEdgeColor = 'k';
pm.MarkerFaceColor = 'w';
pf = plot(M);
pf.LineStyle = "-";
pf.LineWidth = 4;
pf.Color = "r";
% 设置轴、图例等样式
frame("Arial", 12,...
"on", [-50, 450], [-50, 600], "on", "on", "%d", "%d",...
"A", "B",...
"",...
"northwest", 1, "off");
leg = legend("Data", "Fitted Curve");
leg.Box = "on";
% 实时显示拟合参数
text(200, 100, ['$y=$', num2str(M.p1),...
'$x+$', num2str(M.p2)], ...
'Interpreter', 'latex',...
'FontSize', 18, 'Color', 'r');
hold off
结果展示

作者介绍

Hao B.
V1