I have xyz data from which i want to formulate an equation
18 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
hello everyone, so previously i had used this xyz data to make a 3D plot. However i now want to formulate an equation out of this data?
i want to solve for z inserting x and y
any idea how i could do that
this is the code i have used for the 3D plot
T1 = readtable('solarcol3.csv');
VarNames = T1.Properties.VariableNames;
x = T1{:,1};
y = T1{:,2};
z = T1{:,3};
[Ux,iax,ixx] = unique(x);
[Uy,iay,ixy] = unique(y);
N = 25;
xv = linspace(min(x), max(x), N);
yv = linspace(min(y), max(y), N);
[Xm,Ym] = ndgrid(xv, yv);
Zm = griddata(x, y, z, Xm, Ym, 'cubic'); % specify cubic interpolation
Zm = smoothn(Zm,1000); % Fex : https://fr.mathworks.com/matlabcentral/fileexchange/25634-smoothn?s_tid=ta_fx_results
0 commentaires
Réponses (1)
Walter Roberson
le 26 Mai 2023
No, it can be shown mathematically (and I have posted proofs before) that given any finite set of finitely-represented points, that there are an uncountable infinity of functions that mathematically pass exactly through all of those points.
Because there is an infinite number of potential equations to choose from, the probability that any one equation is the "right" equation is 1/infinity ... which is zero.
The best you can do is pre-determine a finite list of models that have no more parameters than the number of points you have, and do fitting to determine the best model parameters for each possibility, and then check to see which of the models had the "best" fit.
However, it is common to discover that if you do tests by generating points according to a known model and then add even a tiny amount of noise, that some other completely "wrong" model will fit the points better than the known right model form does. For example you might discover that where your actual model was polynomial degree 6 plus a small bit of noise, that a sum-of-exponentials fit better than polyfit(x,y,6)... because by accident there was a small bit of long-term correlation in the noise that was added.
3 commentaires
Walter Roberson
le 26 Mai 2023
Suppose you can show that over the range of your x values, -1 to +1, that the polynomial
x^17/355687428096000 + x^16/20922789888000 + x^15/1307674368000 + x^14/87178291200 + x^13/6227020800 + x^12/479001600 + x^11/39916800 + x^10/3628800 + x^9/362880 + x^8/40320 + x^7/5040 + x^6/720 + x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
fits you data perfectly to to within the (single) precision of your inputs.
So that would be it, right? The polynomial would be "the" equation, right?
Ah, but that polynomial is taylor(exp(x), x, 0, 'order', 17) -- so to within the error of your data exp(x) might be an equally valid solution. How to decide? Is the equation "really" the degree-17 polynomial, or is the equation "really" exp(x) ?
No system operating on finitely represented values can determine the difference.
Alex Sha
le 27 Mai 2023
Walter gives a very good explanntion. One of functions looks like bellow:
z = (p1+p2*x+p3*y+p4*x*y)/(1+p5*x+p6*y+p7*x*y)+p8;
Sum Squared Error (SSE): 0.00885938009296813
Root of Mean Square Error (RMSE): 0.0156873800065957
Correlation Coef. (R): 0.992629641433234
R-Square: 0.985313605051871
Parameter Best Estimate
--------- -------------
p1 -0.428781064157635
p2 0.0594834002179455
p3 0.000475515732748892
p4 -4.72419933735348E-5
p5 -0.00466058481058043
p6 0.00305034598701402
p7 -0.0004153284867253
p8 0.43159235394028
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1395909/image.jpeg)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1395914/image.jpeg)
Voir également
Catégories
En savoir plus sur Polynomials dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!