Merhabalar,
öncelikle size yapmak istediğim modülü anlatmak istiyorum, Lineer Regresyon hesaplayan bir modül yazarak grafiklerimde
oluşacak bir dalgalanmayı eğim ve sınır değerlerini kontrol ederek kendime mail ile uyarı verdirmeyi hedefliyorum. Regresyonu
ve eğimi hesaplıyorum ancak veri tabanımdan çektiğim veriyi diziye atamıyorum ben son 300 değeri sokmak istiyorum diziye ancak
sadece 1 tabe değer alıyor.
Kodu Sizler ile Paylaşıyorum Şimdiden Yadımlarınızdan dolayı Teşekkür eder Saygılarımı Sunarım.
Kod:
<?php
include("ayar.php");
function linear_regression($x, $y)
{
// sayı noktalarını hesapla
$n = count($x);
// Her iki nokta dizisinin aynı boyutta olduğundan emin ol...
if ($n != count($y)) {
trigger_error("linear regression (): Koordinat dizilerindeki eleman sayısı uyuşmuyor.", E_USER_ERROR);
}
// toplamları hesapla
$x_sum = array_sum($x);
$y_sum = array_sum($y);
$xx_sum = 0;
$xy_sum = 0;
for ($i = 0; $i < $n; $i++) {
$xy_sum += ($x[$i] * $y[$i]);
$xx_sum += ($x[$i] * $x[$i]);
}
// eğimi hesapla
$m = (($n * $xy_sum) - ($x_sum * $y_sum)) / (($n * $xx_sum) - ($x_sum * $x_sum));
// engellemeyi hesapla
$b = ($y_sum - ($m * $x_sum)) / $n;
// sonuç döndür
return array("egim" => $m, "sınır" => $b);
}
$vQuery = $db->query("SELECT * FROM `datalog` WHERE `sensors_unique_id` = 'DE33023' ORDER BY id DESC LIMIT 11", PDO::FETCH_ASSOC);
$vQuery->execute();
if ($vQuery->rowCount()) {
foreach ($vQuery as $row) {
$resultVisco = $row["viskozite"];
$resultVisco2 = $row["temperature"];
echo var_dump(linear_regression($resultVisco ,$resultVisco2));
}
}
//print_r($resultVisco)."-->"."<br>";
echo ("Eğim Hesaplama -> Örnekte viskozite ve sıcaklık kullanılmıştır<br>");
echo "MANUAL DEĞERLER --->";
$ornekSinir = array("1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.9", "1.7");
$ornekSinir2 = array("1.3", "1.1", "1.0", "1.0", "1.5", "1.0", "1.0", "1.0", "1.0", "1.9", "1.7");
//print_r($ornekSinir);
echo "--> Manual Değerler <--"."<br>"."<br>";
echo var_dump(linear_regression($ornekSinir2 , $ornekSinir));
echo "<br>"."<br>";
echo "--> OTONOM Değerler <--"."<br>"."<br>";
echo "<br>"."<br>";
print_r($resultVisco);
echo "<br>"."<br>";
print_r($resultVisco2);
/*
*/
Ekran Çıktısı Bu şekildedir.
Warning: array_sum() expects parameter 1 to be array, string given in /var/www/localhost.com/httpdocs/reg_ciz.php on line 26
array(2) { ["egim"]=> float(2.3333333333333) ["sınır"]=> float(0) } Eğim Hesaplama -> Örnekte viskozite ve sıcaklık kullanılmıştır
MANUAL DEĞERLER --->--> Manual Değerler <--
array(2) { ["egim"]=> float(0.8655462184874) ["sınır"]=> float(0.083193277310924) }
--> OTONOM Değerler <--
36.9531
70.3125
---------> Çözüm <---------
Kod:
$vQuery = $db->query("SELECT * FROM `datalog` WHERE `sensors_unique_id` = 'DE33023' ORDER BY id DESC LIMIT 11", PDO::FETCH_ASSOC);
$vQuery->execute();
if ($vQuery->rowCount()) {
foreach ($vQuery as $row) {
$resultVisco = $row["viskozite"];
$resultVisco2 = $row["temperature"];
echo var_dump(linear_regression($resultVisco ,$resultVisco2));
}
}
//print_r($resultVisco)."-->"."<br>";
echo ("Eğim Hesaplama -> Örnekte viskozite ve sıcaklık kullanılmıştır<br>");
echo "MANUAL DEĞERLER --->";
$ornekSinir = array("1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.0", "1.9", "1.7");
$ornekSinir2 = array("1.3", "1.1", "1.0", "1.0", "1.5", "1.0", "1.0", "1.0", "1.0", "1.9", "1.7");
//print_r($ornekSinir);
echo "--> Manual Değerler <--"."<br>"."<br>";
echo var_dump(linear_regression($ornekSinir2 , $ornekSinir));
echo "<br>"."<br>";
echo "--> OTONOM Değerler <--"."<br>"."<br>";
echo "<br>"."<br>";
print_r($resultVisco);
echo "<br>"."<br>";
print_r($resultVisco2);
bu kısmı şu şekilde değiştirerek ;
Kod:
//------------------------------------------------------------------------------------------------------------------------//
//************************************************2.Sorgu*****************************************************************//
//------------------------------------------------------------------------------------------------------------------------//
$sorgu = $db->query("SELECT viskozite FROM `datalog` WHERE `sensors_unique_id` = 'DE33023' ORDER BY id DESC LIMIT 300");
$sorgu->execute();
$resultVisco = $sorgu->fetchAll(PDO::FETCH_COLUMN);
echo("Viskozite Değerlerinin Son 10 Datası Dizi Halinde Listelenmiştir.");
echo("<br><br><br>");
print_r($resultVisco);
echo("<br><br><br>");
//------------------------------------------------------------------------------------------------------------------------//
//************************************************2.Sorgu*****************************************************************//
//------------------------------------------------------------------------------------------------------------------------//
$sorgu2 = $db->query("SELECT temperature FROM `datalog` WHERE `sensors_unique_id` = 'DE33023' ORDER BY id DESC LIMIT 300");
$sorgu2->execute();
$resultVisco2 = $sorgu2->fetchAll(PDO::FETCH_COLUMN);
echo("Su Değerlerinin Son 10 Datası Dizi Halinde Listelenmiştir.");
echo("<br><br><br>");
print_r($resultVisco2);
echo("<br><br><br>");
echo("<center><h1>"."Viskozite ve Su Değerleri Alınarak Lineer Regresyon Hesaplanmıştır.Veri Sayısı --->10"."</h1></center>");
echo("<br><br><br>");
echo var_dump(linear_regression($resultVisco, $resultVisco2));
sorunu çözmüş bulunmaktayım. Belki birinin işine yarar diye açıklamış olayım iyi çalışmalar.
Son düzenleme: