Linearly "interpolate" a 1-dimensional vector

1 visualizzazione (ultimi 30 giorni)
wy6622
wy6622 il 13 Feb 2019
Commentato: Jan il 14 Feb 2019
Hello,
I have a vector of annual population figures for a number of years. I'd like to assume a linear growth and obtain the implied weekly figures. Is there an easier way than using interp1 and having to create an x grid of the years [1 2 3...] and the query points [1/52 2/52....1, 1 1/52, 1 2/52....]? Something like
[pop,txt,raw]= xlsread('annual population.xlsx');
pop=pop(:,1:2);
weekpop=[];
for i=1:21 %1997-2017 21 years
weekpop=[weekpop; linspace(pop(23-i,2),pop(23-1-i,2),52)'];
end
sort of works but doing linspace on a vector of values duplicates the end points (the pop in the 52nd week of year t-1 is the same as pop in week 1 of year t)
Thank you!

Risposta accettata

Jan
Jan il 13 Feb 2019
What's wrong with interp1?
pops = flipud(pop(:,2));
n = numel(pops);
weekpop = interp1(1:n, pops, linspace(1, n, (n-1) * 52))
  2 Commenti
wy6622
wy6622 il 13 Feb 2019
I wasn't able to come up with an elegant way to write the query points like your "linspace(1, n, (n-1) * 52)". Thank you!
Jan
Jan il 14 Feb 2019
You are welcome.

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by