Formel umwandeln

fabilazar

Mitglied
Hallo,
wie kann ich einen Polynom (beliebig, muß für jeden Grad passen)
z.B. 1/2x^4-3x^3+2x^2+11x-6 in einen ausführbaren PHP-Code in diesem Fall: 1/2*pow($x,4)-3*pow($x,3)+2*pow($x,2)+11*$x-6 umwandeln?
Gruss
 
Es kommt ganz darauf an, wie die Formel lautet. Wenn sie tatsächlich so aussieht:
Code:
 1   4      3      2           
???·x  - 3·x  + 2·x  + 11·x - 6
 2
entspricht sie deinem Vorschlag; besser wäre jedoch:
PHP:
0.5*pow($x,4) - 3*pow($x,3) + 2*pow($x,2) + 11*$x - 6
Wenn sie jedoch so aussieht:
Code:
               1               
???????????????????????????????????
    4      3      2            
 2·x  - 3·x  + 2·x  + 11·x - 6
entspricht sie
PHP:
1 / ( 2*pow($x,4) - 3*pow($x,3) + 2*pow($x,2) + 11*$x - 6 )
 
Ja, so soll die Formel umgesetzt werden damit ich mit ihr in meinem PHP-Code arbeiten kann. Aber ich weiß nicht wie ich sie in diese Schreibweise kriege
zu meinem Beispiel: so müßte sie im Endeffekt aussehen
1/2*pow($x,4)-3*pow($x,3)+2*pow($x,2)+11*$x-6
aber wie kriege ich sie so hin?
Gruß
 
Achso, nein das hast du falsch verstanden, oder ich habe es schlecht erklärt!
Diese Umwandlung muss auf jeden beliebigen Polynom angewendet werden können! D.h. Ich gebe einen Polynom in ein Textfeld ein, und muß dann diesen in PHP Code umwandeln. Keine Ahnung wie mit ereg_replace oder so was ähnlichem
Weil ich danach mit dieser Funktion weiterarbeiten will bzw. muß. Das kriege ich nicht gebacken :(
Gruß
 
Ach so, du möchtest eine Eingabe in eine mathematische Formel umformen. Das könnte tatsächlich kompliziert werden.

Ich wüsste derzeit nicht, wie so etwa am besten zu realisieren wäre. Reguläre Ausdrücke wären eine Möglichkeit, allerdings würden diese sicherlich schnell recht komplex werden. Vielleicht könntest du auch mit MathML arbeiten.
 
Die schmutzige Variante mit eval und nur für den sehr konkreten Ausdruck ohne Leerzeichen:
PHP:
<?
    //Formel aus Textfeld:
    $s="1/2x^4-3x^3+2x^2+11x-6";
    
    $p=preg_replace("/(.*?)x\\^{0,1}(.*?)([+-]{1})/",
            "\\1*pow(\$x,\\2)\\3",
            $s);

    $p=preg_replace('/pow\(\$x,\)/','$x',$p);

    echo $s;
    echo "<br>\n";
    echo $p;
    echo "<br>\n";

    for ($x=0; $x<10;$x++) {
        eval('$y='.$p.';');
        echo "<br>\n";
        echo 'x='.$x.'; y='.$y;
    }
?>
Mit [phpf]preg_match[/phpf] sollte es allerdings auch möglich sein, die einzelnen Elemente (Exponent und Multiplikator) in ein Array zu schreiben und explizit ohne eval mit den Funktionen zu arbeiten. Hier ist nämlich die große Gefahr, dass der User alles eingeben kann, auch vollständigen PHP-Code, und damit in Deinem Skript machen kann, was er will.

Gruß hpvw
 
Leicht verbessert, wenn auch nicht besonders schön:
PHP:
<?
    //Formel aus Textfeld:
    $s="x^2+x+1";
    //$s="1/2x^4-3x^3+2x^2+11x-6";
    $p=preg_replace("/(.*?)x\\^{0,1}(.*?)([+-]{1})/",
            "\\1*pow(\$x,\\2)\\3",
            $s."+0");

    $p=preg_replace('/pow\(\$x,\)/','$x',$p);

    $p=preg_replace('/pow\(\$x,\)/','$x',$p);

    $p=preg_replace('/\+\*pow/','+pow',$p);
    $p=preg_replace('/\-\*pow/','-pow',$p);

    $p=preg_replace('/\+\*\$x/','+$x',$p);
    $p=preg_replace('/\-\*\$x/','-$x',$p);

    $p=preg_replace('/^\*pow/','pow',$p);

    $p=preg_replace('/^\*\$x/','$x',$p);

    echo $s;
    echo "<br>\n";
    echo $p;
    echo "<br>\n";

    for ($x=0; $x<10;$x++) {
        eval('$y='.$p.';');
        echo "<br>\n";
        echo 'x='.$x.'; y='.$y;
    }
?>
 
Ja, das sieht gut aus :)
Du hättest nicht zufällig Lust mir bei meinem PHP-Problem(Aufgabe) zu helfen
Und zwar muss ich bis heute Abend eine PHP-Aufgabe lösen, die es in sich hat und mit der ich große Probleme habe.
Die Aufgabe lautet ein Programm zu schreiben das aus einem Polynom die entsprechende Kurve berechnet und darstellt.
Also ich würde mich dafür natürlich revanchieren!
ich habe dir eine persönliche Nachricht geschickt.
mfg
 
Zurück