Interpolating temperature data¶
Here are 5-year averages of the worldwide temperature anomaly as compared to the 1951-1980 average (source: NASA).
using FundamentalsNumericalComputation
t = 1955:5:2000
y = [ -0.0480, -0.0180, -0.0360, -0.0120, -0.0040,
0.1180, 0.2100, 0.3320, 0.3340, 0.4560 ];
scatter(t,y,label="data",
xlabel="year",ylabel="anomaly (degrees C)",leg=:bottomright)
A polynomial interpolant can be used to fit the data. Here we build one using a Vandermonde matrix. First, though, we express time as decades since 1950, as it improves the condition number of the matrix.
t = @. (t-1950)/10;
V = [ t[i]^j for i=1:length(t), j=0:length(t)-1 ]
c = V\y
10-element Array{Float64,1}:
-14.114000003719966
76.36173811538407
-165.4559722658534
191.9605667174846
-133.2734722578299
58.015577793493335
-15.962888893287804
2.6948063499633275
-0.25466666673964783
0.01031111111412555
p = Polynomial(c)
f = s -> p((s-1950)/10)
plot!(f,1955,2000,label="interpolant")
As you can see, the interpolant does represent the data, in a sense. However it’s a crazy-looking curve for the application. Trying too hard to reproduce all the data exactly is known as overfitting.