Hiperboliczna metoda Najmniejszych Kwadratów wykorzystuje jako funkcję aproksymującą - funkcję hiperboliczną
\(\displaystyle{ f(x) =a + \frac{b}{x} \ \ (1) }\)
Ten rodzaj aproksymacji stosuje się, gdy dane dążą do asymptot poziomych lub pionowych.
Przed znalezieniem i rozwiązaniem układu równań normalnych - linearyzujemy funkcję \(\displaystyle{ (1) }\) za pomocą podstawień:
\(\displaystyle{ F(x)= f(x), \ \ \alpha =a, \ \ \beta = b, \ \ }\) i \(\displaystyle{ X = \frac{1}{x}. }\)
Otrzymujemy funkcję liniową: \(\displaystyle{ F(x) = \alpha + \beta\cdot X, }\) przekształcamy współrzędne \(\displaystyle{ (x_{i}, y_{i}, ) }\) na \(\displaystyle{ \left(\frac{1}{x_{i}} , y_{i} \right), \ \ i=1,2,...,n.}\)
Program w MATLAB
Kod: Zaznacz cały
function hipmnk(x,y)
% Hiperboliczna Metoda Najniejszych Kwadratów
n =length(x);
n=length(y);
z=ones(size(x));
z=z./x;
sumz=sum(z);
sumy=sum(y);
sumz2=sum(z.*z);
sumzy=sum(z.*y);
b=(n*sumzy-sumz*sumy)/(n*sumz2-sumz^2);
a=(sumz2*sumy-sumzy*sumz)/(n*sumz2-sumz^2);
disp(' Hiperboliczna Metoda Najmniejszych Kwadratów ')
fprintf('a=%12.6f\n',a)
fprintf('b=%12.6f\n',b)
disp('____________________________________________________________')
disp(' xi yi a+b/xi a+b/xi |yi-(a+b/xi)|')
disp('_____________________________________________________________')
for i=1:n
yh=a+b/x(i);
err(i)=abs(yh-y(i));
fprintf('%6.2f %6.2f %6.2f %12.6f %12.6f\n',x(i),y(i),z(i),yh,err(i))
end
Kod: Zaznacz cały
>> x=[1 3 4 6 9 15];
>> y=[4.0 3.5 2.9 2.5 2.75 2];
>> hipmnk(x,y)
Hiperboliczna Metoda Najmniejszych Kwadratów
a= 2.364128
b= 1.797526
____________________________________________________________
xi yi a+b/xi a+b/xi |yi-(a+b/xi)|
_____________________________________________________________
1.00 4.00 1.00 4.161654 0.161654
3.00 3.50 0.33 2.963304 0.536696
4.00 2.90 0.25 2.813510 0.086490
6.00 2.50 0.17 2.663716 0.163716
9.00 2.75 0.11 2.563853 0.186147
15.00 2.00 0.07 2.483963 0.483963