Hilbertmatrix implementieren |
26.11.2013, 18:55 | BieneMaja | Auf diesen Beitrag antworten » |
Hilbertmatrix implementieren Ich möchte gerne die Hilbertmatrix der Dimension 8 implementieren in c99 code. Leider bin ich absolue Anfängerin im Programmieren. Die Sache ist, dass ich die Matrix nicht direkt in der Form impelementieren möchte, sondern zunächst die Matrix Einträge zeilenweise speichern möchte und zwar so: und dann mit dem Programm "createMatrix" erstellen möchte. Das klingt vllt. im ersten Moment umständlich, aber für mich macht das Sinn, da ich "createMatrix" mehrmals brauche mit verschiedensten Matrizen. Kann mir jemand vllt. helfen, zu schreiben für die Einträge meiner Hilbertmatrix? Und ja ich weiß, wie die Hilbertmatrix ausschaut, das müsste man doch dann irgendwie mit for-Schleifen implementieren können? Viele Grüße Biene |
||
26.11.2013, 19:06 | Math1986 | Auf diesen Beitrag antworten » |
RE: Hilbertmatrix implementieren Hallo, ich würde einfach zwei for-Schleifen ineinanderschachteln, also eine für Spalten- und eine für Zeilenindex, und dann direkt die Werte in die Matrix schreiben. |
||
26.11.2013, 21:13 | BieneMaja | Auf diesen Beitrag antworten » |
Ich schaffe es leider nicht zwei for-Schleifen zu schreiben Bisher hab ich sowas probiert: . . . d.h. 8 for-Schleifen für 8 Zeilen der Matrix, aber selbst das hat nicht funktioniert :-( Mein Programm "createMAtrix" sieht übrigens so aus: void createMatrix(double*** mat,double* values,int n){ *mat = (double**)malloc(n*sizeof(double*)); for(int i=0;i<n;i++){ (*mat)[i] = (double*)malloc(n*sizeof(double)); for(int j=0;j<n;j++){ if(values!= NULL) (*mat)[i][j]=values[i*n+j]; else (*mat)[i][j]=0; } } } Die Funktion createMatrix soll wie gesagt nicht verändert werden und ich möchte ihr die 64 value Einträge der 8x8 Hilbertmatrix übergeben Viele Grüße Biene |
||
27.11.2013, 00:38 | BieneMaja | Auf diesen Beitrag antworten » |
Hab mir mittlerweile eine doppelte for-Schleife zusammengebastelt, leider berechnet er nicht die gewünschten Werte, sondern gibt wirre Zahlen aus. Folgendermaßen sieht das bei mir jetz aus: double values[64]; for (int j=0;j<8;j++){ for (int i=0; i<8; i++){ values[i+8*j]==1/(i+1-7*j); } } Liegt es daran, dass mein PC Probleme hat den Bruch 1/(i+1-7*j) richtig zu berechnen? Wäre super nett, wenn mir noch mal jemand auf die Sprünge helfen könnte Viele Grüße Biene |
||
27.11.2013, 01:07 | Lithiesque | Auf diesen Beitrag antworten » |
== ist nicht der Zuweisungs-, sondern der Vergleichsoperator. Außerdem verstehe ich nicht, wie du auf kommst; für ist der Bruch nicht mal definiert. Wieso nicht einfach ? |
||
27.11.2013, 14:20 | BieneMaja | Auf diesen Beitrag antworten » |
oh ja ihr habt natürlich Recht Also hab den Code jetzt mit einfachem "=" Zeichen und der Formel Die Ausgabe ist jetzt die, dass er für den ersten Eintrag richtigerweise 1 ausgibt, für alle anderen Einträge aber den Wert 0 Wie schaff ich das jetzt noch, dass ich (gerundete) Dezimalzahlen bekomme? |
||
Anzeige | ||
|
||
27.11.2013, 14:40 | Math1986 | Auf diesen Beitrag antworten » |
Du musst die Rechnung als Gleitkommadivision implementieren, in C erhältst du bei der Division von zwei Integern wieder einen (abgerundeten) Integer. Probler mal 1D/(j+i+1) Damit wird der Zähler als Double interpretiert und das Ergebnis ist auch ein Double. |
||
27.11.2013, 17:51 | BieneMaja | Auf diesen Beitrag antworten » |
Danke jetzt funktionierts |
|