REGRESJA EFEKTYWNA

Program wykonuje regresję efektywną czyli dopasowanie prostej zależnosci (Y (X) = a X + b)  z uwzględnieniem niepewności na każdej ze  współrzędnych.  Wynikiem, działania programu są kolejno : współczynnik korelacji wyliczony metodą Pearsona, tabela z wyznaczonymi parametrami a i b oraz ich niepewnościami, a także wykres zależności Y (X) z naniesionymi (wraz z niepewnościam) punktami o podanych wczesniej współrzędnych
	Program prosi o podanie czterech list - ze współrzędnymi, oraz list z ich niepewnościami, a także zakresów osi OX i OY, opisów osi, współrzędnych przecięcia się osi oraz podziałek osi. Po podaniu wszystkich danych należy je wczytać oraz wczytać procedurę. Wtedy program jest gotowy do wykonania rządanej regresji.
	Domyślnie, by zobrazować działanie programu, podano w listach wyniki pomiarów (oraz ich niepewności) otrzymanych podczas badania skręcenia płaszczyzny polaryzacji. Są to dane już wcześniej częściowo opracowane. Poniżej otrzymujemy, dopasowaną do punktów pomiarowych, liniową zależność kąta skręcenia płaszczyzny polaryzacji od stosunku masy cukru, rozpuszczonego w wodzie destylowanej, do objętości całego roztworu. Otrzymany wynik potwierdza prawo Biota.

START

Needs["ErrorBarPlots`"]

podaj tablice ze współrzędnymi oraz tablice z ich niepewnościami;

x={60.90440806045334,49.282945736434115`,128.6098802395209`,121.04390243902445`,93.62231578947363`};
y={5.645,4.980,12.475,11.795,8.995};
ex={0.8604027179588165`,1.9744863309311917`,3.1790075027423637`,2.155787397598752`,2.1922305902267474`};
ey={0.027,0.02,0.027,0.044,0.019};

podaj zakres  osi OX;

odx=0;
dox=130;

podaj zakres osi OY;

ody=0;
doy=13;

podaj opis osi;

opx="c[kg/(m^3)]";
opy="α[ °]";

podaj współrzędne przecięcia sie osi;

oox=0;
ooy=0;

podaj podziałkę osi OX i OY;

nx=8;
ny=1;

procedura;

RegEfektywna[X_,Y_,EX_,EY_]:=Module[{n,α ,S,W,a,b,ab,W1, σa,σb,h,XYERR,p1,p2,g,f,T,r},n=Length[X];α = Abs[(Y[[n]] -Y[[1]])/(X[[n]]-X[[1]])] ;S = Sqrt[α ^2EX^2+ EY^2] ;W=1/S^2; h=Solve[{(-(X/S)).((-b-a X+Y)/S)+((-b-a X+Y)/S).(-(X/S))==0,(-(1/S)).((-b-a X+Y)/S)+((-b-a X+Y)/S).(-(1/S))==0},{a,b}]  //Flatten ;W1 = ((∑_(i=1)^n)W[[i]]) (∑_(i=1)^n)W[[i]] (((X[[i]]))^2)-((((∑_(i=1)^n)W[[i]] X[[i]]))^2) ; σa=(Sqrt[(((∑_(i=1)^n)W[[i]])/W1)]);σb=σa (Sqrt[(((∑_(i=1)^n)W[[i]] (((X[[i]]))^2))/((∑_(i=1)^n)W[[i]]))]);Needs["ErrorBarPlots`"] ;
XYERR = Table[{{X[[i]],Y[[i]]},ErrorBar[EX[[i]],EY[[i]]]},{i,1,n}] ;f=Max[x];ab={a,b}/.h//Flatten;r=((∑_(i=1)^n)((X[[i]]-1/n(∑_(i=1)^n)X[[i]])(Y[[i]]-1/n(∑_(i=1)^n)Y[[i]])))/((Sqrt[(∑_(i=1)^n)(((X[[i]]-1/n(∑_(i=1)^n)X[[i]]))^2)])(Sqrt[(∑_(i=1)^n)(((Y[[i]]-1/n(∑_(i=1)^n)Y[[i]]))^2)]));
p1 = Plot[ab[[1]] x + ab[[2]],{x,odx,dox}] ;
p2 = ErrorListPlot[XYERR] ;g=Show[{p1,p2},ImageSize->400, AxesLabel->{opx,opy},PlotRange->{{odx,dox},{ody,doy}},AxesOrigin->{oox,ooy},Ticks->{Table[i nx,{i,odx/nx,dox/nx}],Table[i ny,{i,ody/ny,doy/ny}]}];T=TableForm[{{ab[[1]]//N,ab[[2]]}//N,{σa//N,σb//N}},TableHeadings->{{"wartość","niepewność"},{"    a","    b"}}];
Column[{r,"","",T,"","",g}]]

wykonaj regresję;

RegEfektywna[x,y,ex,ey]

LITERATURA:
- Józef K. Mościcki,"Wstęp do analizy i redukcji danych doświadczalnych dla studentów w I Pracowni Fizycznej"
- http://pl.wikipedia.org/wiki/Wsp%C3%B3%C5%82czynnik_korelacji_Pearsona

Andrzej Syrwid
Fizyka teoretyczna I rok, studia pierwszego stopnia
Wydział Fizyki, Astronomii i Informatyki Stosowanej
Uniwersytet Jagielloński
Kraków 2011