FUNCTION RH_LINEAR_SVD, mat, vec, double=double, column=column, i_stop

; Procedures appelamtes :  RH_FIT_QUADRIC et RH_FIT_QUARTIC.

; But : resoudre un systeme lineaire n*n par la methode SVD. 
;	Au 22 mars 01 linear_svd est utilise pour resoudre les systemes resul-
;	tant de determination de parametres par methode des moindres carres.

; Rappel : la production de gaps dans les donnees pour tester CRAMER, 
;	     RH_LINEAR_LU et RH_LINEAR_SVD est en option dans FIT_TF_1D 
;	     (dans AUTOCAL_SUB.PRO) pour i_test_gap=1.

; Resolution systeme lineaire par methode SVD
;    SVDC, A, W, U, V
;	A The square (n x n) or non-square (n x m) single- or double-precision
;	    floating-point array to decompose.
;	W On output, W is an n-element output vector containing the "singular 
;	    values."
;	U On output, U is an n-column, m-row orthogonal array used in the 
;	    decomposition of A.
;	V On output, V is an n-column, n-row orthogonal array used in the 
;	    decomposition of A.
;	Keywords : COLUMN Set this keyword if the input array A is in column-
;		     major format (composed of column vectors) rather than in 
;		     row-major format (composed of row vectors). onc inutile
;		     ici ou on ne se preoccupe que de matrices carrees.
;		   DOUBLE Set this keyword to force the computation to be done
;		     in double-precision arithmetic.
;    Resultat = SVSOL(u, w, v, b, /double)
;	u an n-column, m-row orthogonal array used in the decomposition of A. 
;	    Normally, U is returned from the SVDC procedure.
;	w an n-element vector containing "singular values." Normally, W is 
;	    returned from the SVDC procedure. Small values (close to machine 
;	    floating-point precision) should be set to zero prior to calling 
;	    SVSOL.
;	v an n-column, n-row orthogonal array used in the decomposition of A. 
;	    Normally, V is returned from the SVDC procedure.
;	b an m-element vector containing the right hand side of the linear 
;	    system Ax = b.

    SVDC, mat, w, u, v		; pas de /double (deja en double en entree).

    icon = 0
    if ((icon eq 1) and (i_stop eq 1))  then begin
	print, 'mat ='	& print, mat
	print, 'w ='	& print, w
	print, 'u ='	& print, u
	print, 'v ='	& print, v
	stop
    endif
    resultat = SVSOL(u, w, v, vec)	; deja en double precision en entree).

    return, resultat
    end			; Fin de RH_LINEAR_SVD


; Essais du 11 juin 01. Comparaison des fits Cramer LU et SVD.
; - sur les harm EW de E1 (reseau bien phase). Le fit va des harm -20 a +20.
;   . gap [-10, 10] a [-14, 14]
;	- en double precision complete (calcul de mat et vec, et reesolution) 
;	    Cramer LU SVD sont identiques et OK.
;	- en simple precision : Cramer et LU sont identiques et OK, SVD comme
;	    dans l'essai du 2 avril 01.
;     CONCLUSION : SVD est tres sensible a la precision. Preferer LU.
 
;   . gap [-1 ,  1] a l'origine. SVD et CRAMER tres voisins.
;   .	    -5,  5  Cramer OK, SVD plus bas de 3% en zero
;   .	    -7,  7  ---------, SVD coincide totalement.
;   .	    -8,  8  ---------, SVD plus bas de 1% en zero.
;   .	    -9,  9  -------------------------------------
;   .      -10, 10  ---------, SVD concavite vers le haut, faux de 50% en zero.
;   .	   -12, 12  ---------------------------------------------- 70% -------
;   .	   -14, 14  Cramer sous-estime de 5% en zero, SVD strivtement plat a 
;									0.64.
;   .	   -18, -2  Cramer et SVD accord <1%	
;   .	   -18, -6  Cramer et SVD confondus	

; Essais du 2 avril 01. Comparaison des fits Cramer et SVD (double precision
;    pour la resolution , mais la matrice et le vecteur de doite restent cal-
;    cules en simple precision.
; - sur les harm EW de E1 (reseau bien phase). Le fit va des harm -20 a +20.
;   . gap [-1 ,  1] a l'origine. SVD et CRAMER tres voisins.
;   .	    -5,  5  Cramer OK, SVD plus bas de 3% en zero
;   .	    -7,  7  ---------, SVD coincide totalement.
;   .	    -8,  8  ---------, SVD plus bas de 1% en zero.
;   .	    -9,  9  -------------------------------------
;   .      -10, 10  ---------, SVD concavite vers le haut, faux de 50% en zero.
;   .	   -12, 12  ---------------------------------------------- 70% -------
;   .	   -14, 14  Cramer sous-estime de 5% en zero, SVD strivtement plat a 
;									0.64.
;   .	   -18, -2  Cramer et SVD accord <1%	
;   .	   -18, -6  Cramer et SVD confondus	
; - sur les harm EW de E0 (reseau bien phase), Le fit va des harm -20 a +20.
;   . gap [ -1,  1} Cramer et SVD sont OK et confondus.
;   .	    -5,  5  ------ OK, SVD surestime de 1% en zero
;   .	    -7,  7  ---------, SVD confondu.
;   .	    -9,  9  ---------, SVD sous-estime de 3% en zero
;   .	   -11, 11  ---------, SVD confondu
;   .	   -13, 13  ---------, SVD sous-estime de 12% en zero
;   .	   -15, 15  -------------- surestime   de 60% en zero
;   .	   -17, 17  fits impossibles
; - sur les harm EW de NS0_ns (reseau bien phase), Fit des harm -16 a +16.
;   . gap [ -1,  1} Cramer et SVD sont OK et confondus.
;   .	    -3,  3  ----------------------------------
;   .	    -4,  4  ----------------------------------
;   .	    -6,  6  ----------------------------------
;   .	    -8,  8  Cramer OK, SVD surestime   de 1% en zero.
;   .	   -10, 10  Cramer OK, SVD sous_estime de 3% en zero.
;   .	   -12, 12  Cramer presque OK, SVD sous_estime de 10% en zero. Pourtant
;			le fit ne s'appuie que sur 4 points !
; - sur les harm NS de NS0_ew (reseau bien phase), Fit es harm -18 a +18. A la
;	difference des cas precedents il n'y a plus nullite des harm pairs ou 
;	impairs.
;   . gap [ -1,  1} Cramer et SVD sont OK et quasi-confondus.
;   .     [ -3,  3} ----------------------------------------
;   .     [ -5,  5} Cramer OK, SVD sous_estime de  2% en zero.
;   .     [ -6,  6} -----------------------------  7% -------
;   .     [ -7,  7} -----------------------------  6% -------
;   .	    -8,  8  -----------------------------  1% -------
;   .	    -9,  9  ----------------------------- 10% -------
;   .	   -10, 10  ------------------------------35% ------- concavite inverse
;   .	   -11, 11  Cramer et SVD confondus
;   .	   -12, 12  Cramer OK, SVD sous-estime de 15% en zero.
;   .	   -18, -5  Cramer et SVD accord 1%