# Math - weighted average?

posted by .

I need to create some type of formula that will allow me to interpolate values at specific points in a data set. My data is something like this: I have a list of times, and there are values associated with those times like this:

1 100 103 105
2 103 101 107
3 102 104 108
4.5 107 107 105
7 105 106 104

I need to correct the times (and the corresponding values) so that each timestamp is one second apart. My professor said that the best way to do this would be with a weighted average.

I'm finding it difficult to find a formula that seems correct. I tried solving for the correct time value, ie:

4 = ((3+4.5)/2)x
Where x= the unknown weight, 4 is the corrected timestamp value, and 3 and 4.5 are the known time values. This gives me an X of 16/15. This process works when I know what the value should be (as with the timestamps), but I don't know what the interpolated reading values should be. I thought that maybe once I found the "weight" from the timestamps I could use it to interpolate the readings, but this doesn't seem to provide a reasonable answer. (ie, plugging in 16/15 for x in the equation ((102+107)/2)x provides a value of 111.47, which doesn't make sense). I also thought about multiplying the average by some sort of percent difference from the target value, but this doesn't seem to work either.

The dataset I have is very large so ideally I'd like to find a formula that I can use in a program to do the calculations for me, rather than doing each calculation by hand. Any help or insight would be appreciated.

• Math - weighted average? -

if you understand interpolation, and you seem to, just think of it this way.

If the value you want is, say, 2/3 of the way from one known value to the next, the readings will also be 2/3 of the way from one value to the next.

so, if you want to place values at 1-unit intervals, you need to step through the given timestamps and whenever you find two timestamps greater than one unit apart, interpolate.

3 and 4.5 are greater than 1 unit apart, so, since 4 is 2/3 of the way between 3 and 4.5, you will generate values 2/3 of the way between those at 3, and those at 4.5.

Since 7 is more than 1 unit away from 4.5, you need to generate data points for times of 5 and 6.

5 is 1/5 of the way from 4 to 7.5
6 is 3/5 of the way.

so, given x-values and y-values,

if xn+1 - xn > 1,
for each number xk between xn and xn+1,
yk = yn + (xk-xn)/(xn+1-xn) * (yn+1-yn)

• Math - weighted average? -

small oops. 5 is 2/7 of the way from 4 to 7.5, and 6 is 4/7, and 7 is 6/7.

• Math - weighted average? -

This made a lot of sense, thank you for responding! It was able to incorporate it into my program and it seems to work.