How to extrapolate data from a matrix of x axis values and corresponding y axis values?
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
let x axis values be x=[.1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 1.7 1.8 1.9 2] and corresponding y axis values be y=[50 65 70 80 90 100 110 120 150 180 220 295 400 ];
I want to find value of y corresponding to x = 4
2 Kommentare
Star Strider
am 11 Mai 2014
Bearbeitet: Star Strider
am 11 Mai 2014
Your data don’t make sense. The 13 x-values and 20 y-values don’t ‘correspond’ in any meaningful sense, unless they’re e-mailing each other.
It’s never a good idea to extrapolate more than a very short distance beyond the region-of-fit. You have no idea if the function y(x) even exists at y(4).
That said, my guess for y(4) = 3.1E+8 m/s. It’s as good as any. As for accuracy, I guarantee it to be good within ±1 attometre/s ( 99.99% confidence limits).
Antworten (3)
Image Analyst
am 11 Mai 2014
Bearbeitet: Image Analyst
am 11 Mai 2014
To extrapolate you must assume some kind of function, like a line or quadratic or something. Maybe you can use polyfit:
x=[.1 .2 .3 .4 .5 .6 .7 .8 .9 1.7 1.8 1.9 2]
y=[50 65 70 80 90 100 110 120 150 180 220 295 400 580 1000 2400 5000 8900 15000 24000];
plot(x, y(1:13), 'bd-', 'MarkerSize', 10)
coeffs = polyfit(x, y(1:13), 2);
xfit = linspace(x(1), x(end), 50);
yfit = polyval(coeffs, xfit);
hold on;
plot(xfit, yfit, 'ro-', 'LineWidth', 2);
grid on;
% Get value for x = 4:
yfit4 = polyval(coeffs, 4)
% Enlarge figure to full screen.
set(gcf, 'Units', 'Normalized', 'OuterPosition', [0 0 1 1]);
% Give a name to the title bar.
set(gcf, 'Name', 'Demo by ImageAnalyst', 'NumberTitle', 'Off')
By the way, why does y have 20 elements and x have only 13?
lvn
am 11 Mai 2014
This is for a linear extrapolation:
interp1(x,y,4,'linear','extrap')
ans =
2.5000e+03
0 Kommentare
Star Strider
am 11 Mai 2014
The data are so discontinuous that extrapolating them is almost absurd. However a 5-th degree polynomial gives the best fit to the data:
x = [.1 .2 .3 .4 .5 .6 .7 .8 .9 1.7 1.8 1.9 2];
y = [50 65 70 80 90 100 110 120 150 180 220 295 400 ];
[p,S,mu] = polyfit(x,y,5);
xe = linspace(min(x),4);
[ye,dlta] = polyval(p,xe,S,mu);
figure(1)
plot(x,y, '*')
hold on
plot(xe,ye,'-b', xe,ye+dlta,'-r', xe,ye-dlta,'-r')
hold off
% axis([0 3 0 500])
grid
fprintf(1,'\n\tExtrapolated value at x = 4 is %.4f ± %.4f\n\n', ye(end), dlta(end))
and produces:
Extrapolated value at x = 4 is 74066.6051 ± 13925.4417
Which considering its original exponential behaviour (with the 20-element y-vector), is entirely consistent.
This definitely shows the dangers of extrapolating so far from the region-of-fit with discontinuous data and a poorly-characterised function. A large number of functions will ‘fit’ to it, generating a large number of different extrapolations, and since we have no idea what the function actually does outside the region-of-fit (if it does anything; it may not be defined beyond the data given), they are all entirely wild guesses and all entirely without any valid mathematical or statistical support.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Graphics Performance finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!