Multiplikation von Matrix und Vektor

Rock'n

Mitglied
Hey Leute,

also ich muss ein Programm schreiben, welches das Produkt einer Symmetrischen Matrix und eines Vektors berechnet. Bis jetzt hab ich folgendes geschrieben:

Java:
package algebra;
     
    public class SymmetrischeMatrix {
        
        private double [][] koeffizientenFeld = null; 
        
        
        private int anzahlZeilenUndSpalten;
        
         public SymmetrischeMatrix(int groesse) {
              
             this.anzahlZeilenUndSpalten = groesse;
             
             this.koeffizientenFeld = new double[groesse][];
                
             for (int j = 0; j < groesse; j++){
                 koeffizientenFeld[j] = new double[j+1];
             }
                
              }
        public int getGroesse (){
            return anzahlZeilenUndSpalten;
        }
         
        public double getKoeffizient(int row, int col) {
          
            if (row >= col){
                return koeffizientenFeld [row][col];
            }
            else{
                 return koeffizientenFeld [col][row];
            }
        }
        
        public void setKoeffizient(int row, int col, double value){
            if (row >= col){
                 koeffizientenFeld [row][col]=value;
            }
            else{
                  koeffizientenFeld [col][row]=value;
            }
            
            
        }
        
        
        
    
 
}

Java:
package algebra;
 
public class Vektor {
 
    private double [] vektor;
    private int groesse;
    
    public Vektor(int groesse) {
        this.groesse = groesse;
        vektor = new double[groesse];
    }
    
    public void setKoeffizient(double wert, int stelle){
        vektor[stelle] = wert;
    }
 
    public double getKoeffizient(int stelle){
        return vektor[stelle];
    }
    @Override
    public String toString() {
        String ausgabe;
        ausgabe = "Vektor(";
 
        for (int i = 0; i < groesse; i++) {
        ausgabe += vektor[i];
 
        if (i < groesse-1) {
        ausgabe += ",";
        }
        }
 
        ausgabe += ")";
        return ausgabe;
        }
 
    public Vektor multiplizieren(SymmetrischeMatrix matrix) throws Exception {
        Vektor Ergebnisvektor;
        Ergebnisvektor = new Vektor (groesse);
            if (matrix.getGroesse() != groesse){
            throw new Exception("Größe nicht kompatibel");
        }
        for (int j = 0; j < groesse; j++){
            for (int i = 0; i < groesse; i++) {
                double Zwischenwert;
                Zwischenwert = Ergebnisvektor.getKoeffizient(j);
                Zwischenwert += matrix.getKoeffizient(j, i)*this.getKoeffizient(i);
                Ergebnisvektor.setKoeffizient(Zwischenwert, j);
            } 
            
        }
    
    
        
        return Ergebnisvektor;
    }
    
    
}

Java:
package programme;
 
import algebra.SymmetrischeMatrix;
import algebra.Vektor;
 
public class Prüfklasse {
    public static void main(String args[]) {
        
        SymmetrischeMatrix prüfmatrix1 = new SymmetrischeMatrix(4);
        Vektor prüfvektor1 = new Vektor(4);
        
        prüfvektor1.setKoeffizient(0.3, 0);
        prüfvektor1.setKoeffizient(0.2, 1);
        prüfvektor1.setKoeffizient(0.1, 2);
        prüfvektor1.setKoeffizient(0.0, 3);
        
        
        prüfmatrix1.setKoeffizient(0, 0, 1.0);
        prüfmatrix1.setKoeffizient(1, 0, -1.0);
        prüfmatrix1.setKoeffizient(1, 1, 2.0);
        prüfmatrix1.setKoeffizient(2, 0, 0.0);
        prüfmatrix1.setKoeffizient(2, 1, -1.0);
        prüfmatrix1.setKoeffizient(2, 2, 2.0);
        prüfmatrix1.setKoeffizient(3, 0, 0.0);
        prüfmatrix1.setKoeffizient(3, 1, 0.0);
        prüfmatrix1.setKoeffizient(3, 2, -1.0);
        prüfmatrix1.setKoeffizient(3, 3, 2.0);
        
        
 
         try {
                System.out.println("Prüfmatrix1 * Vektor1 = ");
            
                System.out.println(prüfvektor1.multiplizieren(prüfmatrix1));
            } catch (Exception e) {
              System.out.println(e);
            }
        
    
    
    
    
}
leider stimmt das Ergebnis nicht. Könnt ihr mir vielleicht einen Hinweis geben was falsch ist?!

Danke!
 

DrZoidberg

Top Contributor
Ich vermute du hast Zeilen und Spalten durcheinander gebracht. Ein Vektor hat eine Spalte und mehrere Zeilen, nicht umgekehrt.

Versuch mal das hier
Java:
for (int zeile = 0; zeile < groesse; zeile++){
    double Zwischenwert = 0;
    for (int spalte = 0; spalte < groesse; spalte++) {    
        Zwischenwert += matrix.getKoeffizient(zeile, spalte)*this.getKoeffizient(spalte);
    } 
    Ergebnisvektor.setKoeffizient(Zwischenwert, zeile);
}
 

DrZoidberg

Top Contributor
Stimmt, bei genauerer Betrachtung gibt mein Code das selbe Ergebnis wie deiner.

Aber woher weisst du, dass das Ergebnis falsch ist? Und wieso setzt du nur 10 der 16 Koeffizienten?
 

Rock'n

Mitglied
Ich hab es handschriftlich nachgerechnet und daher weiß ich, dass das Ergebnis nicht stimmt.
Naja es handelt sich ja um eine symmetrische Matrix, deswegen dachte ich müsste es reichen wenn ich die Koeffizienten der linken Dreiecksmatrix einsetze.
 

DrZoidberg

Top Contributor
Dann ist deine setKoeffizient Methode falsch. Du setzt da nur ein Feld in der Matrix. Du musst aber immer beide setzen.

Java:
public double getKoeffizient(int row, int col) {
    return koeffizientenFeld [row][col];
}

public void setKoeffizient(int row, int col, double value){
    koeffizientenFeld [row][col]=value;
    if (row != col){
        koeffizientenFeld [col][row]=value;
    }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Matrix-Vektor Multiplikation Allgemeine Java-Themen 8
P Matrix-Vektor-Multiplikation Allgemeine Java-Themen 25
vandread Float/Double probleme bei der Multiplikation?! Allgemeine Java-Themen 3
C Java Compiler und Multiplikation konstanter Faktoren Allgemeine Java-Themen 2
H Multiplikation int*float Allgemeine Java-Themen 2
N lwjgl Projection Matrix löscht Dreieck Allgemeine Java-Themen 1
H Matrix ohne Array erstellen Allgemeine Java-Themen 9
T Google Distance Matrix API Hello World/ Client Secret Allgemeine Java-Themen 3
G Matrix reduzieren zwei Methoden Allgemeine Java-Themen 2
P Matrix erstellen Allgemeine Java-Themen 1
J Matrix Allgemeine Java-Themen 2
R Bibliothek für Darstellung von char auf 5x7 Dot-Matrix Allgemeine Java-Themen 2
K LED-Matrix oder andere "Hardware" für JavaProgrammierung Allgemeine Java-Themen 9
D Suche Matrix Libraries Allgemeine Java-Themen 11
P Matrix von Tastatur in 2D Array??? Allgemeine Java-Themen 7
P Matrix Kurtosis berechnen Allgemeine Java-Themen 40
D 8x8 Matrix mit Schachbrettbeschriftung Allgemeine Java-Themen 8
E Zufall in Matrix Allgemeine Java-Themen 10
S Algoritmus Distribution in einer Matrix Allgemeine Java-Themen 7
C Linie in Matrix machen Allgemeine Java-Themen 5
D Matrix, ArrayList, null-Zellen Allgemeine Java-Themen 6
D Zweidimensionales Array als Matrix ausrpinten lassen Allgemeine Java-Themen 4
S Darstellung einer dynamischen Matrix Allgemeine Java-Themen 9
T Applikation für RGB LED Matrix Allgemeine Java-Themen 7
T DataFrame (Matrix mit mit verschiedenen Typen pro Spalte) Allgemeine Java-Themen 4
S Array Matrix erstellen? Allgemeine Java-Themen 9
RoliMG matrix diagonalen initialisieren Allgemeine Java-Themen 2
M HashMap kapselt zwei Objekte aber wie baut man eine Matrix? Allgemeine Java-Themen 2
B Entfernen von Zeilen/Spalten aus einer Matrix Allgemeine Java-Themen 8
J Matrix mit unterschiedlicher Anzahl von Spalten pro Zeile? Allgemeine Java-Themen 4
W Matrix potenzieren Allgemeine Java-Themen 4
E ArrayList Matrix sortieren Allgemeine Java-Themen 4
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
I Wie Vektor-Grafik in die Zwischenablage kopieren? Allgemeine Java-Themen 2
C Zeilen-"Vektor" aus Excel-Tabelle suchen Allgemeine Java-Themen 0
H Vektor rekursiv erzeugen Allgemeine Java-Themen 2
Zettelkasten Vektor mit Koordinaten erstellen Allgemeine Java-Themen 2
S Vektor in DB speichern Allgemeine Java-Themen 3
O Vektoren in Vektor sortieren aber mit Java 1.4 (!) Allgemeine Java-Themen 4
O Vektor kopieren (Inhalt, nicht Referenzen) Allgemeine Java-Themen 3
B Was sollte ich benutzen Vektor oder ArrayList? Allgemeine Java-Themen 5
B wird Vektor als Referenz übergeben? Allgemeine Java-Themen 5
M Vektor zusammenfassen Allgemeine Java-Themen 3
D Vektor - bestimmte Werte auslesen. Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben