Autor Beitrag
dominikb
Hält's aus hier
Beiträge: 8

Win XP SP2
Borland Delphi Pascal 6
BeitragVerfasst: Do 19.10.06 16:24 
Hallo zusammen,

ich muss für den Info-Unterricht Nullstellen der Funktion f(x):=(x*x+1)*sin(x)
rekursiv berechnen. Zuerst muss ich ja eine Wertetabelle erstellen in der jedem x ein f(x) zugeordnet wird. Und da wo ein Vorzeichenwechsel stattfindet sind die Nullstellen (so hab ich das glaub ich verstanden) und ich hab keine Ahnung wie ich das mit dem Vorzeichenwechsel hinkriegen soll.

Kann mir da jemand helfen???
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 19.10.06 16:27 
also die Nullstellen sind bei k*pi wobei k eine ganze Zahl ist also k element Z.
Die Gleichung ist ja schon in Linearfaktoren zerlegt, das ist irgendwie total unlustig.
dominikb Threadstarter
Hält's aus hier
Beiträge: 8

Win XP SP2
Borland Delphi Pascal 6
BeitragVerfasst: Do 19.10.06 16:34 
was???????????????????
bitte kein mathe...
ich brauch ein Lösungsvorschlag...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 19.10.06 16:37 
@user profile iconAllesquarks
Ja, aber das soll ja mit einem Programm berechnet werden, oder? Dass Ausrechnen kein Problem ist, ist ne ganz andere Sache...

Ich häng mal ein Programm von mir an, das ich vor Jahren geschrieben habe. Es ist eine Implementierung des Newton-Verfahrens. Der Quelltext sieht zwar total unordentlich aus, weil ich da noch nicht lange programmiert habe, aber naja.

Das Newton-Verfahren berechnet Nullstellen rekursiv.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von jaenicke am Do 19.10.06 16:39, insgesamt 1-mal bearbeitet
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 19.10.06 16:39 
Hast du doch schon gesagt: Wenn davor positiv und danach negativ dann Nullstelle. Wenn das nicht deine erste Informatikstunde ist oder du noch kein Englisch hattest ist das eine Anleitung.
dominikb Threadstarter
Hält's aus hier
Beiträge: 8

Win XP SP2
Borland Delphi Pascal 6
BeitragVerfasst: Do 19.10.06 16:42 
@ Allesquarks: Ich weiß nicht wie ich das in Pascal "ausdrücken" soll, das ist mein Problem...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 19.10.06 16:44 
user profile iconAllesquarks hat folgendes geschrieben:
Hast du doch schon gesagt: Wenn davor positiv und danach negativ dann Nullstelle. Wenn das nicht deine erste Informatikstunde ist oder du noch kein Englisch hattest ist das eine Anleitung.

Naja, aber man muss ja auch irgendwoher die Teststellen finden. Deshalb mein auch mein Beispiel mit Newton, das benutzt zwar Ableitungen und probiert nicht einfach aus, aber es ist ein Beispiel wie man von einer Teststelle zur nächsten kommt.

In diesem Fall würde man zwei beliebige Stellen suchen, wo der Funktionswert einmal negativ, einmal positiv ist. Dann würde ich die Mitte prüfen und entweder rechts oder links davon weitersuchen, je nachdem wo die Nullstelle liegt.
dominikb Threadstarter
Hält's aus hier
Beiträge: 8

Win XP SP2
Borland Delphi Pascal 6
BeitragVerfasst: Do 19.10.06 16:53 
damit kann ich ehrlich gesagt nix anfangen, ist viel zu kompliziert für mich.
Ich schreib mal was ich in der Schule von der Tafel übernommen hab:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
implemetation

Function f(x:extended):extended;
Begin
  f:=(x*x+1)*sin(x);
End;

Procedure Wertetabelle(anfang,ende,schrittweite:extended); //Schrittweite:1/10
Begin
//Hausaufgabe

If vzw(f(x),f(x+schrittweite) then
Function vzw(x1,x2:extended):Boolean
Begin
  vzw:=x1*x2<0 // merke hier grade das vzw schon geschrieben ist, brauche also noch            
End;                  die Wertetabelle, die ich auch nich kann...


Moderiert von user profile iconTino: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 19.10.06 17:28 
Also da wüsste ich jetzt nicht, wie das rekursiv gehen soll...

Bei einer Rekursion gehe ich von Startwerten (hier zweien) aus und rufe dann eine Funktion immer wieder auf.
Also:
Ich nehme beispielsweise x1 = -10 und x2 = 10. Die beiden Werte müssen so gewählt werden, dass f(x1) < 0 und f(x2) > 0.
Die beiden Werte übergebe ich an eine Funktion.
Dann sehe ich nach, ob f(x1 + (x2 - x1) / 2) > 0 ist, das ist ja genau zwischen x1 und x2. Wenn ja, dann is die Nullstelle links davon, sonst rechts. (Gleich 0 musst du natürlich auch testen ;-))
Ist die Nullstelle links davon, dann rufe ich die Funktion wieder mit (x1, x1 + (x2 - x1) / 2) auf, sonst mit (x1 + (x2 - x1) / 2, x2).
Das mache ich so lange bis Abs(f(x1)) < 0,01. (Der Funktionswert also nur noch 0,01 von 0 entfernt ist.)
Dann gebe ich x1 zurück...

Ggf. muss natürlich der linke Funktionswert statt kleiner als Null größer als Null und der rechte kleiner statt größer als Null sein.