Laden...

Wie kann ich eine F# Funktion in C# übersetzen oder einbauen?

Erstellt von ShadownightProgramming vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.318 Views
Thema geschlossen
S
ShadownightProgramming Themenstarter:in
13 Beiträge seit 2020
vor 4 Jahren
Wie kann ich eine F# Funktion in C# übersetzen oder einbauen?

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);

C# best ...

C
2.121 Beiträge seit 2010
vor 4 Jahren

Du hast da einen Batzen an Code. Erstelle dir lieber Variablen für die einzelnen Ausdrücke und verrechne die dann der Reihe nach. Dann sieht man was passiert und auch du verstehst das in einer Woche noch 😃

Was ist deine eigentliche Frage? Was tut die F# Funktion, sieht für mich ohne F# Kenntnisse nach einer einfachen Multuplikation aus? Wo soll die wie rein?
Und was ist ?()? Hab ich noch nie gesehen, wobei ich auch nicht mehr ganz auf dem aktuellen Stand bin. Allerdings finde ich, nachdem C# lange Zeit wirklich kürzer UND verständnlicher wurde, wird es seit einiger Zeit nur noch kürzer.

16.834 Beiträge seit 2008
vor 4 Jahren

Meines Wissens...

  • ... musst Du ein F# Module machen um es in C# konsumieren zu können (alternativ wird daraus automatisch ein Module mit generischem Namen)
  • ... musst Du über Microsoft.FSharp.Core die FSharp Function aufrufen
S
ShadownightProgramming Themenstarter:in
13 Beiträge seit 2020
vor 4 Jahren

Das sollte hquer heißen ... sry das reduzierte h (Planckisches Wirkungsquant) (s. bemerkung XD)

C# best ...

S
ShadownightProgramming Themenstarter:in
13 Beiträge seit 2020
vor 4 Jahren

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)

C# best ...

74 Beiträge seit 2014
vor 4 Jahren

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

Keine Ahnung wie Du darauf kommst. Die Bibliotheken TAlex.MathCore.* scheinen mir nichts mit F# zu tun zu haben.

Ansonsten kann F# und C# Code sich sehr gut gegenseitig ergänzen. F# Module werden zu statischen Klassen und Funktionen zu statischen Methoden kompiliert.

nur weiß ich nicht wie man die 2 Projekte verbindet

Manage references in a project

5.658 Beiträge seit 2006
vor 4 Jahren

Allerdings finde ich, nachdem C# lange Zeit wirklich kürzer UND verständnlicher wurde, wird es seit einiger Zeit nur noch kürzer.

Das liegt aber nicht an C#. Man kann sich in jeder Sprache unverständlich ausdrücken, wenn man sich nur genug Mühe gibt.

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)

Es würde wirklich helfen, wenn du dir mal die Grundlagen von C# aneignest, und dir ein wenig mehr Mühe beim Verfassen deiner Beiträge geben würdest. Es ist kaum zu lesen, was du da schreibst. Und poste doch die wesentlichen Informationen gleich im ersten Beitrag. Dein Problem hier hat nichts mit Quantenphysik oder Differentialgleichungen zu tun, sondern kann mit einem Blick in die Doku deiner Bibliothek gelöst werden.

[FAQ] Wie finde ich den Einstieg in C#?
[Tipp] Schau in die Doku! - Möglichkeiten der Informationsgewinnung

Und bitte lies dir mal [Hinweis] Wie poste ich richtig? durch, da gibt es einige Tips, wie man eine Frage im Forum formuliert, damit einem auch schnell geholfen werden kann. Crossposts werden hier aber nicht geduldet (Punkt 2.2), daher ist der Beitrag jetzt geschlossen.

Help with implementation from TAlex.MathCore library with the derivation Function?

Die Antwort dort ist allerdings schon lesenswert:

if you've written over 5000+ line of code, but you are stumped by how to write a function or if statement, something is really wrong. Was the wave function previously collapsing into "I-know-how-to-write-code" state, but now the wave function is collapsing down to "I-don't-know-how-to-write-code"? Must be Schroedinger's Code Monkey...

Weeks of programming can save you hours of planning

Thema geschlossen