% 指定文件路径和文件名
filePath = 'D:/桌面/暑假数模/第六次模拟赛题/B/111.xlsx';
sheetName = 'Sheet1';

% 读取Excel文件中的数据
data = xlsread(filePath, sheetName);

figure;

for tar=1:21
    x1=[];y1=[];y2=[];
    for i=1:114
        if data(i,1)==tar
            tmp=[x1,data(i,2)];x1=tmp;
            tmp=[y1,data(i,3)];y1=tmp;
            tmp=[y2,data(i,4)];y2=tmp;
        end
    end
    % 拟合四次项函数
    p = polyfit(x1, y1, 4);

    % 计算拟合值
    y_fit = polyval(p, x1);

    % 计算总平方和
    SS_total = sum((y1 - mean(y1)).^2);

    % 计算残差平方和
    SS_residual = sum((y1 - y_fit).^2);

    % 计算调整后的 R 方
    R_square = 1 - SS_residual / (length(y1) - 1) / (SS_total / (length(y1) - length(p) - 1));

    disp(R_square)
end

代码说明:

  1. filePath: 指定 Excel 文件的路径,使用正斜杠 / 分隔目录。
  2. sheetName: 指定要读取的 Excel 工作表名称。
  3. xlsread(filePath, sheetName): 读取指定工作表中的数据,并将数据存储到 data 变量中。
  4. figure: 创建一个图形窗口,用于绘制拟合结果。
  5. for tar=1:21: 循环遍历数据,将第一列数据中所有值为 tar 的行的数据分别存储到 x1, y1, y2 变量中。
  6. p = polyfit(x1, y1, 4): 对 x1 和 y1 进行四次项函数拟合,并将拟合结果存储到 p 变量中。
  7. y_fit = polyval(p, x1): 使用 p 变量中的拟合参数计算 x1 对应的拟合值,并将结果存储到 y_fit 变量中。
  8. SS_total: 计算总平方和,用于评估拟合效果。
  9. SS_residual: 计算残差平方和,用于评估拟合效果。
  10. R_square: 计算调整后的 R 方,用于评估拟合效果。
  11. disp(R_square): 输出调整后的 R 方值。

注意:

  • 此代码假设 Excel 文件中第一列数据为目标值 tar,第二列数据为 x1,第三列数据为 y1,第四列数据为 y2。
  • 如果需要对其他列数据进行拟合,需要修改代码中的变量名和数据读取方式。
  • 代码中 for 循环的范围根据实际数据的行列数进行调整。
  • 调整后的 R 方越接近 1,表示拟合效果越好。
  • 可以使用 plot 函数绘制拟合结果图,以便更直观地观察拟合效果。

代码运行:

  1. 将代码保存为 .m 文件,例如 fitting.m。
  2. 在 MATLAB 命令窗口中输入 fitting 并回车,即可运行代码。

代码示例:

假设 Excel 文件名为 data.xlsx,并且包含以下数据:

| tar | x1 | y1 | y2 | |---|---|---|---| | 1 | 1 | 2 | 3 | | 1 | 2 | 4 | 6 | | 1 | 3 | 6 | 9 | | 2 | 4 | 8 | 12 | | 2 | 5 | 10 | 15 | | 2 | 6 | 12 | 18 |

将 filePath 修改为 'data.xlsx',运行代码后,将输出每个目标值 tar 对应的调整后的 R 方值。

总结:

本代码提供了一种使用 MATLAB 读取 Excel 数据并进行四次项函数拟合的方法,并计算了调整后的 R 方值来评估拟合效果。

希望这份代码能够帮助您进行数据分析和模型拟合。


原文地址: https://www.cveoy.top/t/topic/qB1i 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录