高阶多项式拟合不是那么方便

时间:2018-04-22 14:25:17

标签: matlab

我有一个简单的问题,但我自己无法修复它。我想使用MATLAB曲线拟合工具箱并拟​​合高阶多项式。如果我想拟合1到9阶的多项式,它就可以工作。但是,令我惊讶的是它不适用于度数大于9的多项式。为了简单起见,你能看到以下对我不起作用的简单代码吗? ,不幸的是。

return  array.max()

提前致谢, 巴巴克

2 个答案:

答案 0 :(得分:2)

这可能会令人惊讶,但记录在案:List of Library Models for Curve and Surface Fitting。您可以随时使用polyfit,但根据它发出的警告,一旦您开始获得该程度的多项式,无论如何,拟合都可能存在问题。

答案 1 :(得分:1)

此答案是Phil Goddard's answer的补充。

函数poly10中没有fit。但是至少有两种方法可以适合任何程度的多项式:类似polyX,其中x可以是1,2,...,M,(如果有必要的话)。

clc; clear;
%%data
l=1:0.01:10;y=l.^10;
[xData, yData] = prepareCurveData(l,y);

%%High degree polynomial fitting
%set the degree of the polunomial
Degree=10;
%Fit with customize option
%generate the cell array from 'x^Degree' to 'x^0'
syms x
Str=char(power(x,Degree:-1:0));
%set the fitting type & options, then call fit
HighPoly = fittype(strsplit(Str(10:end-3),','));
options = fitoptions('Normalize', 'off','Method','LinearLeastSquares','Robust','off');
[curve,gof] = fit(xData,yData,HighPoly,options)
%Polyfit with the degree of Degree
p = polyfit(xData,yData,Degree)

但是fitpolyfit都显示出一些警告,在我看来,这是由于Runge's phenomenon这是一个在边缘振荡的问题。在一组等间距插值点上使用高次多项式进行多项式插值时发生的间隔。

丢弃这种情况下的数据或类似的数据,其中真函数是高度多项式,在Pn[R]中说明,在拟合复函数时不建议使用高次多项式。

编辑:概括代码。

相关问题