Extrapolation nonlinear data in matlab

nsy picture nsy · Sep 8, 2013 · Viewed 13k times · Source

How to extrapolation following data for 850 and above in matlab?

x =  200.0000  205.0000  210.0000  215.0000  220.0000  225.0000  230.0000  235.0000  240.0000 245.0000  250.0000  255.0000  260.0000  265.0000  270.0000  275.0000  280.0000  285.0000 290.0000  295.0000  300.0000  305.0000  310.0000  315.0000  320.0000  330.0000  340.0000 350.0000  360.0000  370.0000  380.0000  390.0000  400.0000  410.0000  420.0000  430.0000 440.0000  450.0000  460.0000  470.0000  480.0000  490.0000  500.0000  510.0000  520.0000 530.0000  540.0000  550.0000  560.0000  570.0000  580.0000  590.0000  600.0000  620.0000 640.0000  660.0000  680.0000  700.0000  750.0000  800.0000

y =  0.8900    0.8600    0.8400    0.8200    0.8000    0.7900    0.7700    0.7500    0.7400   0.7200    0.7100    0.6900    0.6800    0.6700    0.6500    0.6400    0.6300    0.6200   0.6100    0.6000    0.5900    0.5800    0.5700    0.5600    0.5500    0.5400    0.5200   0.5100    0.4900    0.4800    0.4700    0.4500    0.4400    0.4300    0.4200    0.4100   0.4000    0.3900    0.3900    0.3800    0.3700    0.3600    0.3600    0.3500    0.3400   0.3400    0.3300    0.3200    0.3200    0.3100    0.3100    0.3000    0.3000    0.2900   0.2800    0.2700    0.2600    0.2600    0.2400    0.2200

Answer

elyase picture elyase · Sep 8, 2013

If you plot log(y) vs log(x) you will see they follow a linear relationship. So we can do:

x =  [200.0000  205.0000  210.0000  215.0000  220.0000  225.0000  230.0000  235.0000  240.0000 245.0000  250.0000  255.0000  260.0000  265.0000  270.0000  275.0000  280.0000  285.0000 290.0000  295.0000  300.0000  305.0000  310.0000  315.0000  320.0000  330.0000  340.0000 350.0000  360.0000  370.0000  380.0000  390.0000  400.0000  410.0000  420.0000  430.0000 440.0000  450.0000  460.0000  470.0000  480.0000  490.0000  500.0000  510.0000  520.0000 530.0000  540.0000  550.0000  560.0000  570.0000  580.0000  590.0000  600.0000  620.0000 640.0000  660.0000  680.0000  700.0000  750.0000  800.0000];
y =  [0.8900    0.8600    0.8400    0.8200    0.8000    0.7900    0.7700    0.7500    0.7400   0.7200    0.7100    0.6900    0.6800    0.6700    0.6500    0.6400    0.6300    0.6200   0.6100    0.6000    0.5900    0.5800    0.5700    0.5600    0.5500    0.5400    0.5200   0.5100    0.4900    0.4800    0.4700    0.4500    0.4400    0.4300    0.4200    0.4100   0.4000    0.3900    0.3900    0.3800    0.3700    0.3600    0.3600    0.3500    0.3400   0.3400    0.3300    0.3200    0.3200    0.3100    0.3100    0.3000    0.3000    0.2900   0.2800    0.2700    0.2600    0.2600    0.2400    0.2200];

coeff = polyfit(-log10(x) , log10(y), 1)   % the '1' means linear
xp = [200:1000];
yp = 10^coeff(2)*xp.^(-coeff(1));
plot(x,y,'o',xp,yp)

And you get:

enter image description here