
(* En küçük kareler yöntemi *)
program ekk;
uses
wincrt;
const
max = 20;
type
boyut = 1..max;
dizi = array[boyut] of real;
matris = array[boyut,boyut] of real;
var
n : boyut;
a, b
: real;
apsis , ordinat : dizi;
Procedure DiziGir (var s, t : dizi ; k :
integer);
var
i : integer;
Begin
for i:=1 to k do
begin
WriteLn('x(' ,i, ')' , ' , y(',i,')
sayılarını giriniz :');
readln(s[i],t[i]);
end;
End;
procedure DiziYaz (s, t : dizi; k : boyut);
var
i : boyut;
Begin
for i := 1 to k do
writeLn('(', S[i]:5:2, ',' , T[i]:5:2 , ')' );
writeln
End;
(* Aşağıdaki fonksiyon dizinin terimlerinin toplamını bulur *)
Function DiziTopla (d : dizi; k : boyut): real;
var
i
: boyut;
toplam : real;
Begin
toplam := 0;
for i := 1 to k do
toplam := toplam + d[i];
DiziTopla := toplam
End;
(* Aşağıdaki fonksiyon dizinin aritmetik ortalamasını bulur *)
Function AritmetikOrta (s : dizi; k : boyut): real;
Begin
AritmetikOrta := DiziTopla(s,k)/k ;
End;
(* Aşağıdaki fonksiyon koordinatların çarpımlarının toplamını bulur
: XY *)
Function CarpimlarToplami (s, t : dizi; k : boyut) : real;
var
i
: boyut;
carpimTop : real ;
Begin
carpimTop := 0;
for i
:= 1 to k do
carpimTop := carpimTop + s[i] * t[i];
CarpimlarToplami := carpimTop;
End;
(* Aşağıdaki fonksiyon dizinin terimlerinin karelerinin toplamını
bulur *)
Function KarelerToplami (d : dizi; k : boyut) : real;
var
i
: boyut;
kareler : real ;
Begin
kareler := 0;
for
i := 1 to k do
kareler := kareler + sqr(d[i]);
KarelerToplami := kareler;
End;
(* Aşağıdaki fonksiyon dizinin toplamının karesini bulur
*)
Function ToplaminKaresi (d : dizi; k : boyut) : real;
var
i
: boyut;
toplam : real;
Begin
toplam := 0;
for i := 1 to k do
toplam := toplam + d[i];
ToplaminKaresi := SQR(toplam);
End;
{ Aşağıdaki fonksiyon dizilerin terimlerinin toplamlarının
çarpımını bulur ( Ss[i] )*( St[i]) }
Function ToplamlarCarpimi (s, t : dizi; k : boyut): real;
Begin
ToplamlarCarpimi := DiziTopla(s, k) * DiziTopla(t, k);
End;
(* Aşağıdaki fonksiyon y = a + bX için b katsayısını bulur *)
Function Beta (s, t : dizi; k : boyut): real;
Begin
Beta :=
(CarpimlarToplami(s,t,k) - (ToplamlarCarpimi(s,t,k)/n)) /
(KarelerToplami(s,k) - (ToplaminKaresi(s,k)/n));
End;
(* Aşağıdaki fonksiyon y = a + bX için a katsayısını bulur *)
Function Alfa (s, t : dizi; k : boyut): real;
Begin
Alfa :=
AritmetikOrta(t,n) - b *
AritmetikOrta(s,n);
End;
BEGIN
clrscr;
write('Kaç tane (xi ,yi) noktası var ? ');
repeat
readln(n);
if not (n in [1..max]) then
WriteLn('1..',max, ' arasında bir
sayı girmelisiniz! ');
WriteLn;
write('Kaç tane (xi ,yi) noktası var ? ');
until n in [1..max];
DiziGir(apsis,ordinat,n);
DiziYaz(apsis,ordinat,n);
AritmetikOrta(apsis ,n);
AritmetikOrta(ordinat,n);
b := Beta(apsis,ordinat,n);
a := Alfa(apsis, ordinat,n);
WriteLn('Doğru denklemi : y = ', a:10:5,' + ', b:10:5,'X');
END.