(* ::Package:: *)

(************************************************************************)
(* This file was generated automatically by the Mathematica front end.  *)
(* It contains Initialization cells from a Notebook file, which         *)
(* typically will have the same name as this file except ending in      *)
(* ".nb" instead of ".m".                                               *)
(*                                                                      *)
(* This file is intended to be loaded into the Mathematica kernel using *)
(* the package loading commands Get or Needs.  Doing so is equivalent   *)
(* to using the Evaluate Initialization Cells menu command in the front *)
(* end.                                                                 *)
(*                                                                      *)
(* DO NOT EDIT THIS FILE.  This entire file is regenerated              *)
(* automatically each time the parent Notebook file is saved in the     *)
(* Mathematica front end.  Any changes you make to this file will be    *)
(* overwritten.                                                         *)
(************************************************************************)



(*     Package pour Mathematica 4
							"\!\(\*UnderscriptBox[
RowBox[{\"Propagation\", \"\\\\\", \" \", \"des\", \"\\\\\", \" \", \"incertitudes\"}], \"_\"]\)"						 
			
							par Marcel D\[EAcute]l\[EGrave]ze
						 Coll\[EGrave]ge du Sud, CH 1630 Bulle
							Version de d\[EAcute]c. 2002         *)


BeginPackage["CalculErreur`"]


 m\[Sigma]::usage=
	"m\[Sigma][x] o\[UGrave] x = {x1, x2, ..., xn} calcule {m, \!\(\*OverscriptBox[\"\[Sigma]\", \"__\"]\)} o\[UGrave] \n     m est la moyenne de x et\n    \!\(\*OverscriptBox[\"\[Sigma]\", \"__\"]\)=\!\(\*SqrtBox[FractionBox[
RowBox[{UnderoverscriptBox[\"\[Sum]\", 
RowBox[{\"j\", \"=\", \"1\"}], \"n\"], SuperscriptBox[
RowBox[{\"(\", 
RowBox[{SubscriptBox[\"x\", \"j\"], \"-\", \"m\"}], \")\"}], \"2\"]}], 
RowBox[{\"n\", 
RowBox[{\"(\", 
RowBox[{\"n\", \"-\", \"1\"}], \")\"}]}]]]\) l'\[EAcute]cart-type de la moyenne;
		\n\nm\[Sigma][x,\[Sigma]] o\[UGrave] x = {x1, x2, ..., xn} calcule {m,\!\(\*OverscriptBox[\"\[Sigma]\", \"__\"]\)} o\[UGrave] \n     m est la moyenne de x et\n    \!\(\*OverscriptBox[\"\[Sigma]\", \"__\"]\)=\!\(\*FractionBox[\"\[Sigma]\", SqrtBox[\"n\"]]\) l'\[EAcute]cart-type de la moyenne; 
		\n\nm\[Sigma][x] o\[UGrave] x = {{x1,\[CapitalDelta]x1,}, {x2,\[CapitalDelta]x2}, ..., {xn,\[CapitalDelta]xn}} calcule {m,\!\(\*OverscriptBox[\"\[Sigma]\", \"__\"]\)} o\[UGrave]\n      m est la moyenne de {x1, x2, ...} et\n     \!\(\*OverscriptBox[\"\[Sigma]\", \"__\"]\)=\!\(\*SqrtBox[FractionBox[
RowBox[{UnderoverscriptBox[\"\[Sum]\", 
RowBox[{\"j\", \"=\", \"1\"}], \"n\"], SubsuperscriptBox[\"\[CapitalDelta]x\", \"j\", \"2\"]}], 
RowBox[{\"n\", 
RowBox[{\"(\", 
RowBox[{\"n\", \"-\", \"1\"}], \")\"}]}]]]\) l'estimateur de l'\[EAcute]cart-type de m."


resultArrondi::usage=
	"resultArrondi[{m,\[CapitalDelta]m}] arrondit {m,\[CapitalDelta]m}; \n\n	resultArrondi[x] arrondit chaque \[EAcute]l\[EAcute]ment de la liste\n     x = {{x1,\[CapitalDelta]x1}, {x2,\[CapitalDelta]x2}, ...}."


gauss::usage=
	"gauss[f,v] calcule la formule de l'incertitude absolue de\n    l'expression f par rapport \[AGrave] la liste de variables v."


gaussRel::usage=
	"gaussRel[f,v] calcule la formule de l'incertitude relative de\n    l'expression f par rapport \[AGrave] la liste de variables v."


evalF::usage=
	"evalF[f,v,m] calcule les valeurs de l'expression f\n {{f1}, {f2}, ...} en donnant \[AGrave] la liste de variables v les valeurs m."


eval\[CapitalDelta]f::usage=
	"eval\[CapitalDelta]f[f,v,m,i] calcule les incertitudes absolues de l'expression f\n {\[CapitalDelta]f1, \[CapitalDelta]f2, ...} en donnant \[AGrave] la liste de variables v les valeurs m\n et aux incertitudes correspondantes les valeurs i."


eval\[CapitalDelta]fRel::usage=
	"eval\[CapitalDelta]fRel[f,v,m,i] calcule les incertitudes relatives de l'expression f\n {\!\(\*FractionBox[\"\[CapitalDelta]f1\", \"f1\"]\), \!\(\*FractionBox[\"\[CapitalDelta]f2\", \"f2\"]\), ...} en donnant \[AGrave] la liste de variables v les valeurs m\n et aux incertitudes correspondantes les valeurs i."


evalF\[CapitalDelta]f::usage=
	"evalF\[CapitalDelta]f[f,v,m,i] calcule les valeurs et incertitudes absolues de l'expression f\n {{f1,\[CapitalDelta]f1}, {f2,\[CapitalDelta]f2}, ...} en donnant \[AGrave] la liste de variables v les valeurs m\n et aux incertitudes correspondantes les valeurs i."


eval\[CapitalDelta]var::usage=
	"eval\[CapitalDelta]var[v,m,i] calcule les incertitudes absolues sur chaque variable\n {{\[CapitalDelta]x1,\[CapitalDelta]y1,...}, {\[CapitalDelta]x2,\[CapitalDelta]y2}, ...}} en donnant \[AGrave] la liste de variables v les valeurs m\n et aux incertitudes correspondantes les valeurs i."


\[GothicCapitalR]::usage=
	"Plac\[EAcute] dans la d\[EAcute]claration d'une incertitude,\n le symbole \[GothicCapitalR] indique que l'incertitude est relative."


substitue::usage=
"substitue[v,m] cr\[EAcute]e une liste de substitutions\n o\[UGrave] les variables de la liste v prennent les valeurs de la liste m;
		\n\nsubstitue[v,m,i] cr\[EAcute]e une liste de substitutions\n  o\[UGrave] les variables v prennent les valeurs m et\n  les incertitudes correspondantes prennent les valeurs i."


graphErr::usage=
	"graphErr[res] cr\[EAcute]e un graphique avec la liste\n res = {{y1,\[CapitalDelta]y1}, {y2,\[CapitalDelta]y2},...} dont les abscisses sont {1, 2, ...}; \n\n
		graphErr[absc, res] cr\[EAcute]e un graphique avec les listes\n absc = {x1, x2, ...}, res = {{y1,\[CapitalDelta]y1}, {y2,\[CapitalDelta]y2}, ...}."


protege::usage=
	"protege[v] prot\[EGrave]ge une liste de variables v = {a, b, c, ...} et\n les variables {\[CapitalDelta]a, \[CapitalDelta]b, \[CapitalDelta]c, ...} qui d\[EAcute]signent les incertitudes correspondantes."


formatPourcent::usage=
	"formatPourcent[x] affiche le nombre x au format %.\n Si x est un vecteur, il est converti en une matrice colonne."


Off[General::spell1];


Begin["`Private`"]


m\[Sigma][x_List]:=Module[{n,m,\[Sigma]},
		n=Length[x];
		m=Apply[Plus,x]/n;
		\[Sigma]=Sqrt[Apply[Plus,(x-m)^2]/(n (n-1))];
		{N[m],N[\[Sigma]]}]/;VectorQ[x];


m\[Sigma][x_List,\[Sigma]_]:=N[{Apply[Plus,x]/Length[x],\[Sigma]/Sqrt[Length[x]]}]/;VectorQ[x];


m\[Sigma][x_List]:=Module[{n,v,dv,m,\[Sigma]},
		n=Length[x];
		{v,dv}=Transpose[x];
		m=Apply[Plus,v]/n;
		\[Sigma]=Sqrt[Apply[Plus,dv^2]/(n (n-1))] ;
		{N[m],N[\[Sigma]]}]/;MatrixQ[x];


resultArrondi[{m_,\[CapitalDelta]m_}]:=Module[{n},
		n=Floor[Log[10,Abs[\[CapitalDelta]m]]];
		{N[Round[m*10^(-n)]*10^n],N[Round[\[CapitalDelta]m*10^(-n)]*10^n]}/;NumericQ[m]&&NumericQ[\[CapitalDelta]m]]


resultArrondi[x_List]:=Map[resultArrondi,x]


grad[f_,v_List]:=Table[D[f,v[[j]]],{j,1,Length[v]}]


errListe[v_List]:=
Table[Symbol[StringInsert[SymbolName[v[[j]]],"\[CapitalDelta]",1]],{j,1,Length[v]}]


gauss[f_,v_]:=Abs[D[f,v]*Symbol[StringInsert[SymbolName[v],"\[CapitalDelta]",1]]]/;AtomQ[v]


gauss[f_,v_List]:=Sqrt[Apply[Plus,(grad[f,v]*errListe[v])^2]]


gaussRel[f_,v_]:=Simplify[Sqrt[(gauss[f,v]/f)^2]]


evalF[f_,v_,m_]:=Transpose[{f/.substitue[v,m]}]


eval\[CapitalDelta]f[f_,v_,m_,i_]:=gauss[f,v]/.substitue[v,m,i];


eval\[CapitalDelta]fRel[f_,v_,m_,i_]:=eval\[CapitalDelta]f[f,v,m,i]/Flatten[evalF[f,v,m],1] \[GothicCapitalR];


evalF\[CapitalDelta]f[f_,v_,m_,i_]:=Module[{val},val={Flatten[evalF[f,v,m],1],
	eval\[CapitalDelta]f[f,v,m,i]};
	If[MatrixQ[val],Transpose[val],{val}]];


eval\[CapitalDelta]var[v_,m_,i_]:=Transpose[Table[eval\[CapitalDelta]f[v[[k]],v[[k]],Transpose[m][[k]],i[[k]]],{k,1,Length[v]}]];


Protect[\[GothicCapitalR]];


affine[m_,a_*\[GothicCapitalR]+b_]:=a m+b


affine[m_,a_*\[GothicCapitalR]]:=a m


affine[m_,b_]:=b


composante[k_][i_List]:=i[[k]]


composante[k_][i_]:=i


substitue[v_,m_]:={v->N[m]}/;NumericQ[m]


substitue[v_,m_List]:=Table[{v->N[m[[k]]]},{k,1,Length[m]}]/;SameQ[Head[v],Symbol]


substitue[v_List,m_List]:=Table[v[[k]]->N[m[[k]]],{k,1,Length[m]}]/;VectorQ[m]


substitue[v_List,m_List]:=Table[substitue[v,m[[k]]],{k,1,Length[m]}]/;MatrixQ[m]


substitue[v_,m_,i_]:={v->N[m],Symbol[StringInsert[SymbolName[v],"\[CapitalDelta]",1]]->affine[m,i]}/; NumericQ[m]


substitue[v_,m_List,i_]:=Table[substitue[v,m[[k]],i],{k,1,Length[m]}]/;SameQ[Head[v],Symbol]


substitue[v_List,m_List,i_List]:=Flatten[Table[substitue[v[[k]],m[[k]],i[[k]]],{k,1,Length[m]}]]/;VectorQ[m]


substitue[v_List,m_List,i_List]:=Table[substitue[v,m[[k]],Map[composante[k],i]],{k,1,Length[m]}]/;MatrixQ[m]


barre[x_,\[CapitalDelta]x_,y_,\[CapitalDelta]y_]:=Line[{{x-\[CapitalDelta]x,y+\[CapitalDelta]y},{x+\[CapitalDelta]x,y+\[CapitalDelta]y},{x,y+\[CapitalDelta]y},{x,y-\[CapitalDelta]y},
			{x-\[CapitalDelta]x,y-\[CapitalDelta]y},{x+\[CapitalDelta]x,y-\[CapitalDelta]y}}]


graphErr[ordErr_List]:=Module[{a, b, c, dx,p},
		p=Transpose[{Range[Length[ordErr]],
Transpose[ordErr][[1]],
Transpose[ordErr][[2]]}];
a=1-0.1*(Length[ordErr]-1);
		b = Length[ordErr]+0.1*(Length[ordErr]-1);
		dx=(b-a)*0.002;
		c=Min[Table[p[[i,2]]-1.5*p[[i,3]],{i,1,Length[p]}]];
		Graphics[
		Table[barre[p[[i,1]],dx,p[[i,2]],p[[i,3]]],{i,1,Length[p]}],
	PlotRange->{{a,b},All},
			AxesOrigin->{a,c},
		Axes->True,
			Ticks->{Range[Length[ordErr]],Automatic},
		ImageSize->{300, 200}]]


graphErr[abscisses_List,ordErr_List]:=Module[{a, b, c,dx, p},
		p=Transpose[{abscisses,
Transpose[ordErr][[1]],
Transpose[ordErr][[2]]}];
a=Min[abscisses]-0.1*(Max[abscisses]-Min[abscisses]);
	b=Max[abscisses]+0.1*(Max[abscisses]-Min[abscisses]);
		dx=(b-a)*0.002;
			c=Min[Table[p[[i,2]]-3*p[[i,3]],{i,1,Length[p]}]];	
		Graphics[
			Table[barre[p[[i,1]],dx,p[[i,2]],p[[i,3]]],{i,1,Length[p]}],
	PlotRange->{{a,b},All},
	PlotRange->{{a,b},All},
			AxesOrigin->{a,c},
		Axes->True,
			Ticks->Automatic,
		ImageSize->{400, 300}]]


protege[v_]:=(Map[Protect,v];Map[Protect,errListe[v]];)


formatPourcent[x_]:=Transpose[{x/.{\[GothicCapitalR]->100. "%"}}]/;VectorQ[x]


formatPourcent[x_]:=x/.{\[GothicCapitalR]->100. "%"};


End[]


EndPackage[]
