我有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
项的多项式相同。
答案 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 data
,Y data
,然后选择custom equation
定义为a*x^3 + b*x + c
。结果是: