Kerr-Metrik

F

fspapst

Gast
Wie der "Fall" Linux zeigt, ist die Überlebenswahrscheinlichkeit solcher Produkte sehr von der Stärke einer zugehörigen Lobby abhängig.
@Bernhard:
Soweit ich weiß: Wenn Dein Produkt vollständig von Dir ist, und auch nicht auf irgendwelchen Lizenzrechtlich relevanten Produkten erzeugt wurde, ist eine Veröffentlichung ohne jedes rechtliche Risiko und fällt unter "Freeware". Die mathematischen Formeln sind bestimmt nicht geschützt.
Ein überleben Deines Produktes wird gewährleistet, wenn es OpenSource (Quellcode veröffentlichen) und der GNU entspricht. Dann wird das Vermarkten anderer Produkte nicht behindert, selbst wenn man viel Werbung dafür macht. :p

Bwenutzt Du für dein Programm ein lizensiertes Produkt zur Herstellung (MS-Editor) oder als Plattform (MS-Form) so könnte der Lizenzinhaben der Produkte bei Nachweis Lizenzgebühren für die Verbreitung Deines Produktes verlangen. :D

Gruß
FS
 

Bernhard

Registriertes Mitglied
Hallo pauli und fspapst,

ich bin in dieser Hinsicht vielleicht Übervorsichtig. Eure Zustimmung zu dem Programm freut mich natürlich und so kann ich es guten Gewisssens bei sourceforge.net weiter belassen. Den letzten Feinschliff für die aktuelle Version 0.4 gab übrigens der gcc unter Linux. Dort ist bekanntlich alles frei und damit steht auch das Algebraprogramm unter der GNU-Lizenz. Zusätzlich habe ich es für akademische Zwecke unter die AFL gestellt. Das Programm kann damit praktisch beliebig "ausgeschlachtet" werden. Verwendet werden eh nur bekannte Formeln aus dem Bronstein und objektorientierte Programmiertechniken. Also alles Standardtechniken :).

Für Visual Studio habe ich eine gekaufte Lizenz verwendet. Hat damals satte 250.- DM gekostet. Damit bin ich also aktuell zu 100% auf der sicheren Seite.
Gruß

Bernhard
 

Bernhard

Registriertes Mitglied
tja, die Resonanz auf die Freeware, die ich hier zur Diskussion stelle ist ja wirklich "überwältigend". Sagt mal, sind Riemann-Tensoren eigentlich wirklich so uninteressant, dass hier als einzige Beurteilung das Wort Nerdware gebraucht wird? Ich meine, man muss damit ja nicht unbedingt gleich in die Differentialgeometrie einsteigen, aber das da sonst überhaupt keine Resonanz kommt, finde ich schon irgenwie eigenartig. Kurz gesagt: hat hier eigentlich noch niemand die Software zum Laufen gebracht, bzw. getestet? Irgendwie glaube ich es eigentlich nicht, dass es so wenige Leser gibt, die sich für Computeralgebra interessieren oder bin ich damit doch im falschen Forum :confused:. Falls jemand wider Erwarten die Software doch getestet haben sollte, würde ich mich über beliebige - aber bitte vernünftige - Rückmeldungen sehr freuen.
Gruß

Bernhard
 

Ich

Registriertes Mitglied
Das "Nerdware" war von mir, und beide Downloads, die ich damals gesehen habe, waren von mir. Mich interessiert das Programm im Grunde schon, aber alles über .exe anklicken und Beispiel laufen lassen, dann Beispiel intuitiv abändern und eigenes rechnen, überfordert mich. Zumindest psychologisch.
Kannst du nicht eine exe machen mit z.B. Textfile als Eingabe? Und Beispiel, damit die Syntax klar ist?
 

Bernhard

Registriertes Mitglied
Hallo Ich,

da bei sourceforge.net einige Umbauten stattgefunden haben, hier der aktuelle Link auf die beiden Sprachversionen der Software. Der Download muss mit WinZip o.ä. entpackt werden. In der Datei main.cpp befinden sich ganz am Ende drei leichte Beispiele, die die Syntax auch erklären. Diese Datei kann mit jedem Texteditor (z.B. Notepad bei Windows) geöffnet und gelesen werden.

Warum die Software (noch) keine exe-Datei ist, hat den folgenden einfachen Grund. Die Software stellt eigentlich eine Minimalversion einer eigenen Programmiersprache dar. D.h. es gibt Funktion wie Plus, Minus, Mal, Kuerze usw., um dem Anwender möglichst viel Freiheiten in der Anwendung der Software zu lassen. Der Anwender kann damit eine riesige Menge an Problemen selber programmieren. Die Arbeit mit den vorhandenen Funktionen bleibt so gut kontrollierbar und auch steuerbar. Vielleicht überfordere ich aber damit potentielle Anwender (vielen Dank für den Vorschlag). Die Eingabe per Textdatei muss ich nochmal überdenken und eventuell dann auch implementieren. Vielleicht ist das eine Option, die Software auch weiterhin zu verwenden :).

Ob sich jedoch die Berechnung der Kerr-Metrik damit komplett automatisieren läßt, wage ich zu bezweifeln, da diese Rechnung in mehreren Stufen gemacht werden muss:
Zuerst berechnet man aus den 5 kovarianten und 5 kontravarianten Komponenten der Metrik eine (beliebig wählbare) Komponente des Ricci-Tensors. Das Ergebnis wird in einer Textdatei gespeichert (rund 30 kB), enthält dabei aber noch erste und zweite Ableitungen der Hilfsfunktionen rho und Lambda (s. http://de.wikipedia.org/wiki/Kerr-Metrik) und einer weiteren Hilfsfunktion für die 5 kontravarianten Komponenten. In einem zweiten Schritt werden die Ableitungen der Hilfsfunktionen berechnet (per Hand oder Programm) und damit das Ergebnis vereinfacht (per Programm). Man weiß so bei jedem Schritt, was das Programm gerade macht und kann immer wieder auch eingreifen. Debug-Ausgaben zeigen dabei den Ablauf des Programms zur Laufzeit an und geben Informationen über den Fortschritt der Berechnungen.

Einfache Speziallfälle könnte ich "hart codieren" und Dir als exe-Datei per e-mail schicken.
 
Zuletzt bearbeitet:

MichaMedia

Registriertes Mitglied
Wenn Du mit der GUI Programmierung für Eingaben etc. nicht vertraut bist, so könnte ich das machen, müsste nur wissen wie es aussehen soll und wohin die Daten der Eingaben sollen. (Klassen und deren Member).

Gruß Micha
 

Bernhard

Registriertes Mitglied
Hallo Micha,

die Programmierung der GUI ist nicht so sehr das Problem. Zudem habe ich zum Aussehen einer GUI auch keine richtigen Ideen. Hinzu kommt die Angst, dass man dann sehr schnell verschiedene Versionen für verschiedene Anwendungen bekommt! Dieser Fall ist dann von mir privat nicht mehr zu verwalten :(.

Eine Eingabe der Vorgaben per Textdatei erscheint mir vielversprechender. Man bräuchte dabei einen Parser, der die Eingaben interpretiert und analysiert. Zu Mehreren wäre so etwas bestimmt machbar :rolleyes:. Hilfreich wären auch noch weitere Testfälle :rolleyes:. Immer nur Riemann- oder Ricci-Tensor auf Kerr-Metrik ist auf Dauer recht langweilig.
Freundliche Grüße

Bernhard
 

MichaMedia

Registriertes Mitglied
Von der Metrik habe ich leider keine Ahnung, was ich bieten könnte wer eine GUI mit Textfeld, das man es darin schreibt oder rein kopiert, sowie laden/speichern Funktionen, ein Parser dazu könnte ich auch entwickeln, bräuchte aber deine Hilfe dabei, da wie gesagt mir da doch zur Metrik die Erfahrung fehlt .
Unter dem Textfeld kann man Buttons anlegen für häufige Verwendung von Vektoren/Formeln/Formelzeichen etc. die per Klick ins Textfeld gesetzt werden.

Noch was, ich habe einen kleinen Blick in den Source gewagt, wer es nicht Sinnvoller die Klassen zu erweitern, also Aufgabenbereiche besser zu strukturieren als eine Klasse für alle Funktionen, weil so geht der Sinn von OOP ja auch verloren und man kann C konform coden.

Wie sieht es mit dynamischen Klassen aus, also Templates, könnten die nicht auch in manchen Bereichen zum Vorteil werden, als nur starre Funktionen mit festen Variablen? Wie gesagt, kein Plan von Metrik, da muss ich mich nach dir richten.

Gruß Micha.
 

Bernhard

Registriertes Mitglied
Guten Morgen Micha,

die Metrik ist aus Sicht des Programms sehr leicht zu beschreiben. Es sind zehn voneinander unabhängige Funktionen. Jede einzelne Funktion ist abhängig von (vorerst) maximal vier Parametern. Mathematisch sieht das so aus: f_1(x_1,x_2,x_3,x_4) ... f_10(x_1,x_2,x_3,x_4).

Aus Sicht des Programms ist jedes f_n eine Zeichenkette mit den Variablen x_1 bis x_4,den Verknüpfungszeichen +,-,*, festen Funktionen wie sin, sinh, exp, usw. und dem #-Zeichen für Potenzen. Z.B. f_1(x_1,x_2,x_3,x_4) = x_1#4 * x_2#2 + exp(x_3) * g(x_1,x_3). Dabei kann g(x_1,x_3) eine beliebige Funktion von den Variablen x_1 und x_3 sein. Durch die Möglichkeit Hilfsfunktionen zu verwenden kann der Anwender indirekt Klammern definieren. Mit f_1 kann man jetzt schon einiges anfangen. Eine partielle Ableitung nach x_1 ergibt f_1(x_1,x_2,x_3,x_4),1 = 4*x_1#3 * x_2#2 + exp(x_3) * g(x_1,x_3),1. Das ",1" steht als Abkürzung für eine partielle Ableitung nach x_1. Mit diesen Regeln ist die partielle Ableitung nach x_1 nichts anderes als eine Zeichenmanipulation der Zeichenkette für f_1(x_1,x_2,x_3,x_4) nach f_1(x_1,x_2,x_3,x_4),1. Für die Speicherung der Zeichenkette im RAM gibt es die Klasse Ausdruck.

Eine partielle Ableitung ist nichts anderes als eine normale Ableitung mit Angabe der Variablen nach der differenziert wird. Alle anderen Variablen werden wie gewöhnliche Konstanten behandelt.

Für die Berechnung des Riemann-Tensors gibt es zusätzlich noch eine kovariante und eine kontravariante Version der Metrik. Aus Sicht des Programms bedeutet das, dass man statt zehn Funktionen einfach zwanzig Funktionen speichern muss. Die beiden Mengen sind dabei mathematisch gesehen nicht unabhängig voneinander. Aus den zehn kovarianten Funktionen kann man also sehr oft die zehn zugehörigen kontravarianten Funktionen ausrechnen und umgekehrt. Diese Berechnung kann von Fall zu Fall aber auch schon wieder so kompliziert werden, dass man dazu eventuell wieder ein Computeralgebrasystem haben will.

Für den Fall, dass eine Funktion gleich Null ist bleibt die zugehörige Zeichenkette einfach leer.
Freundliche Grüße

Bernhard
 
Zuletzt bearbeitet:

Bernhard

Registriertes Mitglied
Hallo Ich und Micha,

ich denke des Rätsels Lösung ist vom Prinzip her doch recht einfach. Ich muss der Software einfach noch Klammern beibringen. Bisher ging das über Hilfsfunktionen und einer Auswertungsfunktion, aber das ist für den Anwender scheinbar unzumutbar. Ein GUI gibts dann zum Abschluß auch noch. Das geht dann recht flott. Bin schon sehr gespannt, wie das mit den Klammern funktioniert.
So long....

Bernhard

Nachtrag: Die Berücksichtigung von Klammern ist mir zur Zeit zu kompliziert. Deswegen gibt es voraussichtlich als nächste Erweiterung doch eher ein einfaches GUI.
 
Zuletzt bearbeitet:

frosch411

Registriertes Mitglied
Nachtrag: Die Berücksichtigung von Klammern ist mir zur Zeit zu kompliziert. Deswegen gibt es voraussichtlich als nächste Erweiterung doch eher ein einfaches GUI.

Klammernauflösung zu programmieren? Das ist über einen endlichen Zustandsautomat recht einfach zu realisieren. Am besten rekursiv.

o_o
 

Nathan5111

Registriertes Mitglied
Hallo Bernhard,

ich habe zwar über 20 Jahre programmiert, wenig Rest-Ahnung von der höheren Mathematik, "C" und die Weiterentwicklungen habe ich ebenfalls nur am Rande wahrgenommen, habe also 'die besten Voraussetzungen', hier mit zu reden.

Ich melde mich mit meinen Fragen über PN; und dann der Kaiser: 'Schaun mer mal!'

Gruß Nathan
 

MichaMedia

Registriertes Mitglied
Hallo Bernhard,

der Tipp von Frosch ist nicht verkehrt, wobei ich am überlegen bin ob einige Subfunktionen nicht als Typedefination besser kommen und ein Scann eher per Regular Extension erfolgt, wobei man eben jeden Klammerinhalt über eine als type definierte Funktion auswertet.

Weiter sehe ich dass es vielleicht auch besser ist, eine Grundklasse mit den wichtigsten Funktionen zu schaffen, und diese für weitere zu vererben, noch weiter würde ich bei einigen nicht:
While (…) verwenden, sondern do { … } while(..), ich kann mich irren, aber ich meine das in einigen schleifen eine erstmalige Berechnung statt finden muss, irre ich mich, korrigiere mich.

Mir fehlen auch einige Exeptcions abfragen, try … do .., in solchen Berechnungen sollte man sowas abfangen, z.B. bei Division durch 0, ich habe gerade nicht in Erinnerung, welcher variablen Type benutzt wird, aber ich denke alles ist int_64, ansonsten wer das auch noch ein Schritt.

Zur GUI wie gesagt, sowas tippe ich nebenbei beim Lesen im GdM Bereich, also auch noch wenn man sich tot lacht.

Noch was, dazu muss ich mir das mal noch genauer anschauen, aber ich mein die Verwendung von Vector.h dürfte nicht verkehrt sein, da kann man auch Zeiger und so ablegen, könnte vielleicht speed gewinnen.

Trotzdem, was sehr wichtig ist, ist eben Try…., sollte der Debugger off sein, so können Fehlberechnungen 0 sein oder das Prog abstürzen.

Naja, du kannst dich gern per PM oder ICQ melden, kriegen wir schon hin.

Gruß Micha.
 

Bernhard

Registriertes Mitglied
Hallo Micha,

das hört sich alles sehr interessant an. Ich habe gestern mal eine GUI aufgesetzt und die Funktionen eingebaut. Es ist ein SDI-Projekt mit einer zentralen View-Klasse, abgeleitet von CFormView (alles MFC), die sämtliche Funktionen aus der alten Version enthält. Es funktioniert alles schon recht gut, aber einige Features fehlen noch.

Die ganze Fehlerbehandlung kann mit Sicherheit noch verbessert werden. Dazu gehören vermutlich auch noch bessere Prüfungen auf die Syntax der Ausdrücke.

Was auf jeden Fall auch noch gemacht werden muss, ist eine Matrix-Invertierung, da man auch in der neuen Version noch immer sowohl die kovarianten und auch kontravarianten Komponenten der Metrik eingeben muss. Beide Matrizen sind invers zueinander und damit prinzipiell über ein paar Determinanten gegenseitig berechenbar.

Vorschläge zur Performance können wir mit dem neuen Release dann sehr detailiert angehen.

Die letzten Beiträge sind sehr motivierend :cool:, so dass das neue Release sagen wir mal spätestens bis zum Wochenende zugänglich sein sollte (oder für Testzwecke auch schon früher). Wir haben dann eine exaktere Gesprächsbasis und man kann dann sehr einfach das Programm testen und als exe damit "herumspielen". Das Projekt hat sich gestern abend schon in die Richtung bewegt, die Du vorgeschlagen hast. Vielen Dank für die vielen Ideen.
 
Zuletzt bearbeitet:

Bernhard

Registriertes Mitglied
das neue Release steht zum Download bereit. Zum Testen einfach exe starten, Knopf "Schwarzschild" oder "Kerr ..." drücken, Tensorkomponente(n) auswählen und auf Berechnen drücken. Anfangs sollte bei Kerr nur eine Tensorkomponente gedrückt werden, sonst dauert die Berechnung zu lange. Nach der Berechnung wird im Arbeitsverzeichnis eine Textdatei mit dem Ergebnis angelegt. Da beide Metriken Hilfsfunktionen (z.B. f(x_1) := x_1 - rs ) enthalten, muss das Ergebnis per "Multiplikation" und "Auswertung" weiter verarbeitet werden. Beide Funktionen erwarten als Eingabe eine Textdatei namens ein.txt und erzeugen als Ergebnis eine Datei aus.txt. Für die Datei ein.txt kann bei den ersten Tests natürlich die Ausgabedatei der Berechnung verwendet werden.

Wie gesagt gehen Klammern noch nicht, deswegen gibt es auch die beiden Zusatzfunktionen. Man kann damit die Ergebnisausdrücke per Multiplikation auf den gemeinsamen Nenner 1 bringen und dann per Auswertung zeigen, dass sich alle Terme gegenseitig wegheben. Bei der Schwarzschildmetrik funktioniert das auch; bei der Kerr-Metrik in BL-Koordinaten dagegen nicht.

Noch ein Tip: Bitte das Thema nicht allzu ernst nehmen. Es ist als Feierabendprojekt konzipiert und es gibt deswegen keinerlei Zeitdruck oder sonstige Verpflichtungen.
 
Zuletzt bearbeitet:

Bernhard

Registriertes Mitglied
Noch ein Tip: Bitte das Thema nicht allzu ernst nehmen. Es ist als Feierabendprojekt konzipiert und es gibt deswegen keinerlei Zeitdruck oder sonstige Verpflichtungen.

Die freigegebenen Versionen haben leider alle noch einen recht offensichtlichen Fehler: Wird z.B. R_00 für die Kerr-Metrik berechnet und anschließend der Kerr-Parameter Null gesetzt bleibt nach dem Kürzen gleicher Terme noch was übrig. Eine neue Version bei der dieser Fehler nicht mehr auftritt habe ich bereits. Der Vergleich der beiden Versionen ist leider recht aufwändig und damit verzögert sich das neue Update.
Gruß

Bernhard
 
Zuletzt bearbeitet:

Bernhard

Registriertes Mitglied
Hallo,

der letzte, mir bekannte, Fehler ist ausgebaut und der Download von Version 0.6 freigegeben (Versionsnummer im Info-Fenster steht noch auf 0.5). Alle, die das Programm testen wollen, sollten also bitte nochmal Version 0.6 downloaden und als exe oder als C++-Projekt verwenden. In einer wichtigen Auswertungsfunktion hatte sich noch ein Fehler versteckt.

Das allgemeine Vorgehen ist gleich geblieben.
a) Erst den Ricci-Tensor mit dem Berechne-Knopf ausrechnen.
b) Mit Hilfe des Feldes Auswertung sämtliche Ableitungen der Hilfsfunktionen ersetzen (im Feld "wird ersetzt durch" gebe ich dabei die per Hand ausgerechneten Ableitungen von rho^2 und d^2 ein).
c) Mit Multipliziere alle negativen Potenzen der Hilfsfunktionen ersetzen
d) Mit Hilfe des Feldes Auswertung zuletzt die Hilfsfunktionen ersetzen, so dass nur noch direkte Abhängigkeiten von den vier RZ-Koordinaten zurückbleiben, bzw. gar keine aus.txt generiert wird => alles gleich Null)

Den im allerersten Beitrag dieses Themas aufgezeigten Widerspruch konnte ich heute für die tt-Komponente des Ricci-Tensors auch mit der Datei Algebra.exe herstellen.
Gruß

Bernhard
 
Zuletzt bearbeitet:
Oben