Michael W.: Suche Formel

Hallo,

Ich suche eine Formel für PHP:
es geht um folgendes:

gegeben: (oder auch net gegeben ;-) ) x (von 1-20)
gesucht: a

a muss 10 sein, wenn x 9 ist.
a muss 12 sein, wenn x 10 ist.
hier die tabelle:

x   a
 09  10
 10  12
 11  14
 12  16
 13  18

ich suche jetzt die formel:

a = x + [...] * [...] / [...]

alles klar?

geht das oder ist das unmöglich?
mal was zum tüfteln.

MfG
Michael W.

  1. Hallo,

    hier die tabelle:

    x   a
    09  10
    10  12
    11  14
    12  16
    13  18

    ist die Tabelle da zu Ende? Falls ja: a = x + (x mod 9) + 1

    Gruss
    Thomas

    1. Hallo,

      hier die tabelle:

      x   a
      09  10
      10  12
      11  14
      12  16
      13  18

      Wie groß wird denn die Tabelle?
      Für Computer baut man sowas i.d.R. als Array auf und nicht als Formel, wenn die Anzahl der Werte nicht so groß ist. Das beschleunigt die "Berechnung" ungefähr um Faktor 100 bis 400.

      Wie oft in einem Script wied denn eine entsprechende Wertabfrage gemacht?

      $x[9]=10;
      $x[10]=12;
      $x[11]=14;
      ...

      mit $a=$x[9] kann man es dann wieder abfragen.

      Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
  2. Hallo,

    hier die tabelle:

    x   a
    09  10
    10  12
    11  14
    12  16
    13  18

    ich suche jetzt die formel:

    Das ist jetzt nicht dein Ernst, oder? Was ist das? 4. Klasse Grundschule?

    Überleg doch mal bitte. Was passiert mit a, wenn x um eins größer
    wird? Richtig, a wird um 2 größer.

    Kommen wir für's erste auf sowas:
    a = 2*x

    Das stimmt jetzt aber nicht, weil 2*9=18, 2*10=20, 2*11=22, 2*12=24 usw.
    So, jetzt guckst du dir mal jeweils die Zahlen in deiner Tabelle und
    die hier gerade ausgerechneten Zahlen an. Was denkst du, mußt du zu
    dem 2*x noch dazuzählen oder abziehen, um auf die Zahlen in deiner
    Tabelle zu kommen? Schaffst du das?

    Kleiner Tip: Es sieht dann so aus: a = 2*x + ?
                                 oder: a = 2*x - ?
    Das Fragezeichen soll durch die von dir gerade ermittelte Zahl ersetzt
    werden.

    Grüsse
    Iwemti

  3. Hi Michael,

    ich sag´ Dir nicht nur, wie man die Gleichung für diese eine Tabelle findet, sondern wie man die Gleichung für _alle_ derartigen Gleichungen findet:

    Offensichtlich ist der Graph der Gleichung eine Gerade. D. h. die Funktionsvorschrift lautet:

    f(x)=bx+c.

    Nun suchst Du Dir zwei Punte heraus (zwei reichen, weil wir nur zwei Unbekannte finden wollen:

    (1) 10 = 9b + c
    (2) 12 = 10b + c

    Beide werden nach c aufgelöst und gleich gesetzt:

    9b - 10 = 10b - 12

    und nach b aufgelöst:

    2 = b

    und eingesetzt in Gleichung 1 oder 2 (ist egal, muss ja für beide stimmen:

    10 = 9 * 2 + c

    und aufgelöst nach c:

    c = (-8)

    also lautet Deine gesuchte Gleichung:

    f(x) a = = 2x-8;

    Ich denke, so was lernt man in der 7. Klasse ... und vergißt es nach dem Abitur :-).

    Ciao
    Hans-Peter

  4. Hallo,

    geht das oder ist das unmöglich?
    mal was zum tüfteln.

    Bei Deinem Problem hilft die lineare Regression. Der folgende Code (mal schnell von VB nach PHP portiert) setzt Deine x-Werte in das Array $x und die a-Werte in das Array $y. Heraus kommen die Parameter b und a, fuer die Gleichung y = b * x + a.

    Deine Daten ergeben: y = 2 * x - 8

    <?php

    // PHP-Portierung von
    // http://www.et.fh-merseburg.de/person/meinike/bpoldstuff/tt170898.htm

    $sx=0;
    $sy=0;
    $sz=0;
    $s2=0;
    $s3=0;

    $x=array(9,10,11,12,13);
    $y=array(10,12,14,16,18);
    $n=count($x);

    for($i=0;$i<$n;$i++)
    {
      $sx = $sx + $x[$i];
      $sy = $sy + $y[$i];
      $sz = $sz + $x[$i] * $y[$i];
      $s2 = $s2 + $x[$i] * $x[$i];
      $s3 = $s3 + $y[$i] * $y[$i];
    }

    $b = ($n * $sz - $sx * $sy) / ($n * $s2 - $sx * $sx);
      $a = ($sy - $b * $sx) / $n;
      // Korrelationskoeffizient
      // $r = abs(($n * $sz - $sx * $sy) / sqrt(($n * $s2 - $sx * $sx) * ($n * $s3 - $sy * $sy)));

    if($a>=0)print "y = $b * x + ".abs($a);
    else print "y = $b * x - ".abs($a);

    ?>

    BTW: Der Korrelationskoeffizient $r ist gleich 1, d. h. alle Punkte liegen genau auf der erhaltenen Geraden.

    MfG, Thomas