Funtionswerte in Tabelle überführen
-
^^Dummerweise in C++ schon einmal veröffentlicht, war da aber wohl falsch, also hier noch einmal, sorry dafür:
Also meine Aufgabe besteht darin, die Funktion:
y=exp(-x2)
im Intervall
-1<=x<=1
mit einer Schrittweite von 0,01 (also für x) zu berechnen und alle Ergebnisse in tabellarischer Form zu präsentieren.
Die Funktion selber ist ja denke ich so schon richtig:
z = pow(-x,2); y = exp(z);
Bin mir da selber nur über die Potenz innerhalb der Expotentialfunktion im Unklaren, aber so dürfte es wohl auch gehen.
Die Schleife für diesen Vorgang dürfte in der Art ja auch schon fertig sein:
for (i=-1/*Indexanfang*/;i<=1/*Indexende*/;i=i+1) { y=i+1; printf("%.2f\n",i,y); }
Hauptproblem: Ganz klar, wie baue ich die Schrittweise ein. Mein erster Veruch lautet gesamt gesehen:
#include <stdio.h> #include <math.h> int main () { int ianf,iend,i; float x,y,z; ianf = -1; iend = 1; i=0,01;/*Geht das so?*/ x = i; z = pow(-x,2); y = exp(z); for (i=ianf;i<=iend;i=i+1) { y=i+1; printf("%.2f\n",i,y);/*??Da stecke ich auch noch fest,siehe unten*/ } getchar(); getchar(); return(0); }
Wegen
printf("%.2f\n",i,y);
habe ich halt noch Verständnis-Probleme, Ansatz kann natürlich völlig falsch sein??.
Insgesamt kriege ich jetzt 3*die "null" ausgegeben, logisch nach mienem Schema, weil stehend für die unter Grenze, Schritt 1, ober Grenze, aber irgendwie stecke ich wohl fest.
Weiß jemand einen Ansatz??
-
versuch mal so:
double i; for (i=-1.0; i<1.01; i+=0.01) printf ("%f --> %f\n", i, exp(-i*-i));
-
äääh... ich meinte: exp(-ii)*
-
Danke das sieht schonmal besser aus, als der Mist den ich verzapft hatte, jedoch ist das Ergebnis noch nicht das gewünschte, einfach weil ich mich falsch ausgedrückt habe:
Also Ausgabe sollte wiefolgt aussehen:
x-Wert______y-Wert
0.00________1.0000
0.01________0.9999
0.02________0.9996
...______...
0.99________0.3753
(Natürlich ohne die Linien ())Da sind die -Werte jetzt natürlch mal zur Einfachheit außen vor.
Die x-Werte haben wir ja jetzt schonmal.
-
boenz666 schrieb:
Also Ausgabe sollte wiefolgt aussehen:
und? was kommt bei dir raus?
-
Im c++ Forum sagte ja bereits jemand, dass Gleitkomma-Schleifenzähler aufgrund der Rundungsfehler vermieden werden sollten, womit dieser Jemand auch recht hatte.
Ansonsten musst Du nur noch das printf für formatierte Ausgabe anpassen:#include <stdio.h> #include <math.h> int main() { double x; int idx = -100; printf("x-Wert\ty-Wert\n"); while(idx <= 100) { x = idx / 100.0; printf("%1.2f\t%1.5f\n", x, exp(pow(-x, 2)) ); ++idx; } return 0; }
-
Tachyon schrieb:
Im c++ Forum sagte ja bereits jemand, dass Gleitkomma-Schleifenzähler aufgrund der Rundungsfehler vermieden werden sollten
grösser/kleiner-vergleiche sind aber nicht so schlimm. nur mit == wird man sich oft wundern.
-
floatingpoint-freak schrieb:
Tachyon schrieb:
Im c++ Forum sagte ja bereits jemand, dass Gleitkomma-Schleifenzähler aufgrund der Rundungsfehler vermieden werden sollten
grösser/kleiner-vergleiche sind aber nicht so schlimm. nur mit == wird man sich oft wundern.
Es geht nicht um die Vergleiche sondern um den größer werdenden Fehler bei der Iteration der x-Werte.
-
Tachyon schrieb:
...sondern um den größer werdenden Fehler bei der Iteration der x-Werte.
hast ja recht, aber bei 100 * 0.01 und einer double-variablen müsste es noch gut klappen. bei 'float', glaub ich, geht's aber daneben.
-
Tachyon du bist mein persönlicher c-Gott^^
Habe jetzt noch:
printf("%1.2f\t%1.5f\n", x, exp(pow(-x, 2)) );
zu:
printf("%1.2f\t%1.5f\n", x, exp(-pow(x, 2)) );
geändert und schon stimmen auch die Ergebnisse.
Vielen Dank (auch an alle anderen user, die unterstützend mitgewirkt haben).€: Welcher Befehl genau sorgt im Eigentlichen dafür, dass die zweite Spalte entsprechend ausgegeben wird?
-
was war den hier dran verkehrt
printf ("%f --> %f\n", i, exp(-i*i));
-
Ich denke mal, du meinst das \t. Das ist sozusagen ein Tabulator...
häääh ?? schrieb:
was war den hier dran verkehrt
printf ("%f --> %f\n", i, exp(-i*i));Nichts (im Gegensatz zu zu meinem Vorzeichenfehler
), ich denke mal, er hat nur die formatierte Ausgabe vermisst.