Polyfitn is an extension of polyfit, allowing the user to create models with more than one independent variable. It also allows the user to specify a general model, for example, a quadratic model, with constant and quadratic terms, but no linear term.
For example, to fit a polynomial model to points selected from a cosine curve, we will only need the even ordered terms.
x = -2:.1:2;
y = cos(x);
p = polyfitn(x,y,'constant x^2 x^4 x^6');
p.Coefficients
ans =
[0.99996 -0.49968 0.041242 -0.0012079]
The coefficients won't be exact of course, as I used only a finite number of terms for what is essentially a truncated Taylor series, and I had only a finite amount of points to build the model from. The exact first 4 coefficients for a cosine series would have been:
>> [1 -1/2 1/24 -1/720]
ans =
1 -0.5 0.041667 -0.0013889
so we got the expected result.
Of course, polyfitn works in higher dimensions, as it was this problem it was really designed to solve.
x = rand(100,1);
y = rand(100,1);
z = exp(x+y) + randn(100,1)/100;
p = polyfitn([x,y],z,3);
The result can be converted into a symbolic form to view the model more simply. Here I'll use my sympoly toolbox, but there is also a polyn2sym function provided.
polyn2sympoly(p)
ans =
0.43896*X1^3 + 1.4919*X1^2*X2 + 0.041084*X1^2 + 1.4615*X1*X2^2 - 0.095977*X1*X2 + 1.2799*X1 + 0.56912*X2^3 - 0.15306*X2^2 + 1.361*X2 + 0.94819
And of course, parameter error estimates are generated for those who wish to determine the significance of the terms generated.
I've also provided tools for evaluating these models, and to differentiate a model.
A caveat - beware the use of high order polynomials to fit your data. Just because a low order model works, a high order model is not necessarily better. High order polynomials often suffer from severe ringing between the data points. Always plot your data. Think about the model you will be building. Then plot the resulting model. Use your eyes to validate the result, more so than simply looking at an r-squared coefficient (although I do return that parameter too.)
If you do find that a high order polynomial mode is necessary because your curve is simply too complicated, consider using a regression or smoothing spline model instead.
Zitieren als
John D'Errico (2024). polyfitn (https://www.mathworks.com/matlabcentral/fileexchange/34765-polyfitn), MATLAB Central File Exchange. Abgerufen.
Kompatibilität der MATLAB-Version
Plattform-Kompatibilität
Windows macOS LinuxKategorien
- AI and Statistics > Curve Fitting Toolbox > Linear and Nonlinear Regression >
- AI and Statistics > Curve Fitting Toolbox > Interpolation >
- Signal Processing > DSP System Toolbox > Statistics and Linear Algebra > Linear Algebra >
Tags
Quellenangaben
Inspiriert: gapolyfitn, polyVal2D and polyFit2D
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Live Editor erkunden
Erstellen Sie Skripte mit Code, Ausgabe und formatiertem Text in einem einzigen ausführbaren Dokument.
PolyfitnTools/
PolyfitnTools/demo/html/
Version | Veröffentlicht | Versionshinweise | |
---|---|---|---|
1.3 | Documentation added for p and DoF, also an example was added in the help. |
|
|
1.2.0.0 | Remove NaNs in data for fit |
||
1.1.0.0 | Added a p-value on the coefficients. |
||
1.0.0.0 |