AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

auflisten + Graf

Ein Thema von playa2kk · begonnen am 17. Mär 2009 · letzter Beitrag vom 22. Mär 2009
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
playa2kkk

Registriert seit: 21. Mär 2009
9 Beiträge
 
#41

Re: auflisten + Graf

  Alt 22. Mär 2009, 09:24
Guten Morgen,

Ich habe meine Rechnungen auch nun verbessert, danke dafür.

Ich habe in dem Programm nur eine kleine Änderung vorgenommen.Ich habe folgende Zeile geändert:
h := (Inter-t[0])/n;

1.) Wie korrigier ich den Index in der Ergebnistabelle?
2.) Wieso sind meine ausgegebenen Werte falsch?

play
Miniaturansicht angehängter Grafiken
eulerprog_419.jpg  
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#42

Re: auflisten + Graf

  Alt 22. Mär 2009, 09:51
Also mal zum Begriffe des Intevalls: Intevall stellt einen Mengentaum dar. Ein Intervall kann z.B. 2Pi sein. Damit ist also kein Anfangswert oder Endwert gesetzt. Es stellt ganz schlicht einen Zahlen weite dar! mit t0 legst du eigentlich nur fest, WO sich dieser Zahlraum befindet. Wenn du z.B. ein Intervall hast [a,b] sagen wir mal a=4 und b=8, dann ist dein Intervall T=5 groß (4,5,6,7,8) und der Anfangswert ist 4 und der Endwert 8. Wenn du also dieses intervall in 5 gleiche Teile möchtest, dann Teilst du einfach das Intervall durch die gewollte Anzahl von Teilen, also: 5/5 = 1. Wenn du jetzt aberrechnest (T-t0)/n=h dann bekommst du (5-4)/5 = 0,2. Ich denke die Auswirkungen anhand dieses einfachen Beispielst siehst du schon.
Richtig ist natürlich bei einem Intervall von 5 und 5 gleichen Teilen, dass die Teillänge h 1 ist oder?
Mein Programm hat das vor deiner Änderung auch so gemacht.

Das solltest du nochmal prüfen!!!

Deine Werte sind falsch, weil du nicht beachtet hast, dass du Punktrechnung vor Strichrechnung durchführen MUSST!!! deswegen hab ich dir bei meiner Rechnung auch Zwischenschritte angegeben, damit du siehst, welche Werte du zuerst berechnen musst und welche danach.

MfG
BAMatze

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if trystrtofloat(ED_Intervall.Text, Inter) and trystrtoint(ED_AnzTeilintervalle.Text, n) and
     trystrtofloat(ED_Y.Text, dBuffer1) and trystrtofloat(ED_T.Text, dBuffer2) then
    begin
      Setlength(y, n);
      Setlength(t, n);
      Inter:=strtofloat(ED_Intervall.Text);
      h := Inter/n;
      y[0] := strtofloat(ED_Y.Text);
      maxY := y[0];
      minY := y[0];
      t[0] := strtofloat(ED_T.Text);
      Memo1.Lines.Add('t0 = ' + floattostr(t[0]) + ' y0 = ' + floattostr(y[0])); // <-- diese Zeile musst du ändern, so wie ich sie hier hab
      for j := 1 to n-1 do
        begin
          t[j] := t[j-1] + h;
          y[j] := y[j-1] + h* k * y[j-1];
          Memo1.Lines.Add('t' + inttostr(j) + ' = ' + floattostr(t[j]) + ' y' + inttostr(j) + ' = ' + floattostr(y[j])); // <-- diese Zeile musst du ändern, so wie ich sie hier hab
          if y[j] > maxY then maxY := y[j];
          if y[j] < minY then minY := y[j];
        end;
      Koordinatensystem_zeichnen;
      Graph_zeichnen;
    end
  else Showmessage('Bitte überprüfen sie die eingegebenen Werte. Vergewissern Sie sich, dass alle Felder befüllt sind. Anzahl der Teilintervalle muss eine ganze Zahl sein.');
end;
  Mit Zitat antworten Zitat
playa2kkk

Registriert seit: 21. Mär 2009
9 Beiträge
 
#43

Re: auflisten + Graf

  Alt 22. Mär 2009, 10:16
Zitat von BAMatze:
Also mal zum Begriffe des Intevalls: Intevall stellt einen Mengentaum dar. Ein Intervall kann z.B. 2Pi sein. Damit ist also kein Anfangswert oder Endwert gesetzt. Es stellt ganz schlicht einen Zahlen weite dar! mit t0 legst du eigentlich nur fest, WO sich dieser Zahlraum befindet. Wenn du z.B. ein Intervall hast [a,b] sagen wir mal a=4 und b=8, dann ist dein Intervall T=5 groß (4,5,6,7,8) und der Anfangswert ist 4 und der Endwert 8. Wenn du also dieses intervall in 5 gleiche Teile möchtest, dann Teilst du einfach das Intervall durch die gewollte Anzahl von Teilen, also: 5/5 = 1. Wenn du jetzt aberrechnest (T-t0)/n=h dann bekommst du (5-4)/5 = 0,2. Ich denke die Auswirkungen anhand dieses einfachen Beispielst siehst du schon.
Richtig ist natürlich bei einem Intervall von 5 und 5 gleichen Teilen, dass die Teillänge h 1 ist oder?
Mein Programm hat das vor deiner Änderung auch so gemacht.

Das solltest du nochmal prüfen!!!

Deine Werte sind falsch, weil du nicht beachtet hast, dass du Punktrechnung vor Strichrechnung durchführen MUSST!!! deswegen hab ich dir bei meiner Rechnung auch Zwischenschritte angegeben, damit du siehst, welche Werte du zuerst berechnen musst und welche danach.

MfG
BAMatze

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if trystrtofloat(ED_Intervall.Text, Inter) and trystrtoint(ED_AnzTeilintervalle.Text, n) and
     trystrtofloat(ED_Y.Text, dBuffer1) and trystrtofloat(ED_T.Text, dBuffer2) then
    begin
      Setlength(y, n);
      Setlength(t, n);
      Inter:=strtofloat(ED_Intervall.Text);
      h := Inter/n;
      y[0] := strtofloat(ED_Y.Text);
      maxY := y[0];
      minY := y[0];
      t[0] := strtofloat(ED_T.Text);
      Memo1.Lines.Add('t0 = ' + floattostr(t[0]) + ' y0 = ' + floattostr(y[0])); // <-- diese Zeile musst du ändern, so wie ich sie hier hab
      for j := 1 to n-1 do
        begin
          t[j] := t[j-1] + h;
          y[j] := y[j-1] + h* k * y[j-1];
          Memo1.Lines.Add('t' + inttostr(j) + ' = ' + floattostr(t[j]) + ' y' + inttostr(j) + ' = ' + floattostr(y[j])); // <-- diese Zeile musst du ändern, so wie ich sie hier hab
          if y[j] > maxY then maxY := y[j];
          if y[j] < minY then minY := y[j];
        end;
      Koordinatensystem_zeichnen;
      Graph_zeichnen;
    end
  else Showmessage('Bitte überprüfen sie die eingegebenen Werte. Vergewissern Sie sich, dass alle Felder befüllt sind. Anzahl der Teilintervalle muss eine ganze Zahl sein.');
end;
Alles sehr beispielhaft erklärt, danke dir vielmals.
Du solltest Lehrer werden
Ich habe alles korrigiert, Fehler behoben, Denkfehler beseitigt und nun stehe ich stolz da
Ich versuche jetzt mal die Hauptprozedur zu kommentieren.

edit1:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if trystrtofloat(ED_Intervall.Text, Inter) and trystrtoint(ED_AnzTeilintervalle.Text, n) and //Wenn die Editfelder nicht in den Datentyp Float
     trystrtofloat(ED_Y.Text, dBuffer1) and trystrtofloat(ED_T.Text, dBuffer2) then // (Dezimalzahl) umgewandelt werden, dann springe zu else
    begin
      Setlength(y, n); //?
      Setlength(t, n); //?
      Inter:= StrToFloat(ED_Intervall.Text); //Variable Inter (Intervall T) vom Editfeld ED_Intervall.Text übernehmen
      h := Inter/n; //Schrittweite h berechnen: Inter/Intervallteile n
      y[0] := StrToFloat(ED_Y.Text); //Startwert y0 vom Editfeld ED_Y.Text übernehmen
      maxY := y[0]; //?
      minY := y[0]; //?
      t[0] := StrToFloat(ED_T.Text); //Startwert t0 vom Editfeld ED_T.Text übernehmen
      Memo1.Lines.Add('t0 = ' + floattostr(t[0]) + ' y0 = ' + floattostr(y[0])); //Schreibe 3. Zeile der Ergebnistabelle: Anfangswerte
      for j := 1 to n-1 do //Index der y- und t-Werte
        begin
          t[j] := t[j-1] + h; //Berechne die t-Werte
          y[j] := y[j-1] + h* k * y[j-1]; //Berechne die y-Werte
          Memo1.Lines.Add('t' + inttostr(j) + ' = ' + floattostr(t[j]) + ' y' + inttostr(j) + ' = ' + floattostr(y[j])); //Schreibe alle weiteren Ergebnise in die Tabelle
          if y[j] > maxY then maxY := y[j]; //?
          if y[j] < minY then minY := y[j]; //?
        end;
      Koordinatensystem_zeichnen; //Führe Prozedur Koordinatensystem_zeichnen aus: Beginne das Koordinatensystem zu zeichnen
      Graph_zeichnen; //Führe Prozedur Graph_zeichnen aus: Zeichen den Graphen aus den berechneten Werten
    end
  else Showmessage('Bitte überprüfen sie die eingegebenen Werte. Vergewissern Sie sich, dass alle Felder befüllt sind. Anzahl der Teilintervalle muss eine ganze Zahl sein.');
end;
play
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#44

Re: auflisten + Graf

  Alt 22. Mär 2009, 10:49
kein Problem
  Mit Zitat antworten Zitat
playa2kkk

Registriert seit: 21. Mär 2009
9 Beiträge
 
#45

Re: auflisten + Graf

  Alt 22. Mär 2009, 11:01
Zitat von BAMatze:
kein Problem
kurze Fragen noch:
setlenght ist für das Array richtig? Was macht es genau? den Bereich von y und t angeben?

wofür ist miny/maxy?

play
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#46

Re: auflisten + Graf

  Alt 22. Mär 2009, 11:09
also Stringlength legt die Größe des Arrays fest.

miny und maxy waren eigentlich nur Ansätze, wenn man einen Intevall z.B. [1000..2000] nimmt, dann ist der Nullbereich nicht mehr so interessant, weil bisher immer Y von Null bis zum Maximalwert angezeigt wird, und man sollte nur den Bereich angezeigt bekommen, wo Werte enthalten sind.

MfG
BAMatze
  Mit Zitat antworten Zitat
playa2kkk

Registriert seit: 21. Mär 2009
9 Beiträge
 
#47

Re: auflisten + Graf

  Alt 22. Mär 2009, 13:21
Hallo,

ich habe mal unsere Funktion von MatheAss berechnen lassen, da kommen folgende Grafen heraus:
http://img148.imageshack.us/img148/6882/grafm.jpg

Wieso unterscheiden sich der Graf vom Programm und dieser?

Normalerweise müssten die Grafen doch ziemlich ähnlich sein.

play
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#48

Re: auflisten + Graf

  Alt 22. Mär 2009, 14:02
Zitat von playa2kkk:
Hallo,

ich habe mal unsere Funktion von MatheAss berechnen lassen, da kommen folgende Grafen heraus:
http://img148.imageshack.us/img148/6882/grafm.jpg

Wieso unterscheiden sich der Graf vom Programm und dieser?

Normalerweise müssten die Grafen doch ziemlich ähnlich sein.

play
1.) Also was dich eigentlich sowieso stutzig machen sollte, ist dass du dort 2 Graphen darstellst. der Blaue Graph und der Rote gehören nicht zu einer E-Funktion, sondern wie du auch an der beschriftung merkst, gehört zu jedem Graph eine Formel.

2.) Ist jeder allgemein gehaltene Graph hat unendlich viele Graphen, schau z.B. eine Gerade y=m*x + n. jenachdem wie du m und n wählst können auch bei Geraden unterschiede auftreten.
In deinem Bild ist lustiger weile auch nicht die Grundform der E-Funktion gewählt worden sonder so wie es aussieht scheint die Spezifische Funktion die dort dargestellt ist folgende zu sein: f(t) = 2*e^(k*t). Dies erkennt man an dem Schnittpunkt des Graphen mit der Y-Achse.

3.) JETZT kommt dein Einwurf, welchen du im laufe des Gespräches mal gemacht hast: Die hier programmierte Funktion ist eine Näherungsfunktion. Wenn du also wissen willst, ob das Programm wirklich macht, was du willst, musst du dir spezifische Funktionen von E nehmen und versuchen nachzustellen. Dies wird schon etwas schwieriger sein, da du die E-Funktion in der Form angibst, wie du sie in deinem Bild hast und mit dem Programm nur Intervall, Anfangswerte und Teilintervalle. Somit kannst du die Funktion in dem Bereich "ANNÄHERN", aber nicht exakt nachstellen.

Was sagt dir jetzt, dass der Graph wirklich der ist, den du gesucht hast. Das kann dir am schnellsten dein Lehrer sagen oder du musst eine Funktionsanalyse durchführen. Diese haben wir hier in Teilen schonmal angesprochen, dabei werden Spezifische Punkte (Maxima-, Minima-, Wende- und Sattelpunkte, sowie Nullstellen und Schnittpunkte mit der Y-Achse) bestimmt sowie chrakteristische Verhalten (Asymptoten, Symetrien, Krümmungen, ...).
Wie du siehst, hört sich dies schonmal sehr kompliziert an, ist es auch, vorallem, wenn man Kurvenscharen hast, so wie hier und nicht spezifische Funktionen.

Ok kommen wir einfach dazu, was wir wissen. Wir wir wissen:

EFunktion
- hat keine Nullstelle, solange kein additivier Term in der Formel vorkommt oder der Faktor Null ist, dann ist der Graph aber eine Linie auf der X-Achse
- hat keinen Wendepunkt
- hat keinen Sattelpunkt
- hat kein Minimum oder besser Minimumm liegt entweder im neg oder pos Unendlichen
- hat kein Maximum
- hat nur eine Krümmung
- hat eine Asymptot bei Null, solange kein additiver Term in der Formel vorkommt, sonst verschiebt sich diese Asymptote lediglich, bleibt aber erhalten
- hat einen Schnittpunkt mit der Y-Achse bei t=0

unser Graph
- hat keine Nullstelle, solange kein additivier Term in der Formel vorkommt oder der Faktor Null ist, dann ist der Graph aber eine Linie auf der X-Achse
- hat keinen Wendepunkt
- hat keinen Sattelpunkt
- hat kein Minimum oder besser Minimumm liegt entweder im neg oder pos Unendlichen
- hat nur eine Krümmung
- hat eine Asymptot bei Null, solange kein additiver Term in der Formel vorkommt, sonst verschiebt sich diese Asymptote lediglich, bleibt aber erhalten
- hat einen Schnittpunkt mit der Y-Achse bei t=0

....

Also alles in allem scheint es erstmal gut auszusehen. Was aber kein Beweis ist. Übrigens der Verlauf der Graphen ähnelt sich gravierend!!!

Wie gesagt unter dem Strich kann dir an diesem Punkt, also der Plausibilitätskontrolle niemand so wirklich helfen. Wir haben zwar deine Unterlagen gesehen und versucht dir ein Programm zu liefern, welches das macht, was dort geschrieben stand. Wir wissen nicht, was in Gesprächen mit Lehrern oder dem Aufgabensteller noch alles gefordert wurde oder allgemein gesagt. Meiner Meinung nach macht das Programm exakt das was du von ihm forderst. Du musst jetzt natürlich noch den angesprochenen Beweis bringen. Dies könnte z.B. sein, dass du einen Graph nimmst als E-Funktion, den du nachstellen willst und gibst dann alles in dem Programm ein. Wenn der Graph nachgestellt wird (im Intervall), dann alles ok, wenn nicht, dann schlecht.

MfG
BAMatze
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#49

Re: auflisten + Graf

  Alt 22. Mär 2009, 14:22
Ein weiter Beweis, dass das Programm das machst, was du möchtest ist: Es gibt 2 spezifische Werte der Grund E-Funktion f(t)= e^t ohne Faktor und k = 1. Die liegen bei t=0, dann muss der Funktionswert 1 sein und bei t = 1, dann muss der Funktionswert e sein. e hat gemäß Eulersche Zahl einen Wert von 2,718. Also wenn du das Programm abänderst (k in der FromCreate-Procedure von 2.0 auf 1.0 setzt) und dann dir das Intervall von 0 bis 1 darstellen lässt, dann muss bei einem Anfangswert [0,1] der 2. Punkt [1,e] rauskommen. Natürlich hab ich das mal schnell für dich gemacht. Im 1. Bild habe ich das mit 50 Teilintervallen gemacht. Dann erhalte ich als 2. Punkt [1; 2,638] und mit 500 Teilintervallen schon [1; 2,710].

Damit ist eigentlich bewiesen, dass das Programm die EFunktion in diesem Bereich, je nach Wahl der Teilintervalle ziemlich genau nachstellt.
Miniaturansicht angehängter Grafiken
bild2_efunk_154.jpg   bild1_efunk_910.jpg  
  Mit Zitat antworten Zitat
playa2kkk

Registriert seit: 21. Mär 2009
9 Beiträge
 
#50

Re: auflisten + Graf

  Alt 22. Mär 2009, 14:25
Zitat von BAMatze:
Zitat von playa2kkk:
Hallo,

ich habe mal unsere Funktion von MatheAss berechnen lassen, da kommen folgende Grafen heraus:
http://img148.imageshack.us/img148/6882/grafm.jpg

Wieso unterscheiden sich der Graf vom Programm und dieser?

Normalerweise müssten die Grafen doch ziemlich ähnlich sein.

play
1.) Also was dich eigentlich sowieso stutzig machen sollte, ist dass du dort 2 Graphen darstellst. der Blaue Graph und der Rote gehören nicht zu einer E-Funktion, sondern wie du auch an der beschriftung merkst, gehört zu jedem Graph eine Formel.

2.) Ist jeder allgemein gehaltene Graph hat unendlich viele Graphen, schau z.B. eine Gerade y=m*x + n. jenachdem wie du m und n wählst können auch bei Geraden unterschiede auftreten.
In deinem Bild ist lustiger weile auch nicht die Grundform der E-Funktion gewählt worden sonder so wie es aussieht scheint die Spezifische Funktion die dort dargestellt ist folgende zu sein: f(t) = 2*e^(k*t). Dies erkennt man an dem Schnittpunkt des Graphen mit der Y-Achse.

3.) JETZT kommt dein Einwurf, welchen du im laufe des Gespräches mal gemacht hast: Die hier programmierte Funktion ist eine Näherungsfunktion. Wenn du also wissen willst, ob das Programm wirklich macht, was du willst, musst du dir spezifische Funktionen von E nehmen und versuchen nachzustellen. Dies wird schon etwas schwieriger sein, da du die E-Funktion in der Form angibst, wie du sie in deinem Bild hast und mit dem Programm nur Intervall, Anfangswerte und Teilintervalle. Somit kannst du die Funktion in dem Bereich "ANNÄHERN", aber nicht exakt nachstellen.

Was sagt dir jetzt, dass der Graph wirklich der ist, den du gesucht hast. Das kann dir am schnellsten dein Lehrer sagen oder du musst eine Funktionsanalyse durchführen. Diese haben wir hier in Teilen schonmal angesprochen, dabei werden Spezifische Punkte (Maxima-, Minima-, Wende- und Sattelpunkte, sowie Nullstellen und Schnittpunkte mit der Y-Achse) bestimmt sowie chrakteristische Verhalten (Asymptoten, Symetrien, Krümmungen, ...).
Wie du siehst, hört sich dies schonmal sehr kompliziert an, ist es auch, vorallem, wenn man Kurvenscharen hast, so wie hier und nicht spezifische Funktionen.

Ok kommen wir einfach dazu, was wir wissen. Wir wir wissen:

EFunktion
- hat keine Nullstelle, solange kein additivier Term in der Formel vorkommt oder der Faktor Null ist, dann ist der Graph aber eine Linie auf der X-Achse
- hat keinen Wendepunkt
- hat keinen Sattelpunkt
- hat kein Minimum oder besser Minimumm liegt entweder im neg oder pos Unendlichen
- hat kein Maximum
- hat nur eine Krümmung
- hat eine Asymptot bei Null, solange kein additiver Term in der Formel vorkommt, sonst verschiebt sich diese Asymptote lediglich, bleibt aber erhalten
- hat einen Schnittpunkt mit der Y-Achse bei t=0

unser Graph
- hat keine Nullstelle, solange kein additivier Term in der Formel vorkommt oder der Faktor Null ist, dann ist der Graph aber eine Linie auf der X-Achse
- hat keinen Wendepunkt
- hat keinen Sattelpunkt
- hat kein Minimum oder besser Minimumm liegt entweder im neg oder pos Unendlichen
- hat nur eine Krümmung
- hat eine Asymptot bei Null, solange kein additiver Term in der Formel vorkommt, sonst verschiebt sich diese Asymptote lediglich, bleibt aber erhalten
- hat einen Schnittpunkt mit der Y-Achse bei t=0

....

Also alles in allem scheint es erstmal gut auszusehen. Was aber kein Beweis ist. Übrigens der Verlauf der Graphen ähnelt sich gravierend!!!

Wie gesagt unter dem Strich kann dir an diesem Punkt, also der Plausibilitätskontrolle niemand so wirklich helfen. Wir haben zwar deine Unterlagen gesehen und versucht dir ein Programm zu liefern, welches das macht, was dort geschrieben stand. Wir wissen nicht, was in Gesprächen mit Lehrern oder dem Aufgabensteller noch alles gefordert wurde oder allgemein gesagt. Meiner Meinung nach macht das Programm exakt das was du von ihm forderst. Du musst jetzt natürlich noch den angesprochenen Beweis bringen. Dies könnte z.B. sein, dass du einen Graph nimmst als E-Funktion, den du nachstellen willst und gibst dann alles in dem Programm ein. Wenn der Graph nachgestellt wird (im Intervall), dann alles ok, wenn nicht, dann schlecht.

MfG
BAMatze
Ich habe wieder einen Fehler gemacht und nicht bemerkt.
Die Grafen oben habe ich erstellt, mit MatheAss. ich habe dort auch nicht k, sondern habe für k=2 eingesetzt.Werde ich gleich mal ändern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 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