Hallo Leute,
ich bin zum Ersten mal hier unterwegs, daher erst ein mal vielen Dank, dass es so eine Möglichkeit gibt :applaus::toll:
Nun hoffe ich, dass mir geholfen werden kann.
Mein Problem ist eine Getter Methode für ein 1D Array, in welchem werte einer Matrix gespeichert werden, die nur Einträge auf der Hauptdiagonalen und x Nebendiagonalen hat (Bandmatrix).
Ich habe lange überlegt und leider keine Lösung gefunden, die sich universell anwenden lässt..
Im wesentliche versuche ich über die Spalten-/Zeileneingabe des Benutzers die Position im Feld zu ermitteln. Die klappt leider nur für den sehr simplen Fall, dass es sich um ein Hauptdiagonalen Element handelt, da diese den ersten Block im Array darstellt.
Hier mein Konstruktor für der/die/das ???:L 1D Array
Hier mein bisheriger Code für die Methode
Wie man sieht klappt es händisch für n=m und n=m+1.
Eine Idee von mir war darauf zu spekulieren, dass der Benutzer nur Matrizen mit einer Dimension übergibt, die ich zuvor händisch möglich gemacht habe.:bloed: :bloed: :bloed:
Ziemlich dämlicher Ansatz, mit viel zu viel Arbeit.
:idea: Jetzt habe ich mir gedacht, dass ich einfach immer ans Ende eines Blocks laufe und dann wieder zurück zu dem Element, dass ich haben will.
Beispiel: Benutzer will den Wert an der Stelle 3,5 (Zeile(n),Spalte(m)).
Die Schleife stellt fest, dass n=m+2 ist. Jetzt müsste man in den 2. Block gehen.
Ansatz: Dimension(Anzahl Elemente auf Hauptdiagonalen)= dim
dim + dim-1 + dim-2 (nun stehe ich am Ende der Elemente der 2. Diagonalen) - (dim-2-m)
(jetzt sollte ich eigentlich am gewünschten Element stehen.)
Nur leider weiß ich nicht wie ich das als Schleife ausdrücken kann...
Daher wende ich mich hoffnungsvoll an euch.
Liebe Grüße
ich bin zum Ersten mal hier unterwegs, daher erst ein mal vielen Dank, dass es so eine Möglichkeit gibt :applaus::toll:
Nun hoffe ich, dass mir geholfen werden kann.
Mein Problem ist eine Getter Methode für ein 1D Array, in welchem werte einer Matrix gespeichert werden, die nur Einträge auf der Hauptdiagonalen und x Nebendiagonalen hat (Bandmatrix).
Ich habe lange überlegt und leider keine Lösung gefunden, die sich universell anwenden lässt..
Im wesentliche versuche ich über die Spalten-/Zeileneingabe des Benutzers die Position im Feld zu ermitteln. Die klappt leider nur für den sehr simplen Fall, dass es sich um ein Hauptdiagonalen Element handelt, da diese den ersten Block im Array darstellt.
Hier mein Konstruktor für der/die/das ???:L 1D Array
Java:
/**
* Konstruktor zur Erstellung einer symmetrischen Band-Matrix
* Band Matrix wird als 1D-Feld, i welchem nur die Hauptdiagonale
* und die unteren Bandbreiten-Elemten dargestellt werden, um Speicherplatz zu sparen
* @param dim = Dimension der Matrix
*/
public SymmetrischeBandMatrix(int dim,short bandbreite1)throws Ausnahme{
// Ausnahmen für Bandbreite größer als Dimension der Matrix
if (bandbreite1 > dim){
throw new Ausnahme("Die Bandbreite übersteigt die Dimension der Matrix");
}
//Hilfsvariable um rekursive Folge mit Schleife darzustellen
int laenge=0;
this.dim=dim;
// Schleife um rekursive Folge darzustellen
for (int i=0; i<bandbreite1;i++){
laenge += (dim-i);
}
// Feld mit der Laenge laenge wird erzeugt
this.matrix1D=new double [laenge];
}
Hier mein bisheriger Code für die Methode
Java:
ublic double getKoeffizient1D(int n,int m){
// wenn n=m wird auf Element der Hauptdiagonalen zugegriffen
if (n==m){
return matrix1D[n];
}
// Schleife mit Start index 1
for (int i=1; i<bandbreite1;i++)
{
//i läuft bis zur Bandbreite
if (n==m+i){
return matrix1D[];//Stelle??! dim + dim -1 + dim -2 .... + m?
}
if (n==m+1){
return matrix1D[dim+m];
}
}
Wie man sieht klappt es händisch für n=m und n=m+1.
Eine Idee von mir war darauf zu spekulieren, dass der Benutzer nur Matrizen mit einer Dimension übergibt, die ich zuvor händisch möglich gemacht habe.:bloed: :bloed: :bloed:
Ziemlich dämlicher Ansatz, mit viel zu viel Arbeit.
:idea: Jetzt habe ich mir gedacht, dass ich einfach immer ans Ende eines Blocks laufe und dann wieder zurück zu dem Element, dass ich haben will.
Beispiel: Benutzer will den Wert an der Stelle 3,5 (Zeile(n),Spalte(m)).
Die Schleife stellt fest, dass n=m+2 ist. Jetzt müsste man in den 2. Block gehen.
Ansatz: Dimension(Anzahl Elemente auf Hauptdiagonalen)= dim
dim + dim-1 + dim-2 (nun stehe ich am Ende der Elemente der 2. Diagonalen) - (dim-2-m)
(jetzt sollte ich eigentlich am gewünschten Element stehen.)
Nur leider weiß ich nicht wie ich das als Schleife ausdrücken kann...
Daher wende ich mich hoffnungsvoll an euch.
Liebe Grüße