MATLAB 多项式拟合:解决数据点不足问题
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,则无法进行四次拟合。如果出现数据点数量不足的情况,代码会显示“数据点数量不足以进行四次拟合”。
总结
通过在进行多项式拟合之前判断数据点数量,可以有效避免由于数据点不足而导致的错误,并提供更友好的提示信息。
原文地址: https://www.cveoy.top/t/topic/qB1y 著作权归作者所有。请勿转载和采集!