Упражнение 9.
Метод на най-малките квадрати

0 зад. Намерете

({{(Subscript[x, i]), -2, -1, 0, 1, 2, 3}, {(Subscript[y, i]), -4, 15, -9, 10, 7, 6}})

f[x_]=a*x^2+b*x+c;
error[a_,b_,c_]:=(a*4+b*(-2)+c-(-4))^2+(a*1+b*(-1)+c-15)^2+(a*0+b*0+c-(-9))^2+(a*1+b*1+c-10)^2+(a*4+b*2+c-7)^2+(a*9+b*3+c-6)^2;
DerrorA=D[error[a,b,c],a];
DerrorB=D[error[a,b,c],b];
DerrorC=D[error[a,b,c],c];
sol=Solve[{DerrorA==0,DerrorB==0,DerrorC==0},{a,b,c}]

f[x_]=f[x]/.sol[[1]];
plotData=ListPlot[{{-2,-4},{-1,15},{0,-9},{1,10},{2,7},{3,6}}];
plotFunction=Plot[f[x],{x,-3,3}];
Show[plotData,plotFunction]

1 зад. В таблицата са дадени данни за това как нивото на въглеродния диоксид в атмосферата се е изменяло в периода 1980-2000

years = {1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000};
co2 = {338.7,341.1,344.4,347.2,351.5,354.2,356.4,358.9,362.6,366.6,369.4};
plotData = ListPlot[Transpose[{years,co2}],PlotMarkers->●]

(*It is convinient to approximate the data with linear function*)

f[x_]:=a*x+b
Error[a_,b_]:=Sum[(f[years[[i]]]-co2[[i]])^2,{i,1,Length[years]}]
sol=Solve[{D[Error[a,b],a]==0,D[Error[a,b],b]==0},{a,b}];
f[x_]=f[x]/.sol[[1]];
plotFunction=Plot[f[x],{x,1980,2000}];
Show[plotData,plotFunction]

2 зад. Следната таблица съдържа данни за това как се изменя броя на транзисторите в един процесор в хиляди в зависимост от годината:

years = {1971,1972,1974,1978,1982,1985,1989,1993,1997,1999,2000};processors ={2.25,2.5,5,29,120,275,1180,3100,7500,24000,42000};
plotData=ListPlot[Transpose[{years,processors}]]

(*It is convinient to approximate the data with exponential function (ae^bx)*)
(*f[x_]:=a E^(b x)
Error[a_,b_]:=Sum[(f[years[[i]]]-processors[[i]])^2,{i,1,Length[years]}]
sol=Solve[{D[Error[a,b],a]==0,D[Error[a,b],b]==0},{a,b}]*)

(*The system is not linear and because of that it takes ages to compute (if it is even possible)
We linearize the function*)
f[x_]:=a E^(b x)
a=E^c;
(*instead of approximating f[(Subscript[x, i])] with (Subscript[y, i]), we add logs in order to linearize the error*)
Error[a_,b_]:=Sum[(Log[f[years[[i]]]]-Log[processors[[i]]])^2,{i,1,Length[years]}]
sol=Solve[{D[Error[a,b],c]==0,D[Error[a,b],b]==0},{c,b}];
f[x_]=f[x]/.sol[[1]];
plotFunction=Plot[f[x],{x,1980,2001},PlotRange->All];
Show[plotData,plotFunction]

3 зад. Топка е пусната от височина 450m. Нейната височина е измервана през интервали от 1 сек. и резултатите са поместени в таблицата

t={0,1,2,3,4,5,6,7,8,9};
h={450,445,431,408,375,332,279,216,143,61};
data = ListPlot[Transpose[{t,h}]]