søn, 05 07 2009 kl. 14:10 +0000, skrev Autiwa: > I modified the .m because I prefer that if fwhm is not defined, that > fwhm is set to 0. En fact, it happens sometimes that it's a normal > behaviour for a signal not to have a fwhm. It's disturbing to break > the run of the program only because of that. I think it's sufficient > to prompt a warning and set the value to 0. It avoid to have errors in > the program.
The reason why I changed it is that people tend to complain when they get a warning, because they cannot easily get rid of it. Errors are different because you can catch these (using try-catch-blocks). So, I would say that the function should either return 0 (or something negative) in which case the behaviour should be documented or raise an error. > In addition, I tried to have a syntax that would have allowed someone > to run it in matlab. But you changed the syntax and now, you can't run > it under matlab environment. Oh, I didn't realise you needed Matlab compatibility. Try the attached version then. > By the way, you have modified a lot of things so I don't think that > all credit remain only to me. I've mostly just inserted spaces to make the code more readable. > My full name : Christophe Cossou I've listed you as the author. Søren > Le dimanche 05 juillet 2009 à 15:48 +0200, Søren Hauberg a écrit : > > tor, 02 07 2009 kl. 22:48 +0200, skrev Autiwa: > > > Ok, I think it's good now :) > > > > Thanks. Since nobody has commented, I assume people think your stuff is > > good :-) > > > > I've (hopefully) made the documentation somewhat more clear, and changed > > the coding-style a bit. Could you check that I haven't broken anything? > > I'm attaching the code. > > > > By the way, what is your full name? I think you should be given credit > > for the code. > > > > Thanks > > Søren
%% -*- texinfo -*- %% @deftypefn {Function File} {} fwhm (@var{f}) %% @deftypefnx{Function File} {} fwhm (@var{x}, @var{f}) %% Return the full width at half maximum if a given signal. %% %% The full width at half maximum is an expression of the extent of a signal, %% defined as the difference between the two extremal points of the signal where %% it equals half of its maximum value. %% %% The signal is given by the vector @var{f} with optional @math{x}-values %% @var{x}. If the latter is not given, it defaults to the indexes of @var{f}. %% %% If the full width at half maximum is not defined, the function returns 0. %% @seealso{std} %% @end deftypefn %% This program is public domain. %% Author: Christophe Cossou function retval = fwhm (x, f) %% Check input if (nargin == 0) error ('fwhm: not enough input arguments'); elseif (nargin == 1) f = x; x = 1:length (f); end if (numel (x) != numel (f)) error ('fwhm: number of elements does not match'); end %% Locate maximum fmax = max (f); f_renorm = f - 0.5 * fmax; ind = find (f_renorm(1:end-1) .* f_renorm (2:end) <= 0); %% If the product is negative, this means that the 'half-maximum' is between %% theses two values if (length (ind) == 2) %% We make a linear regression between the two values to get a more precise %% estimation of the fwhm. x1 = (0.5 * fmax - f (ind (1) + 1)) * (x (ind (1) + 1) - x (ind (1))) ... / (f (ind (1) + 1) - f (ind (1))) + x (ind (1) + 1); x2 = (0.5 * fmax - f (ind (end) + 1)) * (x (ind (end) + 1) - x (ind (end))) ... / (f (ind (end) + 1) - f (ind (end))) + x (ind (end) + 1); retval = x2 - x1; else % warning ('fwhm: full width at half maximum is not defined. FWHM is set to 0'); retval = 0; end
------------------------------------------------------------------------------
_______________________________________________ Octave-dev mailing list Octave-dev@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/octave-dev