You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本文件读取行到数组并批量计算线性拟合的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:05:35