Geometrik ortalama hesabı
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Geometrik ortalama hesabı
geometrik ortalam hesabı delphide hazır bir function olarak varmıdır ?
veya bunu nerden bulabilirim.
Hesap şu : 10000,30000,40000,20000,50000 değerlerimiz var.
Bu değerlerin geometrik ortalaması şu şekilde hesaplanır.
(10000*30000*40000*20000*50000) çarpımları alınır , bunun 5 inci dereceden kökünü aldığımızda geometrik ortalamasının almmış oluruz.
Delphide kod ile yapmaya çalıştım ama , taşma hatası oldu , kısa bir yolu olabilmeli diye düşünüyorum. Log vs gibi.
Teşekkürler.
veya bunu nerden bulabilirim.
Hesap şu : 10000,30000,40000,20000,50000 değerlerimiz var.
Bu değerlerin geometrik ortalaması şu şekilde hesaplanır.
(10000*30000*40000*20000*50000) çarpımları alınır , bunun 5 inci dereceden kökünü aldığımızda geometrik ortalamasının almmış oluruz.
Delphide kod ile yapmaya çalıştım ama , taşma hatası oldu , kısa bir yolu olabilmeli diye düşünüyorum. Log vs gibi.
Teşekkürler.
Şöyle bir kod yazdım.
Kullanımı:
Kolay gelsin.
Kod: Tümünü seç
function GeometrikOrtalama(const Values: array of Single): Single;
var
Index: Integer;
begin
// Başlangıç değeri çarpımı etkilememek için 1'e eşitlenir
Result:= 1;
// Open array parametre kullandığımızdan istediğimiz kadar
// değeri parametre olarak geçebiliriz.
// Çarpımlar hesaplanır
for Index:= 0 to High(Values) do
Result:= Result * Values[Index];
// Eleman sayısı kadar kökü alınır
Result:= Power(Result, 1 / (High(Values) + 1));
end;
Kod: Tümünü seç
GeometrikOrtalama([44.2, 23.3, 33.1, .......]);
En son fduman tarafından 17 Mar 2005 03:17 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Formülünüz doğru fakat
sayılar 5-6 tane değil , 50 tane bile olabiliyor , bu sebeple çarpım çok büyük oluyor ve taşma hatasına sebep oluyorr.
http://bilgi.umedia.org.tr/yayin/tejm/i ... #geometrik
adresindeki kısma bakabilirseniz , Log olarak da hesaplanabilir diyor fakat ben LOG konusuna hiç hakim değilim.
bu konuda yardımcı olabilirmisiniz.
teşekkürler
http://bilgi.umedia.org.tr/yayin/tejm/i ... #geometrik
adresindeki kısma bakabilirseniz , Log olarak da hesaplanabilir diyor fakat ben LOG konusuna hiç hakim değilim.
bu konuda yardımcı olabilirmisiniz.
teşekkürler
Bu daha güzel bir formül.
Kodu logaritmik formule göre değiştirirsek:
Kodu logaritmik formule göre değiştirirsek:
Kod: Tümünü seç
function GeometrikOrtalama(const Values: array of Extended): Extended;
var
Index: Integer;
begin
// Başlangıç değeri toplamı etkilememek için 0'a eşitlenir
Result:= 0;
// Logaritmik toplamlar hesaplanır.
for Index:= 0 to High(Values) do
Result:= Result + (Log10(Values[Index]) / (High(Values) + 1));
// Ters logaritması alınır.
Result:= Power(10, Result);
end;