Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Newton-Verfahren und Abweichungen (https://www.delphipraxis.net/190279-newton-verfahren-und-abweichungen.html)

xVaskii 19. Sep 2016 18:57

Delphi-Version: 7

Newton-Verfahren und Abweichungen
 
Hey Community.

Wollte wissen, wie ich in meinem momentanen Programm es so machen kann, dass mit dem eps Wert die jeweilig eingetragene (im Edit Feld) Zahl von "x" und "xalt" ausgewählt werden. Also sobald die Abweichung den Wert beträgt, soll die Schleife aufhören.

Danke

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, math, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Image2: TImage;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Button1: TButton;
    Edit7: TEdit;
    Memo1: TMemo;
    Edit3: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    procedure Button1Click(Sender: TObject);
 
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
  function Newton(a,b,c,d,e,x:real):real;

  begin
    result:=x-((a*(x*x*x*x)+b*(x*x*x)+c*(x*x)+d*x+e) / (4*a*(x*x*x)+3*b*(x*x)+2*c*x+d));
  end;



{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,x,ergebnis,xalt,eps: real;
count : integer;
begin
  count:= 1;
  xalt:= 0;

  a:=strtofloat(edit1.text);
  b:=strtofloat(edit2.text);
  c:=strtofloat(edit3.text);
  d:=strtofloat(edit4.text);
  e:=strtofloat(edit5.text);
  x:=strtofloat(edit6.text);
  eps:=strtofloat(edit7.text);

  repeat

    xalt:= x;
    ergebnis:=Newton(a,b,c,d,e,x);
    x:= ergebnis;
    memo1.lines.add(inttostr(count) +': ' +floattostr(ergebnis));
    count := count+1;

  until count =101;
  if xalt >= eps then
  label8.Caption := floattostr(x);
end;

end.

Mathematiker 19. Sep 2016 20:05

AW: Newton-Verfahren und Abweichungen
 
Hallo,
Code:
eps:=strtofloat(edit7.text);
  repeat
    xalt:= x;
    ergebnis:=Newton(a,b,c,d,e,x);
    x:= ergebnis;
    memo1.lines.add(inttostr(count) +': ' +floattostr(ergebnis));
    count := count+1;
  until abs(x-xalt)<eps;
Beste Grüße
Mathematiker

xVaskii 19. Sep 2016 20:19

AW: Newton-Verfahren und Abweichungen
 
Es werden trotzdem 100 angezeigt. Die letzten 80 stk wiederholen sich.

Ne Idee?

jfheins 19. Sep 2016 22:39

AW: Newton-Verfahren und Abweichungen
 
Wie groß ist denn dein eps? Wenn das zu groß ist, macht er natürlich alle 100 Iterationen. Du kannst ja mal schauen, was am Ende noch als Differenz bleibt.
Intuitiv geraten wäre alles kleiner als 1e-9 sinnlos.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz