twocoders.de
 

programme/php/bisektion/teil.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:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
<?php
$Genauigkeit 
$_POST["Genauigkeit"];
define("STELLEN",$Genauigkeit);
include (
"parser.php");
$Input $_POST["Input"];        //Eingabe  Benutzer
$Min =  $_POST["Min"];            //Intervall Startwert
$Max =  $_POST["Max"];             //Intervall Endwert

$Genauigkeit pow(10,-STELLEN);        //Rundende Stellen
$Epsilon $Genauigkeit/100;     //Rechenggenauigkeit    

$Delta $Max $Min;

while(
$Delta $Epsilon)
{
    
$Grenze = ($Min+$Max)/2;        //Intervallhälfte bestimmen
    
$MinX f($Min,$Input);            //Y-Wert der Funktion an der Stelle der Min Stelle
    
$MaxX f($Max,$Input);            //Y-Wert der Funktion an der Stelle der Max Stelle
    
$GrenzX f($Grenze,$Input);        //Y-Wert der Funktion an der Stelle der Intervallhälfte
    
if(Signumfunktion($MinX) != Signumfunktion($GrenzX))    //Vorzeichen YMin ungleich YGrenz -> NST in Intervallhälfte
        
$Max $Grenze;                    //Maximum als neue Grenze
    
elseif(Signumfunktion($MaxX) != Signumfunktion($GrenzX))    //Vorzeichen YMax ungleich YGrenz -> NST in Intervallhälfte
        
$Min $Grenze;                    //Minimum als neue Grenze
    
else
    {
         echo 
"Keine Nullstelle im angegebenen Bereich";    //Ausgeben es liegt keine NST im angegebenen Bereich
        
exit(); //Programm verlassen    
    
}
    
$Delta $Max $Min;    //Bestimmen wie groß das Intervall ist um mit genauigkeit zu Prüfen
}
$Nullstelle $Grenze;    //Der jetzige Mittelwert ist die gesuchte NST
echo "<hr>";
echo 
"<br>";
echo 
"Nullstelle von f(x)= $Input = ".round($Nullstelle,STELLEN); // Runden mit Ausgabe der Nullstelle

//----------------------------------------Functions--------------------------------------------

function f($x,$Input)
{
     
$Input ereg_replace("x","$x",$Input); //Ersetzen von x durch Wert
    
echo "EingabeErsetzt: ".$Input."--> ";
    echo 
"X: ".$x." ";
     
#Rekursiven Parser aufsetzen
    
$MyStream = new Stream($Input);         
    
$MyScanner = new Scanner($MyStream);     
    
$MyParser = new Parser($MyScanner);  
    
$ExpressionResult = array();        
    
$ExpressionResult $MyParser -> Expression();
    if(
$ExpressionResult[0])
    {
        echo 
"Y: ".$ExpressionResult[1]."<br>";
        return 
$ExpressionResult[1];
    }    
    else
    {
        echo 
"Fehler beim Berechnen des Y-Wertes";
        exit();
    }
}

function 
Signumfunktion($Wert)
{
    if(
$Wert 0)
        return 
1;
    if(
$Wert 0)
        return 
0;
    else
        return -
1;
}
?>