# stuck on a simple cumsum prob

2 vues (au cours des 30 derniers jours)
Matlab2010 le 29 Mai 2012
I have a variable x. I make a variable y. I now need to regenerate my variable xNew from y.
Its very close but not exact. Why not? what I have done wrong?
x = cumsum(randn(1000,1));
y = 0.5.*(x(3:end) - x(1:end-2));
xNew = cumsum(y);
plot(x(3:end)); hold all; plot(xNew);
##### 0 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponse acceptée

Oleg Komarov le 29 Mai 2012
y = 0.5.*(x(3:end) - x(1:end-2));
Is linear interpolation between point 1 and 3, then between 2 and 4 and so on.
You cannot recover x from the linearly interpolated y unless you are given x(1) and x(end).
EDIT
Suppose you have 5 points only (for simplicity), then:
y2* = (x3-x1)/2;
y3* = (x4-x2)/2;
y4* = (x5-x3)/2;
I assume you know the series of y, i.e. are numbers, but x is unobserved, then you can see that the system has 5 unknowns (x1,...x5) in three equations. Thus, you can have a unique solution only if you are given x1 and x5.
Now, if you are given the x series for comparison reasons, you can guess x1 and x5 then retrieve the rest of the series and compare the distance between xNew and the original one. In an iterative fashion you can then tweak the guess and comapre again the two series, if the distance has dimished then continue tweaking the guess in the same direction until you reach distance = 0.
EDIT#2 You don't need exactly x1 and x5 but any two xi.
##### 2 commentairesAfficher AucuneMasquer Aucune
Matlab2010 le 29 Mai 2012
can you recover x(2:end-1)?
Oleg Komarov le 29 Mai 2012
No. See example above.

Connectez-vous pour commenter.

### Plus de réponses (1)

Thomas le 29 Mai 2012
x = cumsum(randn(1000,1));
%y = (x(2:end) - x(1:end-1));
y=[x(1); (x(2:end) - x(1:end-1))];
xNew = cumsum(y);
plot(x(2:end)); hold all; plot(xNew);
isequal(x,xNew)
##### 3 commentairesAfficher 1 commentaire plus ancienMasquer 1 commentaire plus ancien
Matlab2010 le 29 Mai 2012
yes. but what about "(x(3:end) - x(1:end-2));"
Thomas le 29 Mai 2012
Hmm. then as oleg says you need, x(1) and x(end) for each value to interpolate..

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Interpolation dans Help Center et File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by