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", [-50450], [-50600], "on""on""%d""%d",...
  "A""B",...
  "",...
  "northwest"1"off");

leg = legend("Data""Fitted Curve");
leg.Box = "on";

% 实时显示拟合参数
text(200100, ['$y=$', num2str(M.p1),...
'$x+$', num2str(M.p2)], ...
    'Interpreter''latex',...
    'FontSize'18'Color''r');

hold off

结果展示

效果
效果
- END -

分类:

数学

标签:

数学编程

作者介绍

Hao B.
V1