如何从文本文件读取行到数组并批量计算线性拟合的b(2)
线性拟合程序实现(读取文件+逐组计算)
需求说明
- 从
trial2.txt读取128行数据,每行包含3列数值,逐行存入x0数组 - 固定使用
y0 = [5.15659, 5.48556, 5.80477]作为拟合目标值 - 对每组
x0数据执行线性拟合,计算并输出拟合系数b(2),同时将结果追加写入data.txt
修正后的代码
% 从trial2.txt读取128行3列数据 x0 = load('trial2.txt'); % 校验读取的数据行数是否符合要求 if size(x0, 1) ~= 128 error('读取的数据行数错误,应为128行'); end y0 = [5.15659, 5.48556, 5.80477]; b2_values = []; % 存储所有组的b(2)值 % 逐行处理每组x0数据 for i = 1:size(x0, 1) current_x = x0(i, :); % 构造线性拟合所需的设计矩阵 X1 = [ones(length(current_x), 1), current_x']; % 最小二乘法求解拟合系数 b = X1 \ y0'; b2_values = [b2_values; b(2)]; % 绘制当前组的散点与拟合线 plot(current_x, y0, 'o'); y_fit = b(1) + current_x * b(2); hold on; plot(current_x, y_fit, '--r'); end % 将结果写入data.txt fid = fopen('data.txt', 'a+'); if fid == -1 error('无法打开data.txt文件,请检查路径或权限'); end % 逐行写入,匹配格式要求 for i = 1:size(x0, 1) fprintf(fid, '%10.1f %10.4f %10.4f %10.9f\n', x0(i, :), b2_values(i)); end fclose(fid); hold off;
关键修改点
- 文件读取与校验:使用
load函数直接读取文本数据,添加行数校验确保输入符合要求 - 逐组拟合逻辑:通过循环遍历每行数据,为每组x0单独执行线性拟合,生成对应的
b(2)值 - 输出格式修正:调整
fprintf的参数传递,确保每行写入3个x0值和对应的b(2),匹配格式字符串 - 健壮性提升:增加文件打开失败、数据异常的错误提示,避免程序无提示崩溃
内容的提问来源于stack exchange,提问作者gurmukh dhindsa
相关产品推荐
相关产品推荐

