Suche Formel
Michael W.
- php
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.
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
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
Hallo,
hier die tabelle:
x a
09 10
10 12
11 14
12 16
13 18ich 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
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
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