Autor |
Beitrag |
kili
Hält's aus hier
Beiträge: 13
|
Verfasst: So 25.10.09 20:35
moin moin,
also ich hätte da ja gleich nochmal eine frage: könnt ihr mir sagen wie ich den bereich der komplexen zahlen einfügen kann? also für den fall, das die wuzel aus einer negativen zahl gezogen werden muss?
grüße kilian
C#-Quelltext 1: 2: 3: 4: 5: 6:
| double p = Convert.ToDouble(Console.ReadLine()); double q = Convert.ToDouble(Console.ReadLine()); double zahl1 = p / -2; double zahl2 = Math.Sqrt((zahl1 * zahl1) - q); double ergebnis1 = zahl1 - zahl2 ; double ergebnis2 = zahl1 + zahl2; |
Moderiert von Christian S.: C#-Tags hinzugefügt
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: So 25.10.09 21:09
Hallo,
komplexe Zahlen gibt es in NET von Haus aus nicht; die musst du selbst entwickeln. Dazu bietet sich eine Struktur an; für die Operator-Überladung siehe MSDN How to: Use Operator Overloading to Create a Complex Number Class (C# Programmers Reference); irgendwo gibt es dort sicher auch eine deutsche Version.
Gruß Jürgen
|
|
kili 
Hält's aus hier
Beiträge: 13
|
Verfasst: So 25.10.09 22:03
hmm ja ich hab mir den beitrag über komplexe zahlen durchgelesen. hat mir für mein programm nur nicht wirklich weitergeholfen. naja ich werd noch ein bißchen was ausprobieren
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: So 25.10.09 22:05
Man könnte sich ja auch vorstellen, dass man wahrscheinlich nicht der Erste ist, der komplexe Zahlen nutzen will und schauen, was es da in den weiten des Internets an Klassen gibt 
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: So 25.10.09 23:12
JüTho hat folgendes geschrieben : | komplexe Zahlen gibt es in NET von Haus aus nicht |
Jupp, noch nicht  . Bis dahin lässt sich mit einer Suchmaschine wie Koders.com wie gesagt sicher eine Alternative finden, aber am verlinkten Code gibt es als Grundlage nichts auszusetzen  .
Ich denke eher, es ist noch nicht klar geworden, zu welchem Grad überhaupt eine Einbindung in die Sprache möglich ist. Mit impliziten Konvertierungen und eigenen Operatoren ändert sich der Code zum Glück nur minimal:
C#-Quelltext 1: 2: 3:
| Complex zahl2 = Complex.Sqrt(zahl1 * zahl1 - q); Complex ergebnis1 = zahl1 - zahl2; Complex ergebnis2 = zahl1 + zahl2; |
_________________ >λ=
|
|
gfoidl
      
Beiträge: 157
Erhaltene Danke: 19
Win XP
C#, Fortran 95 - Visual Studio
|
Verfasst: Mo 26.10.09 00:27
Hallo,
Das schaut mal gut aus. Obwohl ich interessant finde dass die Wurzel-Funktion nur eine komplexe Zahl als Ergebnis liefert (anstatt 2 bei der Quadratwurzel). Aber vielleicht wird das noch
mfG Günther
_________________ Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 26.10.09 00:51
gfoidl hat folgendes geschrieben : | Obwohl ich interessant finde dass die Wurzel-Funktion nur eine komplexe Zahl als Ergebnis liefert (anstatt 2 bei der Quadratwurzel). |
Darüber kann man sich natürlich streiten - aber aus welchem Grund sollte es anders sein als bei Math.Sqrt  ? Im Reellen wie Komplexen ist die Quadratwurzel von z mathematisch eben nicht als Lösungsmenge der Gleichung w² = z definiert, sondern als eine ganz bestimmte dieser Lösungen. Wäre sie irgendetwas Anderes als eine Funktion C -> C, dürfte schriftliche Mathematik einfach verdammt umständlich werden  .
_________________ >λ=
|
|
gfoidl
      
Beiträge: 157
Erhaltene Danke: 19
Win XP
C#, Fortran 95 - Visual Studio
|
Verfasst: Mo 26.10.09 01:30
Kha hat folgendes geschrieben : |
Im Reellen wie Komplexen ist die Quadratwurzel von z mathematisch eben nicht als Lösungsmenge der Gleichung w² = z definiert, sondern als eine ganz bestimmte dieser Lösungen. |
Die Wurzel ist schon so definiert nur wird im Reellen meist der Definitionsbereich von w auf die nichtnegative reellen Zahlen beschränkt, da die Funktion über die reellen Zahlen gesehen nicht bijektiv ist (also nicht umkehrbar) und somit das exaktere +- entfällt.
Für die komplexen Zahlen gilt ähnliches. Die 2. Wurzel ist -1 x der 1. Wurzel (und diese wird in .net 4.0 zurückgegeben).
Insofern hast du recht warum es anders sein sollte als bei bei der reellen Wurzel Math.Sqrt. In den technischen Berechnungen die ich kenne werden jedoch immer alle komplexen Wurzeln benötigt und daher hat es mich gewundert warum dann wieder selbst auf die anderen Wurzel geschlossen werden muss wenn es doch gleich implementiert werden hätte können (zB durch eine andere Methode). Glücklicherweise ist es ja nicht allzu aufwändig von einer Wurzel auf n-1 verbleibenden zu kommen
Ich habe allerdings die Kernaussage deiner Antwort nicht ganz kapiert. Vielleicht wiederholt meine Antwort deine oder sie widerspricht dir
mfG Günther
_________________ Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 26.10.09 20:42
gfoidl hat folgendes geschrieben : | Die Wurzel ist schon so definiert nur wird im Reellen meist der Definitionsbereich von w auf die nichtnegative reellen Zahlen beschränkt |
Ok, das war zu ungenau ausgedrückt: Erfüllt w die Gleichung, ist sie eine Wurzel von z, die Wurzel funktion gibt aber nach Definition eine ganz bestimmte dieser Lösungen zurück, keine Menge. Wenn sich eine Methode "Sqrt" nennt, soll sie bitteschön ebenfalls eine Abbildung C -> C sein, nicht mehr und nicht weniger wollte ich sagen. Für Extension Methods ist ja immer noch genug Platz  .
_________________ >λ=
|
|