Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.
-
#define _CRT_SECURE_NO_WARNINGS #include <iostream> #include "C:\Users\conrad\source\repos\V1\C09\Cpptime\Cpptime\Cpptime.h" #include "Complex.h" using namespace std; int main() { Time start; const double pi = 3.14159265; cout << start.dayOfWeek(); const int TwoPi = 360; Complex ePowerIfI; double fIradian; for (int fI = 0; fI <= TwoPi; fI++) { fIradian = fI * pi / 180; ePowerIfI.set_real(cos(fIradian)); ePowerIfI.set_imaginaer(sin(fIradian)); cout << fI << "° " << ePowerIfI; } Time end; cout << "start " << start.ascii() << endl; cout << "end " << end.ascii() << endl; cout << " time " << end.delta(&start); }
-
Das Programm überprüft Eulers Identität...... Alle Kommentare willkommen......
-
#include "C:\Users\conrad\source\repos\V1\C09\Cpptime\Cpptime\Cpptime.h"
Conrad, du solltest aufpassen, welche Informationen du versehentlich im Internet preisgibst. Außerdem solltest du die Suchpfade deines Compiler einrichten
Die Klasse
std::complex
aus der Standardbibliothek ist dir bekannt?const int TwoPi = 360;
Das wird garantiert niemanden verwirren
Deine Rechnung ist ein bisschen merkwürdig. Du hast von den Variablennamen her doch eindeutig vor, dassfI
ein Winkel im Bogenmaß ist. Aber es dank solcher Hauer wieTwoPi = 360;
ist es effektiv doch Grad. Und dann rechnest du das wieder zurück ins Bogenmaß. Wozu überhaupt Grad in deinem Programm? Weil die Ausgabe des Winkels lieber in Grad sein soll? Dann rechne es doch dort bei der Ausgabe um, dann kannst du an der Stelle auch einen etwas genaueren Wert für 2π benutzen, als 360…Du weißt, dass der letzte Ausdruck in einer for-Schleife nicht unbedingt ein Inkrement um 1 zu sein braucht? Das kann alles sein, was du möchtest.
sin
undcos
sind im Headercmath
deklariert. Das kann zwar zufällig trotzdem auch ohne diesen funktionieren, muss es aber nicht.Ich sehe nicht, was irgendetwas hier von mit Eulers Identität zu tun haben soll. Du berechnest doch nur Sinus und Cosinus der Winkel 0° bis 360°. Sollten da nicht irgendwo Eulers Konstante, ein imaginäres Element, und eine Potenz vorkommen? Du steckst ja das Wissen schon rein, dass pow(e, i x) = cos(x) + i sin(x) ist.
-
Danke SeppJ,
Es geht um e^ipi +1=0;
360
365
366
Da sind einige Geheimnisse, es ist eine Spielerei, komplexe Zahlen sind ein mächtiges Werkzeug für diferentiale Gleichungen. Danke.
-
@SeppJ ich wollte diesen Graph selber erzeugen:
https://mediathek.htw-berlin.de/cache/b278a39889f16fddbfd985578b69b1bb.png
-
//: eIPi.cpp
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include "Header.h"
#include <cmath>
#include <complex>using namespace std;
int main() {
Time start;
const complex<double> pi{ 3.14159265, 0 };
const complex<double> e{ 2.718282, 0 };complex<double> ePowerIfI; complex<double> i {0, 1}; // Imaginary unit int j = 1; /* ASCII 65 ASCII 66 KIrilisch */ for (complex<double> fI = 0.1; j < 62; j++) { // 36 0 degree Celsius ePowerIfI = pow(e,i * fI); fI += 0.1; cout << fI << "radian " << ePowerIfI << endl; } Time end; cout << "start " << start.ascii() << endl; cout << "end " << end.ascii() << endl; cout << " time " << end.delta(&start);
}
-
Es macht zwar keinen echten Unterschied, aber dank den Wundern von Überladung und Umwandlungen kann man problemlos
complex
mit nicht-complex
Typen mischen. Das heißt, du könnteste
,pi
, undfI
auch alsdouble
definieren und der Rest des Programms würde unangetastet weiter exakt das gleiche tun. Sähe vielleicht ein bisschen schöner aus. Außerdem könnte man dann die Konstanten auch in anderem Kontext benutzen, und beispielsweise feststellen, dasse < pi
. Oder obfI < 6.2
. Was ja mit komplexen Zahlen beides nicht geht.
-
@SeppJ danke, es sind gute Ideen, überladene Funktionen zu üben....Du bist gute Hilfe, danke Dir...
-
@odalv sagte in Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.:
@SeppJ danke, es sind gute Ideen, überladene Funktionen zu üben....Du bist gute Hilfe, danke Dir...
Immer eine gute Übung, aber in diesem Fall war gemeint, dass die Macher von
std::complex
das schon für dich gemacht haben: https://ideone.com/hv2Sna
-
@odalv sagte in Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.:
for (complex<double> fI = 0.1; j < 62; j++) { // 36 0 degree Celsius
Sechsunddreißig Null Grad Celsius? Was hat nun die Temperatur wieder mit Winkeln zu tun? Und was sollen die beiden Zahlen bedeuten?
Ich würde die Loop wahrscheinlich in Grad (Winkel, nicht Temperatur) machen, damit ich da ganzzahlige Grad-Winkel habe und in der Berechnung einfach mit einer Konstanten
deg_to_rad
multiplizieren:const double PI = std::acos(-1.0); const double deg_to_rad = PI / 180.0; // hier kannst du deinen Beginn/Ende/Step einstellen for (double angle_deg = 0.0; angle_deg < 600; angle_deg += 10) { const auto angle_rad = angle_deg * deg_to_rad; ... // rechne mit angle_rad }
-
@odalv sagte in Ich würde diese Ergebnisse ( x, y ) in einem Graph darstellen.:
const complex<double> pi{ 3.14159265, 0 }; const complex<double> e{ 2.718282, 0 };
Noch ein (für Übungscode) nicht ganz so wichtiges Detail am Rande - Ab C++20 gibt es diese Konstanten (endlich) auch im Standard:
#include <numbers> using std::numbers::e; using std::numbers::pi;
Hat den Vorteil, das diese dann maxmiale Genauigkeit für den Datentypen (hier
double
) haben und es eine einzige Stelle gibt, wo sie definiert sind (statt zig Stellen überall im Code verteilt mit unterschiedlich vielen Nachkommastellen und man sich irgendwann wundert, weshalb zwei Programmteile bei der selben Berechnung zu verschiedenen Ergebnissen kommen ).Alternativ kann man sich die Konstanten sogar aus mathematischen Funktionen herausziehen und erreicht damit quasi implizit eine für den Fliesskomma-Datentyp und die Maschine gute Genauigkeit:
#include <cmath> const double pi = 2.0 * std::asin(1.0); const double e = std::exp(1.0);
-
@Finnegan danke, das freut mich
-
@wob danke, ich werde später über 36 erklären.
6x6 Menschliche Temperatur usw
-
@SeppJ danke dir, schönes Wochenende