hi,
ich möchte ein Näherungsverfahren zur Nullstellenbestimmung programmieren!
f(x)=1/16*x³+x-2
nun sollen zwei werte eingelesen werden und wenn sie nicht gleich null sind sollen diese x-Werte gemittelt werden (x1+x2)/2=x und dann soll wieder geguckt werden wie der Kunktionswert ist. Danach soll dann (x1+x)/2 oder (x2+x)/2 je nach dem ob x näher an x1 oder an x2 liegt! Dieser Vorgang soll dann z.B 30 durchgeführt werden, wenn vorher nicht glatt null herauskommt!
Wie mache ich das mit einer Schleife, da komme ich nicht so klar mit, alles einzelnd habe ich schon hinbekommen mit zig if-sätzen!
Quelltext
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:
| {erstmal würde ich eine Funktion programmieren, damit ich den Funktionwert berechnen kann} function f(x:real): real; BEGIN result:=1/16*x*x*x+x-2; END;
//dann kommt die eingabe, rechnung
procedure TForm1.Button1Click(Sender: TObject); var i:integer; x,x1,x2,d : real; begin x1:= strtoint (edit1.text); x2:= strtoint (edit2.text);
WHILE f(x) <> 0 DO BEGIN x:= (x1+x2)/2
Ich weiss nicht wie es weiter gehen soll, so dass es höchstens auch nur 30 mal durchläuft?
if f(x) > 0 THEN DO BEGIN x1:= x ELSE x2:= x; END; // aber dass halbieren und umschreiben muss ja dann 30 mal klappen und nicht nur mit x1 und x2! |