Answer:
This question is incomplete, here is the complete question:
Python
a) You should create a function that will perform linear interpolation from a set of measured data. The function should take as input a list of values at which samples were taken, and then another list giving the measurements (you can assume each measurement is a single value) at those values. It should also take in a query value, and should give the best estimate it can of the value at that query. Be sure to handle values that are outside of the range, by extrapolating. You should write a program that allows you to test your function by reading the lists from a file where each line of the file is a pair of numbers separated by spaces: the value where the sample was taken, and the measurement at that value. Your program should ask the user for the name of the file and for a query value. Important: The two lists will correspond to each other: i.e. for the i-th value in the first list, the measurement will be the i-th element of the second list (these are called parallel lists or arrays). But, you should not assume that the input values are in increasing/decreasing order. That is, the values in the first list can be in any random ordering, not necessarily from smallest to largest or largest to smallest. You will have to account for this in your program, and there is more than one way to do so. You should discuss what options you can think of to handle the data arriving in any order like that, and decide what you think the best option for handling it is.
Explanation:
from __future__ import division
from cStringIO import StringIO
import numpy as np
from scipy.interpolate import RectBivariateSpline
np.set_printoptions( 1, threshold=100, edgeitems=10, suppress=True )
# a file inline, for testing --
myfile = StringIO( """
# T P1 P2 P3 P4
0, 80,100,150,200
75, 400,405,415,430
100, 450,456,467,483
150, 500,507,519,536
200, 550,558,571,589
""" )
# file -> numpy array --
# (all rows must have the same number of columns)
TPU = np.loadtxt( myfile, delimiter="," )
P = TPU[0,1:] # top row
T = TPU[ 1:,0] # left col
U = TPU[1:,1:] # 4 x 4, 400 .. 589
print "T:", T
print "P:", P
print "U:", U
interpolator = RectBivariateSpline( T, P, U, kx=1, ky=1 ) # 1 bilinear, 3 spline
# try some t, p --
for t, p in (
(75, 80),
(75, 200),
(87.5, 90),
(200, 80),
(200, 90),
):
u = interpolator( t, p )
print "t %5.1f p %5.1f -> u %5.1f" % (t, p, u)