Interpolating missing values according to time vector

Hi!
I want to interpolate the missing values of this vector:
x=[2 6 8 10 NaN NaN NaN NaN 21 59 NaN 12 80];
but, instead of using the intermediate values in each case, I want to interpolate according another vector of "serial times", for example:
time=[738097.24, 738097.253, 738097.261, 738097.4, 738097.53, 738097.69, 738097.81, 738097.8129, 738097.91, 738098.0, 738098.3, 738098.49, 738098.79];
That means, the values between x(4) and x(9) must respect the sequence given in the time vector.
Is there any form to do that automatically?
Thanks!

댓글 수: 1

I have no idea what you mean or expect the result to be???

댓글을 달려면 로그인하십시오.

 채택된 답변

Sure. You just have to separate your knowns and unknowns.
x=[2 6 8 10 NaN NaN NaN NaN 21 59 NaN 12 80]';
time=[738097.24, 738097.253, 738097.261, 738097.4, 738097.53, 738097.69, 738097.81, 738097.8129, 738097.91, 738098.0, 738098.3, 738098.49, 738098.79];
% Create index of known values
indKnown = ~isnan(x);
% interpolate to obtain values of unknown values
x(~indKnown) = interp1(time(indKnown),x(indKnown),time(~indKnown))
x = 13×1
2.0000 6.0000 8.0000 10.0000 12.8039 16.2549 18.8431 18.9057 21.0000 59.0000

추가 답변 (1개)

Bob Thompson
Bob Thompson 2021년 2월 22일
I don't know if there is a single command that would do what you're asking, though others might know of one.
A fairly concise way of finishing the array though is the following:
x(isnan(x)) = interp1(time(~isnan(x)),x(~isnan(x)),time(isnan(x)));

댓글 수: 1

Thanks!! I can't accept more than one anwser, but the code is just perfect and fulfills its function!!

댓글을 달려면 로그인하십시오.

카테고리

제품

릴리스

R2019b

질문:

2021년 2월 22일

댓글:

2021년 2월 22일

Community Treasure Hunt

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

Start Hunting!

Translated by