Die Derivate-Partial Funktion aus der Bibliothek erwartet als Funktion eine F# Funktion weshalb ich die Eingangs erwähnte Funktion als F-Sharp umsetzten und dort aufrufen muss, nur weiß ich nicht wie man die 2 Projekte verbindet geschweige ob ein Verweis auf das F-Sharp-projekt reicht ... (Konnte ich das File1 nicht finden deshalb wende ich mich ja an euch)
Das sollte hquer heißen ... sry das reduzierte h (Planckisches Wirkungsquant) (s. bemerkung XD)
Ich melde mich nochmal zum Thema meines Threads: Net, C# Programmierung, Arrays wo ich bereits die Grundaufgabe erläuterte: Der Berechnung der Viele-Welten-Theorie aus dem Bereich der Quantenphysik.
Nun habe ich ein Problem bei der Implementierung der Schroedinger-Gleichung:
Diese sieht folgendermaßen aus: (s. Bild).
Der Code der verwendeten Hamilton-Funktion sieht bisher folgendermaßen aus:(noch nicht fertig, da man die Masse ja nur mittels der Schroedinger-Gleichung lösen kann (meines Wissens nach)
public double Hamiltonfunktion(Teilsys1 Teils1, double impuls, Vector3D.Vector ort) { Vector3D.Vector vecttemp = new Vector3D.Vector(0,0,0); //Masse
return ((double)-((Math.Pow(?(), 2) / 2 * Teils1.)) + (vecttemp.X*vecttemp.X)+(vecttemp.Y*vecttemp.Y)+(vecttemp.Z*vecttemp.Z)); }
Aber das eigentliche Problem liegt in der Funktion, die diese Gleichung nutzt:
Um die Masse zu berechnen benötige ich die partielle Ableitung der H Funktion welche in C# Folgendermaßen aussieht:
public double ?() //ugs.: "reduziertes h"
{
var x = (? / (2 * Math.PI));
return x;
}
Die gefragte Funktion würde ja in F# folgendermaßen aussehen:
module Script1
let multiply h c = h*c;
Wie schaffe ich es nun die Funktion in diese Ableitung einzubauen?:
double Impuls = (double)TAlex.MathCore.Complex.Negate(TAlex.MathCore.Complex.One) * ?() * MathNet.Numerics.DifferentiateModule.partialDerivative(1, 1, finalunits, Script1.multiply);
Dankesehr für eure Hilfen 😃 Ich hab nicht richtig mitgedacht 😕 ... DANKI nochmal an alle die sich die Mühe gemacht haben 😃. Wollt Ihr das Endprodukt sehen und Vorschläge zur Laufzeitverbesserung geben? Da meine Berechnungen seehr lange dauern aber im Moment ist das die "schnellste" Lösung für das Testen nach Leben aller möglichen "Universen / Welten". Sehr viele If-Schleifen. Ich würde es in einem anderen Thread posten 😃 "Review" zum Beispliel 😃
hier die mittlerweile umgeschrieben Variante dass ich zuerst das Array initialisiere und danach die Werte zuweise:
// l loops till colb
for (int l = 0; l < colb; l++)
{
double[,] matr;
matr = new double[i + l + 1, j + k + 1] = A[i, j] *
B[k, l];
C = new TAlex.MathCore.LinearAlgebra.CMatrix(matr);
return C;
};
Jetzt stört nur noch die
matr = new double[i + l + 1, j + k + 1] = A[i, j] *
B[k, l];
Zeile mit dem Error Code:
CS0131 Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein.
Ich kann C# nur eben verstehe ich nicht wieso er nicht die Indizies nimmt die man ihm gibt ...
Es kommt der Fehler : Die linke Seite einer Zuweisung muss eine Variable, eine Eigenschaft oder ein Indexer sein. ManyWorldsTheory M:...\Projects\ManyWorldsTheory\ManyWorldsTheory\GFG.cs 42 Aktiv
wenn ich die entsprechendeZeile so abändere:
C = new TAlex.MathCore.LinearAlgebra.CMatrix(new TAlex.MathCore.LinearAlgebra.CMatrix(new double[i + l + 1, j + k + 1] =
A[i, j] * B[k, l]));
Also ist wieder die verdächtige Zeile mit dem new double verantwortlich ... Wie bekommt man aus der Matrix den "Gesamt-Kronecker-Wert" heraus?
Wenn ich das return C weglasse, kommt > Fehlermeldung:
CS0161: Nicht alle Codepfade geben einen Wert zurück!
Das geht also nicht.
wird gemacht Entschuldige ist mein erster Tag hier ...
Genau das ist meinem Verständinis nach und wenn man sich die Quelle No. 2 anschaut, auch der Sinn und Zweck der Funktion oder verstehe ich da was falsch?
Mfg 😃