[scilab-Users] Difference Compared to Octave

Sylvestre Ledru sylvestre.ledru at scilab.org
Sun Aug 24 23:10:01 CEST 2008


Hello,

Which version of Scilab are you using ?

Thanks,
Sylvestre

Le dimanche 24 août 2008 à 14:08 -0700, Thomas D. Dean a écrit :
> I tried to implement the Octave polyfit function in scilab.
> 
> Coding was no problem, some minor syntax changes and a couple
> manipulation function changes.
> 
> I get different results when comparing Scilab to Octave.
> The results from Octave seem to be closer to the input data.
> 
> The difference seems to be in X\y, returning a different value in
> Scilab.  The function and data are at the bottom.
> 
> n = 2;
> x = [1:7]*1000;
> l = length (x);
> x = matrix(x, l, 1);
> y = matrix(y, l, 1);
> 
> X = (x * ones (1, n+1)) .^ (ones (l, 1) * (n : -1 : 0));
> 
> p = X\y;
> 
> Octave:   [3.9283e-05 -1.3290e-01  1.1586e+02]
> Scilab:   [ 0.0000325 - 0.0715604  0.  ]
> 
> Also, Scilab produces a message, "rank defficient. rank =  2"
> 
> Any ideas?
> 
> tomdean
> 
> function [p, s] = polyfit (x, y, n)
>   if (argn(2) <> 3) then
>     error("Usage: polyfit(x,y,n)");
>   end
> 
>   if (~ (isvector(x) & isvector(y) & (max(size(x)) == max(size(y))) ) )
> then
>     error ("polyfit: x and y must be vectors of the same size");
>   end
> 
>   if (~ (prod(size(n)==1) & n >= 0 & ~isinf (n) & n == round (n))) then
>     error ("polyfit: n must be a nonnegative integer");
>   end
> 
>   y_is_row_vector = (size(y,1) == 1);
> 
>   l = length (x);
>   x = matrix(x, l, 1);
>   y = matrix(y, l, 1);
> 
>   X = (x * ones (1, n+1)) .^ (ones (l, 1) * (n : -1 : 0));
> 
>   p = X \ y;
> 
>   if (argn(1) > 1) then
>     yf = X*p;
>     if (y_is_row_vector) then
>       s.yf = yf.';
>     else
>       s.yf = yf;
>     end
>     s.R = chol (X'*X);
>     s.X = X;
>     s.df = l - n - 1;
>     s.normr = norm (yf - y);
>   end
> 
>   // Return value should be a row vector.
>   p = p.';
> 
> endfunction;
> 
> s = [1:7]*1000;
> t = [ 3.3598, 26.4377, 89.6760, 211.5766, 414.1391, 716.1501,1128.1406];
> 
> polyfit(s,t,2)
> 
> 




More information about the users mailing list