Problem bei Weitergabe von Array an Funktion?
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Schlangenmensch zu dem Edit: dann bekomme ich einen error " 'beta' cannot be used as a member pointer since it is of type 'double' "
dann schreib mal
9.0 / 4.0 * beta
, immer den wert hinter dem komma mit angeben.@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Wade1234 Aber meine if Abfrage steht ja innerhalb der for Schleife, also
for(int i = 0; i<10; i++){
if (){...}
}
dann müsste das i doch noch definiert sein weil ich die Schleife noch nicht verlassen habe oder?
Einen Fehler bekomme ich jedenfalls nichtaber du rufst ja danach
if(Pfaff(kx_e[i], ky_e[j], kz_e[l], Delta_0) == 0) { double x = kx_e[i]; double y = ky_e[j]; double z = kz_e[l]; write_data(x, y, z); continue; }
auf und eigentlich sollten i, j und l da nicht mehr deklariert sein.
-
@redpottpotter Das kommt aus deinem entsprechenden Kontext. Vergleiche die Aufrufe mal. (E2_p ist die Kopie von dir).
#include <iostream> #include <cmath> double E_p(double alpha, double beta, double mu, double kx, double ky, double kz){ return (alpha + 9/4.*beta)*(pow(kx,2)+pow(ky,2)+pow(kz,2))-mu; } double E2_p(double alpha, double beta, double mu, double kx, double ky, double kz){ return (alpha + 9/4*beta)*(pow(kx,2)+pow(ky,2)+pow(kz,2))-mu; } int main() { auto e = E_p(2,2,2,2,2,2); auto e2 = E2_p(2,2,2,2,2,2); std::cout << e << std::endl; std::cout << e2 << std::endl; } }
-
@Wade1234 ok und wie mache ich, dass in meiner if Abfrage die jeweiligen Werte kx_e[i], ky_e[j], kz_e[l] aus den for Schleifen in denen ich mich befinde benutzt werden? Das verstehe ich gerade nicht ganz
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Wade1234 Aber meine if Abfrage steht ja innerhalb der for Schleife, also
for(int i = 0; i<10; i++){
if (){...}
}
dann müsste das i doch noch definiert sein weil ich die Schleife noch nicht verlassen habe oder?
Einen Fehler bekomme ich jedenfalls nichtDein Code vom Eröffnungspost sieht aber so aus:
for(int i = 0; i < Nx; i++){ kx_e[i] = kx_e[0] + i*(ke_xlimits[1]-ke_xlimits[0])/(Nx-1); } // i-Schleife zu Ende for(int j = 0; j < Ny; j++){ ky_e[j] = ky_e[0] + j*(ke_ylimits[1]-ke_ylimits[0])/(Ny-1); } // j-Schleife zu Ende for(int l = 0; l < Nz; l++){ kz_e[l] = kz_e[0] + l*(ke_zlimits[1]-ke_zlimits[0])/(Nz-1); } // l-Schleife zu Ende // l hätte hier auch den Wert Nz -> Zugriff ausserhalb vom Array. if(Pfaff(kx_e[i], ky_e[j], kz_e[l], Delta_0) == 0) { double x = kx_e[i]; double y = ky_e[j]; double z = kz_e[l]; write_data(x, y, z); continue; }
Du arbeitest mit anderem Code als du hier zeigst. Da kann die keiner helfen.
-
@Schlangenmensch Danke für den Tipp! Habe es jetzt auf 9.0/4.0 geändert und bekomme jetzt nur noch eine einzige Lösung (0,0,0) ausgegeben...
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@Wade1234 ok und wie mache ich, dass in meiner if Abfrage die jeweiligen Werte kx_e[i], ky_e[j], kz_e[l] aus den for Schleifen in denen ich mich befinde benutzt werden? Das verstehe ich gerade nicht ganz
Was meinst du, wofür die Klammern { } da sind?
-
@DirkB ahh stimmt tut mir leid - ich habe den Code gerade abgetippt weil ich mit meinem Computer gerade keinen Internetzugriff habe. Sorry für die Umstände die If Abfrage steht innerhalb der for Schleifen
-
hat es denn seine richtigkeit, dass sich die werte in den schleifen nur um die faktoren, i, j und l unterscheiden?
-
@redpottpotter sagte in Problem bei Weitergabe von Array an Funktion?:
@DirkB ahh stimmt tut mir leid - ich habe den Code gerade abgetippt weil ich mit meinem Computer gerade keinen Internetzugriff habe. Sorry für die Umstände die If Abfrage steht innerhalb der for Schleifen
D.h aber auch, dass noch mehr Fehler drin sein können.
Im Übrigen:
@manni66 sagte in Problem bei Weitergabe von Array an Funktion?:Du zeigst nicht den echten Code.
-
@Wade1234 ja, ich möchte ein 3D Gitter abrastern...also kleinschrittig alle Punkte in einem 3 D Koordinatensystem ablaufen (also bis zu meiner Betragsgrenze a)
-
@redpottpotter und dass kx_e[0], ky_e[0] und kz_e[0] überschrieben werden, ist auch korrekt?
for(int i = 0; i < Nx; i++){ kx_e[i] = kx_e[0] + i*(ke_xlimits[1]-ke_xlimits[0])/(Nx-1); for(int j = 0; j < Ny; j++){ ky_e[j] = ky_e[0] + j*(ke_ylimits[1]-ke_ylimits[0])/(Ny-1); for(int l = 0; l < Nz; l++){ kz_e[l] = kz_e[0] + l*(ke_zlimits[1]-ke_zlimits[0])/(Nz-1);
beim ersten durchlauf überschreibst du das nämlich und eigentlich hast du dann kein lineares raster mehr.
-
@Wade1234 stimmt...ich hab es jetzt so geändert:
double ke_xlimits[2] = {-a, a}; double ke_ylimits[2] = {-a, a}; double ke_zlimits[2] = {-a, a}; //kx_e[0] = ke_xlimits[0]; //ky_e[0] = ke_ylimits[0]; //kz_e[0] = ke_zlimits[0]; for(int i = 0; i < Nx; i++){ kx_e[i] = ke_xlimits[0] + i*(ke_xlimits[1]-ke_xlimits[0])/(Nx-1); for(int j = 0; j < Ny; j++){ ky_e[j] = ke_ylimits[0] + j*(ke_ylimits[1]-ke_ylimits[0])/(Ny-1); for(int l = 0; l < Nz; l++){ kz_e[l] = ke_zlimits[0] + l*(ke_zlimits[1]-ke_zlimits[0])/(Nz-1); if(Pfaff(kx_e[i], ky_e[j], kz_e[l], Delta_0) == 0) { double x = kx_e[i]; double y = ky_e[j]; double z = kz_e[l]; write_data(x, y, z); continue; }
so müsste es doch passen und linear alle punkte erfassen oder? meine Ausgabe ist dieselbe, immernoch (0,0,0) als einzige "Lösung"
-
soll pfaff immer 0 zurückliefern (zeile 74)? nimm mal die bedingung raus, dann müsstest du deine ergebnisse eigentlich alle angezeigt bekommen.
-
@Wade1234 ja, ohne die bedingung bekomme ich das Raster das ich möchte, das funktioniert. Mein Ziel ist aber, nur die Werte kx, ky, kz ausgegeben zu bekommen, für die Pfaff = 0 ist. Also eigentlich war meine idee, jeden Rasterpunkt einmal einzusetzen und zu prüfen: ist Pfaff für diesen Punkt gleich =0 ? wenn ja, dann schreib den Rasterpunkt auf - wenn nein, weiter im Text.
-
@redpottpotter dann solltest du mal überprüfen, ob deine berechnungen in pfaff überhaupt stimmen. also du musst nicht alle berechnungen in eine zeile knallen, sondern du kannst (und solltest!) auch für jeden rechenschritt eine eigene variable anlegen und das ergebnis dort speichern. der compiler optimiert das nachher raus, aber du kannst im debugger ganz toll die zwischenergebnisse ansehen.
-
@Wade1234 Das habe ich schon...was mich aber eigentlich am meisten verwundert ist, dass wenn ich meine ausgegebene "Lösung" (0,0,0) in Pfaff einsetze definitiv nicht 0 rauskommen kann. Deshalb denke ich dass beim Durchlaufen des Codes ja auf jeden Fall etwas schief gehen muss..
-
@redpottpotter ein grund mehr, den debugger zu benutzen bzw. die zwischenergebnisse anzuzeigen.
-
@Wade1234 ich versuche mal, mir die Zwischenergebnisse immer ausgeben zu lassen...auf jeden Fall danke für deine Mühe!
-
Ich möchte hier mal auf Test Driven Development TDD hinweisen.
Ansonsten habe ich hier den Überblick verloren, wie dein aktueller Code jetzt aussieht. Vlt willst du den ja nochmal posten, dann können wir den nochmal überfliegen (Wenn möglich Copy&Paste aus deinem original Source Code).