MATLAB多项式适合选择性功率

时间:2015-05-26 22:09:47

标签: matlab least-squares polynomials

我有2个向量x和y,我想在MATLAB中将多项式拟合为y = f(x)
我本可以使用polyfit。但是,我想只拟合多项式的选择幂项。例如,y = f(x) = a*x^3 + b*x + c。请注意,我没有x^2个术语。 MATLAB中是否有内置函数来实现这一点?
我不确定是否简单地忽略MATLAB为x^2提供的系数与拟合没有x^2项的多项式相同。

3 个答案:

答案 0 :(得分:2)

如果您没有曲线拟合工具框(请参阅@thewaywewalk的评论),或者无论如何,它都很容易使用mldivide

x=rand(10,1);                  % your x data
y=5*x.^3+2*x+7+rand(10,1)*.01; % some y data with noise
[x.^3 x ones(size(x))]\y       % least squares solve to y = a*x^3 + b*x + c

给出

ans =
    4.9799
    2.0211
    6.9980

请注意,“简单地忽略MATLAB为x ^ 2提供的系数”绝对不是“在没有x ^ 2项的情况下拟合多项式”。

答案 1 :(得分:1)

听起来你有合适的工具箱,想要删除一个可能的系数。如果是这样的话,这就是一种方法。

%What is the degree of the polynomial (cubic)
polyDegree = 3;

%What powers do you want to skip (x^2 and x)
skipPowers = [2, 1];

%This sets up the options
opts = fitoptions( 'Method', 'LinearLeastSquares' );

%All coefficients of degrees not specified between x^n and x^0 can have any value
opts.Lower = -inf(1, polyDegree + 1);
opts.Upper = inf(1, polyDegree + 1);

%The coefficients you want to skip have a range from 0 to 0.
opts.Lower(polyDegree + 1 - skipPowers) = 0;
opts.Upper(polyDegree + 1 - skipPowers) = 0;

%Do the fit using the specified polynomial degree.
[fitresult, gof] = fit( x, y, ['poly', num2str(polyDegree)] , opts );

答案 2 :(得分:0)

在最近的Matlab版本中,您可以使用GUI轻松完成,方法是选择APPS标签,然后选择Curve Fitting Tool

例如,我定义:

x = 1:10;
y = x + randn(1,10);

然后我在工具中选择这些变量X dataY data,然后选择custom equation定义为a*x^3 + b*x + c。结果是:

enter image description here