Array mit double-Wertebereich füllen


  • Mod

    Hast du mal Multiplikation in Betracht gezogen?



  • @SeppJ anstatt die ganzen Variablen mit )m+l+... ? meinst du dort? sprich Zeile 21


  • Mod

    @Ricky sagte in Array mit double-Wertebereich füllen:

    @SeppJ anstatt die ganzen Variablen mit )m+l+... ? meinst du dort? sprich Zeile 21

    Nein, ich meine wie in "Schmeiß deine Lösung weg, nimm Abstand, und denk noch einmal ganz neu über die Problemstellung nach!". Und da könnte vielleicht das Stichwort "Multiplikation" helfen.



  • @SeppJ vielleicht hast du recht... vielleicht brauche ich einfach auch mal eine Pause die "lösung" funktioniert auf erster linie schonmal aber es ist einfach sehr umständlich gemacht... ich werde das dann bis Morgen ruhen lassen. Auch wenn es nicht zufriedenstellend ist so ins bett zu gehen. Aber Danke für den Anstoß! dein "jemanden komplett aus der Bahn werfen" hat mir grade auch irgendwie gut getan, sonst hätte ich bis morgens 5 Uhr noch versucht meine Lösung zu optimieren.


  • Mod

    Vielleicht noch ein Hinweis: Die Lösung ist ganz furchtbar einfach.



  • @Ricky: Schau dir mal den Wertebereich von rand an und überlege, wie du dann eine Projektion auf den Wertebereich 0 - 2*PI hinbekommst (das eine Stichwort hat @SeppJ ja schon gegeben - und das andere ist das Gegenteil davon ;-).



  • @Ricky sagte in Array mit double-Wertebereich füllen:

    ich habe Ansätze gemacht die zufälligen Zahlen zwischen 0-2pi kriege ich nicht hin, unser Prof meinte wenn sowas ist müsst ihr das mit srand machen dann mit % und den Wertebereich abstimmen, aber wenn ich das mache kommen ja nur int-Werte raus durch die % Operation.

    Warum rand()? C++ hat doch viel bessere Möglichkeiten Zufallszahlen zu erzeugen.

    Warum also keine Gleichverteilung nehmen?

    Oder eine wunderschöne Normalverteilung?





  • @SeppJ @Th69 @Quiche-Lorraine ich habe auch mal mit dem Prof geschrieben... er meinte es ginge nicht darum den Array mit zufallszahlen zu füllen, sondern das de rAbstand zwischen den Werten gleich sein soll er hat mir dazu noch eine Aufgabe geschickt aber da blicke ich gar nicht mehr durch... da wollte ich es schritt für schritt durch arbeiten, aber ich blick es einfach nicht...
    (
    Die beiden Parameter µ (Mittelwert) und σ (Standardabweichung) sollen als
    veränderliche Parameter vorgegeben werden.
    b) Legen Sie eine konstante Variable DIM an, in der die Gesamtanzahl an
    berechneten Werten gespeichert wird.
    c) Legen Sie einen Vektor x für die x-Werte und einen Vektor y für die y-Werte der
    Funktion mit der Länge DIM an.
    d) Legen Sie die Variablen x_min und x_max an. Bestimmen Sie alle x-Werte im
    Intervall [x_min; x_max]. Es sollen exakt DIM Werte berechnet werden und
    der Abstand zwischen zwei Werten soll immer gleich groß sein. Die Ergebnisse
    werden im Vektor x gespeichert.
    )

    bei d bin ich komplett raus, da habe ich keine Ahnung was genau gemeint ist wie ich das speicher und so ist kein thema, nur verstehe ich das mit dem abstand nicht, wenn es doch bis DIM geht und DIM ein int ist und DIM z.B. 1000 groß ist muss ich dann von 0-1000 die x werte da rein knallen in den Array? das macht doch keinen Sinn.... aber so hätte jeder Wert den gleichen Abstand zu dem anderen und zwar 1...



  • @DirkB ja das ist mir bekannt, ist das ein wichtiges Problem?



  • @Ricky sagte in Array mit double-Wertebereich füllen:

    @DirkB ja das ist mir bekannt, ist das ein wichtiges Problem?

    Damit kannst du den Wertebereich von rand() leicht auf 0.0 bis 1.0 umrechnen. Von da aus sollte es kein Problem sein, auf andere Bereiche zu rechnen.


  • Mod

    @Ricky sagte in Array mit double-Wertebereich füllen:

    d) Legen Sie die Variablen x_min und x_max an. Bestimmen Sie alle x-Werte im
    Intervall [x_min; x_max]. Es sollen exakt DIM Werte berechnet werden und
    der Abstand zwischen zwei Werten soll immer gleich groß sein. Die Ergebnisse
    werden im Vektor x gespeichert.
    )

    bei d bin ich komplett raus, da habe ich keine Ahnung was genau gemeint ist wie ich das speicher und so ist kein thema, nur verstehe ich das mit dem abstand nicht, wenn es doch bis DIM geht und DIM ein int ist und DIM z.B. 1000 groß ist muss ich dann von 0-1000 die x werte da rein knallen in den Array?

    Zeig mal die Stelle, wo steht, dass es bis DIM gehen soll.



  • @SeppJ genau das war es was ich nicht verstanden hatte in der Aufgabe x_min und x_max haben ja keinen Wertebereich habe beide einfach mal definiert und kam zu einem ergebnis was mir eventuell in meiner eigentlichen aufgabe helfen würde ich habe jetzt für meine EIGENTLICHE frage in diesem Forum jetzt sowas hier, jedoch weiß ich nicht genau ob dies richtig ist.

    #include <cmath>
    #include <iostream>
    #include <iomanip>
    
    #define _USE_MATH_DEFINES
    #include <math.h>
    
    using namespace std;
    
    int main() {
    	
    	const int N = 100;
    	double x[N] = {};
    	double y[N] = {};
    	double x_min = 0;
    	double x_max = 2;
    	double x_ges = (x_max - x_min) / N;
    
    	for (int i = 0; i < N; i++) {
    		x[i] = x_min + i * x_ges * M_PI;
    
    		y[i] = (sin((x[i])) * sin((x[i])));
    		cout << fixed;
    		cout << setprecision(2);
    		cout << "Xwerte: " << x[i] << endl;
    		cout << "Ywerte: " << y[i] << endl;
    		
    	}
    
    
    }
    


  • @Ricky sagte in Array mit double-Wertebereich füllen:

    sondern das de rAbstand zwischen den Werten gleich sein soll

    also Abstand = (max - min) / Anzahl?

    Edit:
    mhm, oder ... / (Anzahl - 1)



  • @Ricky sagte in Array mit double-Wertebereich füllen:

    genau das war es was ich nicht verstanden hatte in der Aufgabe x_min und x_max haben ja keinen Wertebereich habe beide einfach mal definiert und kam zu einem ergebnis was mir eventuell in meiner eigentlichen aufgabe helfen würde ich habe jetzt für meine EIGENTLICHE frage in diesem Forum jetzt sowas hier, jedoch weiß ich nicht genau ob dies richtig ist.

    Oh oh, das sind Grundlagen.

    Ich hole man ein wenig weiter aus. Hast du die Gleichung y=f(x) verstanden? Man steckt ein x rein und bekommt ein y raus. Nun möchte man sich ein Bild der Funktion machen. Also geht man hin, definiert sich eine Menge von x, steckt jeden einzelnen Wert in die Funktion und bekommt so eine Menge y. Und nun plottet man die x Werte gegenüber den y Werten.

    Ein Beispiel in R:

    x=seq(0, 2, 0.1)
    y=sin(x)*sin(x)
    plot(x, y)
    

    Zu deinen vermutlichen Problemen:

    1.) Die Funktion f(x) muss nicht unbedingt von x abhängen. Da kann beispielsweise auch f(x) = 1 stehen. Oder f(x) liefert Zufallswerte zurück.

    2.) Für die Berechnung der x Werte nimmt man fast immer äquidistante Werte:

    //x[i] = x_min + i * x_ges * M_PI;
    x[i] = x_min + i * x_ges;                   // Warum nicht so?
    

    In der Variable xges berechnest du in die Breite des Intervalls geteilt durch die Anzahl der Schritte N. Variable xges ist also die Schrittweite.

    Was kommt also raus, wenn i 0 ist, und was kommt raus, wenn i N ist? Und wie hoch die Differenz x[i+1]-x[i]?



  • @Quiche-Lorraine sagte in Array mit double-Wertebereich füllen:

    In der Variable xges berechnest du in die Breite des Intervalls geteilt durch die Anzahl der Schritte N. Variable xges ist also die Schrittweite.

    Meine Frage dazu wäre dann: wofür steht das "ges"? Ich würde eine Variable, die die Schrittweite in x bezeichnet, eher delta_x nennen. Oder auch dx. Oder auch x_stepsize. (oder: hier andere unmissverständliche Bezeichnung einfügen) Aber unter "ges" verstehe ich eher "gesamt", wenn es ein deutschsprachiges Programm ist - ansonsten kann ich mir darunter nichts vorstellen.



  • @wob
    Natürlich hast du Recht. Ich habe den Namen aus dem Code von @Ricky übernommen.

    Ich wollte aber zuerst mal die Bedeutung der Variable erklären. Im nächsten Schritt hätte ich ihm dann empfohlen den Namen zu ändern. Ich bin mir nämlich nicht sicher, auf welchem Stand der TE ist.



  • @Quiche-Lorraine Ja, meine Bemerkung war zwar eine Antwort auf deinen Text, aber war natürlich hauptsächlich an @Ricky gerichtet.



  • @Quiche-Lorraine sagte in Array mit double-Wertebereich füllen:

    Oh oh, das sind Grundlagen.

    Ich hole man ein wenig weiter aus. Hast du die Gleichung y=f(x) verstanden? Man steckt ein x rein und bekommt ein y raus. Nun möchte man sich ein Bild der Funktion machen. Also geht man hin, definiert sich eine Menge von x, steckt jeden einzelnen Wert in die Funktion und bekommt so eine Menge y. Und nun plottet man die x Werte gegenüber den y Werten.

    Ein Beispiel in R:

    x=seq(0, 2, 0.1)
    y=sin(x)*sin(x)
    plot(x, y)
    

    @Quiche-Lorraine das mit der Funktion hatte ich verstanden das ist ja wie in Mathematik ja auch, man hat Funktionsargument was dann das x ist und dann den dementsprechenden Funktionswert in Abhängigkeit des Funktionsargumenten.

    Zu deinen vermutlichen Problemen:

    1.) Die Funktion f(x) muss nicht unbedingt von x abhängen. Da kann beispielsweise auch f(x) = 1 stehen. Oder f(x) liefert Zufallswerte zurück.

    Das habe ich jetzt nicht ganz verstanden gehabt

    2.) Für die Berechnung der x Werte nimmt man fast immer äquidistante Werte:

    //x[i] = x_min + i * x_ges * M_PI;
    x[i] = x_min + i * x_ges;                   // Warum nicht so?
    

    Weil es doch der Werteberecih von 0- 2pi ist, daher hab ich dann probiert, oder eher gemacht, das ich die Schritte in x_ges ausrechne und dann mit pi multipliziere damit ich halt den Bereich von 0 - 2pi abgedeckt habe

    In der Variable xges berechnest du in die Breite des Intervalls geteilt durch die Anzahl der Schritte N. Variable xges ist also die Schrittweite.

    Das ist korrekt zumindest versucht.

    Was kommt also raus, wenn i 0 ist, und was kommt raus, wenn i N ist? Und wie hoch die Differenz x[i+1]-x[i]?

    wenn i 0 ist, dann wäre es ja x_min+0x_gespi also dementsprechend 0 da x_min 0 und i auch 0 ist. Bei i=N, dann wäre es 0+100 * x_ges * pi= dann 2 * pi, oder ist das irgendwie falsch zumindest wollte ich es so programieren... kommt doch dann hin, oder?

    Wie hoch die Differenz x[i+1]-x[i]?

    das habe ich nicht ganz verstanden wieso genau ist das relevant für mich?
    aber dann ja wenn i =0 wäre wäre es ja dann x[0+1]-x[0] somit x[1]... bei i = N wäre das dann ja auch x[1] weil x[100+1]-x[100] = x[1]

    Vielen Dank auf jeden fall für die Antwort @Quiche-Lorraine .



  • @Ricky

    Das habe ich jetzt nicht ganz verstanden gehabt

    Und das verstehe ich nicht ganz. Denn du hast folgendes geschrieben...

    d) Legen Sie die Variablen x_min und x_max an. Bestimmen Sie alle x-Werte im
    Intervall [x_min; x_max]. Es sollen exakt DIM Werte berechnet werden und
    der Abstand zwischen zwei Werten soll immer gleich groß sein. Die Ergebnisse
    werden im Vektor x gespeichert.
    )

    bei d bin ich komplett raus, da habe ich keine Ahnung was genau gemeint ist wie ich das speicher und so ist kein thema, nur verstehe ich das mit dem abstand nicht, wenn es doch bis DIM geht und DIM ein int ist und DIM z.B. 1000 groß ist muss ich dann von 0-1000 die x werte da rein knallen in den Array? das macht doch keinen Sinn.... aber so hätte jeder Wert den gleichen Abstand zu dem anderen und zwar 1...

    Deine Aufgabe scheint nämlich eine simple Plotting-Aufgabe zu sein. Da fehlt nur noch der Schritt "Schreiben sie die Daten in eine Gnuplot Datei und stellen sie die diese dar".

    Weil es doch der Werteberecih von 0- 2pi ist, daher hab ich dann probiert, oder eher gemacht, das ich die Schritte in x_ges ausrechne und dann mit pi multipliziere damit ich halt den Bereich von 0 - 2pi abgedeckt habe

    Warum dann nicht x_min = 0 und x_max = 2*pi setzen?

    wenn i 0 ist, dann wäre es ja x_min+0x_gespi also dementsprechend 0 da x_min 0 und i auch 0 ist. Bei i=N, dann wäre es 0+100 * x_ges * pi= dann 2 * pi, oder ist das irgendwie falsch zumindest wollte ich es so programieren... kommt doch dann hin, oder?

    Weil bei i = 0 x_min und bei i = N x_max herauskommen muss.

    Wie hoch die Differenz x[i+1]-x[i]? das habe ich nicht ganz verstanden wieso genau ist das relevant für mich?

    Weil du die Äquidistanz noch nicht verstanden hast und auf dem Schlauch stehst. Gebe diese mal in der Console aus, und schau dir die Werte. Ich fürchte dann fällt bei dir der Groschen.