MATLAB 多项式拟合:解决数据点不足问题

在使用 MATLAB 进行四次多项式拟合时,可能会遇到“多项式未正确设置条件”的错误警告,提示需要添加具有不同 X 值的点、减少多项式的阶数,或者尝试按照 HELP POLYFIT 中所述进行居中和缩放。这是因为数据点数量不足以进行四次拟合。

原代码

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

% 读取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

修改后的代码

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

% 读取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
    
    % 判断数据点数量是否足够进行四次拟合
    if length(x1) >= 5
        % 拟合四次项函数
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)
    else
        disp('数据点数量不足以进行四次拟合')
    end

end

在进行四次多项式拟合之前,代码会先判断数据点的数量是否足够进行四次拟合,如果数据点数量小于5,则无法进行四次拟合。如果出现数据点数量不足的情况,代码会显示“数据点数量不足以进行四次拟合”。

总结

通过在进行多项式拟合之前判断数据点数量,可以有效避免由于数据点不足而导致的错误,并提供更友好的提示信息。

MATLAB 多项式拟合:解决数据点不足问题

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

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