Registriert seit: 8. Mai 2006
12 Beiträge
|
Bisektion - Ein Verfahren zur Nullstellenberechnung
8. Mai 2006, 12:55
BITTE NICHT ZURÜCKSCHRECKEN VOR DEM LANGEN TEXT IST SEHR WICHTIG!!!!
Hallo an alle!
Ich komme hier echt ins schwitzen und weiß nicht mehr weiter...
Und zwar habe ich die Aufgabe bis zum 15.5.2006 ein Delphi Programm abzugeben,
bei dem das Verfahren der Bisektion angewandt wird um die Nullsetllen zu berechnen...
Unten habe ich als Dateianhang ein Screenshot meines Programmes gemacht...
Das einzige Problem ist das ich den "Rechne"- Button nicht hinbekomme...
Naja was soll ich genau machen? Ich versuch es mal zu erklären und ich hoffe, dass mir dann jemand weiterhelfen kann!
Also wie man auf dem Bild erkennen kann ist das Programm nur für Funktionen bis zum 4. Grad gedacht...
Die ersten 5 Edit Felder sind halt für die Eingabe der Funktion...
Die 2 darunter sind für die Intervallgrenzen
Variablen habe ich so definiert:
a,b,c,d,e,f,g,y,z,:double; //a=Intervallgrenze links; b=Intervallgrenze rechts; c,d,e,f,g=Zahlen in den Edit-Feldern der Funktion; y,z=y-Werte
So wenn man die Funktionswerte und die Intervallgrenzen eingesetz hat soll der Rechnen...
Dazu soll der die Intervallgrenzen a und b jeweils in die Funktion einsetzen...
Dazu habe ich die Variablen y und z definiert (siehe oben)
Das sieht im Programm dann so aus:
a:=strtofloat(edit6.Text); //a bekommt die Zahl aus dem Edit6-Feld zugeordnet
b:=strtofloat(edit7.Text); //b bekommt die Zahl aus dem Edit7-Feld zugeordnet
c:=strtofloat(edit1.Text); //c bekommt die Zahl aus dem Edit1-Feld zugeordnet
d:=strtofloat(edit2.Text); //d bekommt die Zahl aus dem Edit2-Feld zugeordnet
e:=strtofloat(edit3.Text); //e bekommt die Zahl aus dem Edit3-Feld zugeordnet
f:=strtofloat(edit4.Text); //f bekommt die Zahl aus dem Edit4-Feld zugeordnet
g:=strtofloat(edit5.Text); //g bekommt die Zahl aus dem Edit5-Feld zugeordnet
y:=(c*a*a*a*a)+(d*a*a*a)+(e*a*a)+(f*a)+(g);
z:=(c*b*b*b*b)+(d*b*b*b)+(e*b*b)+(f*b)+(g);
So bin hier hin hab ich kein Problem!
So jetzt setzt der die Werte ja bei y und z ein un rechnet das... Dann hat er für y und z zwei Werte die er auf die Vorzeichen untersuchen soll.... Also Positiv oder Negativ...
Das hab ich so gemacht...
if (y>0) and (z<0) or (z>0) and (y<0) then <-- wenn dieses Zutrifft soll er weiterrechnen, indem er das Intervall von a und b teilt....
also: (a+b)/2...
So für diese Intervalltrennung hab ich auch ne Variable p definiert!
also p:=((a+b)/2)
So und dieses p soll er jetzt wieder mit y und z vergleichen...
Wenn dieses dann wieder unterschiedliche Vorzeichen haben soll der das Intervall wieder teilen und wieder auf die Vorzeichen überprüfen und immer so weiter...
Hier fangen die Probleme an! Ich hab keine Ahnung wie ich das im Programm machen soll... Irgendwie mit einer Schleifenform...
Die Schleife muss das intervall immerteilen und das neue P mit den werten davor vergleichen!
Außerdem fehlt mir noch eine Abbruchbedingung!
HOFFE MIR KANN JEMAND HELFEN! DANKE!
|