On Thu, Jan 31, 2013 at 7:41 PM, Jordi Gutiérrez Hermoso

<

[hidden email]> wrote:

> On 31 January 2013 12:52, dirac <

[hidden email]> wrote:

>> This might be trivial but I am stuck on this.

>> I have a vector, V, which basically contains the values of a cos/sin

>> function. The signs of the elements in the vector change from + to -

>> occasionally.

>

> idx_changes = diff(sign(vector)) != 0)

>

> HTH,

> - Jordi G. H.

> _______________________________________________

> Help-octave mailing list

>

[hidden email]
>

https://mailman.cae.wisc.edu/listinfo/help-octaveYou can improve on Jordi's result by linear interpolation (or whatever

fancier interpolation). Check this out

t = linspace(0,2*pi,100);

x = sin (4*t + pi/5);

idx = find (diff (sign(x)) != 0);

% If we take the values given by the indexes we get

sin (4*t(idx) + pi/5)

0.2264968 -0.0697565 0.1642651 -0.0063466 0.1013720 -0.1954794

0.0380707 -0.1328855

% if we do simple linear interpolation

tzero = mean ([t(idx); t(idx+1)]);

sin (4*tzero + pi/5)

0.1013720 0.0570888 0.0380707 0.1202944 -0.0253839 -0.0697565

-0.0887363 -0.0063466

In one case you get a worse result, but in general the abscissa of the

zero is better estimated.

Also, note that all these methods work for functions without noise. If

you have noise you will better fit a model function to your data and

get the zeros of the fitted function.

_______________________________________________

Help-octave mailing list

[hidden email]
https://mailman.cae.wisc.edu/listinfo/help-octave