Hilbertmatrix implementieren

Neue Frage »

BieneMaja Auf diesen Beitrag antworten »
Hilbertmatrix implementieren
Hallo zusammen

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 Wink
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.
BieneMaja Auf diesen Beitrag antworten »

Ich schaffe es leider nicht zwei for-Schleifen zu schreiben verwirrt 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 Wink
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
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 ?
BieneMaja Auf diesen Beitrag antworten »

oh ja ihr habt natürlich Recht Freude
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?
 
 
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.
BieneMaja Auf diesen Beitrag antworten »

Danke jetzt funktionierts Freude
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »