[php] meerdere malen voortschrijdend gemmidelde berekenen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben bezig om meerdere malen achter elkaar het voortschrijdend gemmidelde te berekenen. Hieronder staan een aantal figuren:

originele data: http://roadtrain.lukkezeh...n%20meter%20per%20seconde

1 keer voortschrijdend gemiddelde 20 samples: http://roadtrain.lukkezeh...er%20per%20seconde&mov=20

2 keer voortschrijdend gemiddelde eerste keer 20 samples tweede keer 10 samples: http://roadtrain.lukkezeh...%20seconde&mov=20&mov1=10


De eerste keer gaat alles goed zoals je kunt zien. Alle waarden op 200 blijven bijvoorbeeld op 200. maar na de tweede keer het voortschrijdend gemmidelde berekenen zitten de waarden plots net iets boven de 100. Hieronder staat mijn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (isset($_GET['mov'])){
            for ($i=0;$i<500;$i++){
                for($ii = 0; $ii<$_GET['mov'];$ii++){
                    $array1[$i] += $array1[$i+$ii];
                }
            $array1[$i] /=$_GET['mov'];
            }   
        }
        if (isset($_GET['mov1'])){
            for ($i=0;$i<500;$i++){
                for($ii = 0; $ii<$_GET['mov1'];$ii++){
                    $array1[$i] += $array1[$i+$ii];
                }
            $array1[$i] /=$_GET['mov'];
            }   
        }


In $array1 zitten nu alle waarden. Ik weet echt totaal niet wat ik fout doe. heeft iemand enig idee?

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Kan je aub ook een deel van een van_dump($array) laten zien en aub [php][/php] tags gebruiken voor PHP code?

{signature}


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Ik zou eens beginnen met wat validatie van je input en alle $_GET's overal-en-nergens te vervangen door een variabele die je eenmalig zet (en meteen checkt/cast naar het juiste type (voor zover dat kan onder php)).

Dan: Je code wordt vele malen beter leesbaar als je zinnige namen gebruikt voor je variabelen. $i, $ii en [$i+$ii] etc. leest nou niet bepaald handig. Ik moet dan ook goed staren voor ik überhaupt betekenis in je code zie.

Als bij een verdubbeling van de samples een halvering van de waardes optreedt; dan lijkt het me dat je ergens met een verkeerde (of ongecorrigeerde) factor deelt? Als ik de samples namelijk nogmaals verdubbel halveren je waardes weer en er lijkt een lineair verband te zijn ;).

Wat heb je zelf eigenlijk gedaan om dit probleem op te lossen? Heb je al eens gedebugged en gekeken of alle variabelen bijvoorbeeld bevatten wat je denkt dat ze bevatten? Debuggen: Hoe doe ik dat?

[ Voor 16% gewijzigd door RobIII op 21-04-2010 20:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Zo op het eerste gezicht ontbreekt er een '1'. Maar eigenlijk kun je beter dit gewoon weggooien, een goede tutorial erbij pakken om echt php te leren, en dit herschrijven met een functie... :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok, ik heb een nieuw script gemaakt zodat er een tabel verschijnt. dit is de link:

http://roadtrain.lukkezeh...asked=Speed&name=Snelheid in meter per seconde&mov=20&mov1=10

source code:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
<?php
    $vehicle = new Database($Database_host, $Database_name, $Database_user, $Database_password, 'Roadtrain');
    $Vehicle = $_GET['vehicle'];
    $Asked = $_GET['asked'];
    $Name = $_GET['name'];
    if (($return = $vehicle->Return_column_where ('Vehicleid', $Vehicle, $Asked)) != 0){
        $aantal = 100;
        for ($ii=0; isset($return[$ii]); $ii++){
            $aantal = $ii;
        }
        for ($i=500; $i>=0; $i--){
            $array[$i] = $return[$aantal-$i];
        }
        for ($i=500; $i>=0; $i--){
            $array1[$i] = $array[500-$i];
            $arraya[$i] = $array1[$i];
        }
        if (isset($_GET['mov'])){
            for ($i=0;$i<500;$i++){
                for($ii = 0; $ii<$_GET['mov'];$ii++){
                    $array1[$i] += $array1[$i+$ii];
                }
            $array1[$i] /=$_GET['mov'];
            $arrayb[$i] = $array1[$i];
            }   
        }
        if (isset($_GET['mov1'])){
            for ($i=0;$i<500;$i++){
                for($ii = 0; $ii<$_GET['mov1'];$ii++){
                    $array1[$i] += $array1[$i+$ii];
                }
            $array1[$i] /=$_GET['mov'];
            $arrayc[$i] = $array1[$i];
            }   
        }
        print '<table width="300" border="1" cellspacing="0" cellpadding="0">';
 for ($i=0;$i<500;$i++){
 print '
  <tr>
    <td>' . $i . '</td>
    <td>' . $arraya[$i] . '</td>
    <td>' . $arrayb[$i] . '</td>
    <td>' . $arrayc[$i] . '</td>
  </tr>
';
 }
    print '</table>';   
        
    }
?>



Ik ben nog aan het kijken wat ik hier uit kan concluderen.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op woensdag 21 april 2010 @ 20:34:
Zo op het eerste gezicht ontbreekt er een '1'. Maar eigenlijk kun je beter dit gewoon weggooien, een goede tutorial erbij pakken om echt php te leren, en dit herschrijven met een functie... :p
Wat bedoel je met "er ontbreekt een 1"

Ik heb deze code geschreven om snel even wat grafieken te plotten zodat ik een afstandbestuurbare auto makkelijker kan afstellen. Hierdoor ziet de code er dus niet netjes uit.

Acties:
  • 0 Henk 'm!

  • Raynman
  • Registratie: Augustus 2004
  • Laatst online: 10:14
Verwijderd schreef op woensdag 21 april 2010 @ 20:37:
[...]

Wat bedoel je met "er ontbreekt een 1"
Bij de deling in de tweede berekening gebruik je $_GET['mov'], dat moet misschien $_GET['mov1'] zijn? (ik heb het verder niet heel goed bekeken)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
bedankt. Ik denk dat ik het nu wel erkend krijg.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 21 april 2010 @ 20:35:

Ik ben nog aan het kijken wat ik hier uit kan concluderen.
Again: niet gaan zitten code staren maar debuggen! Debuggen: Hoe doe ik dat?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Ik zou daar eigenlijk uit concluderen dat je maar beter een goede php ide kan nemen met debugger. Dan hoef je niet moeilijk te doen bij het debuggen, maar kun je op een breakpoint gewoon even de variabelen nakijken...
Verwijderd schreef op woensdag 21 april 2010 @ 21:09:
Ik denk dat ik het nu wel erkend krijg.
offtopic:
Zo op het eerste gezicht ontbreekt er een 'w'... 8)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1