? Matrix / Matrizen ?

Status
Nicht offen für weitere Antworten.

sascha123

Mitglied
hallo zusammen! habe schon gegoogelt und auch hier die suche benutzt, aber leider nicht das gefunden, was ich haben wollte. und das ist eine grundlegende erklärung, was eigentlich matrix und matrizen sind, wofür man sie verwendet usw... das einzige, was ich bis jetzt zu verstehen meine ist, das eine matrix immer aus einem mind. 2-dimensionalen array aufgebaut. ich wäre sehr dankbar dafür, wenn mir von euch jemand das mal erklären oder mir einen guten link geben kann!

vielen dank schonmal im vorraus für eure bemühnungen!

gruß sascha
 

Bert Brenner

Bekanntes Mitglied
Damit erstellst du ein 2 Dimensionales Array das mit int Werten gefüllt werden kann.

Kannst du wie eine Tabelle mit 10 Spalten und 10 Zeilen sehen.
 

dotlens

Top Contributor
hier ein codebeispiel:
Code:
int wert = 0;
int[][] a = new int[10][10];
for(int i = 0; i < 10; i++){
	for(int j = 0; j < 10; j++){
		a[i][j] = wert++;
		System.out.println(a[i][j]);
	}
}
in java schreibt man beim deklarieren nicht a[][] sondern int[][]. Auch wenn neuerdings auch a[][] funktioniert.
 

sascha123

Mitglied
das hab ich jetzt mal versucht. allerdings gibt das programm mir kein feld aus, sondern untereinander die zahlen von 1 bis 99???


Code:
public class matrix1 {
   public static void main(String[] args) {

int wert = 0;
int[][] a = new int[10][10];
for(int i = 0; i < 10; i++){
   for(int j = 0; j < 10; j++){
      a[i][j] = wert++;
      System.out.println(a[i][j]);
   }
}
}
}
 

Wildcard

Top Contributor
Code:
public class matrix1 { 
   public static void main(String[] args) { 

int wert = 0; 
int[][] a = new int[10][10]; 
for(int i = 0; i < 10; i++){ 
   for(int j = 0; j < 10; j++){ 
      a[i][j] = wert++; 
      System.out.print(a[i][j]); 
   } 
    System.out.println();
} 
} 
}
Klassennamenen werden groß geschrieben!
 

Bleiglanz

Gesperrter Benutzer
Willst du die mathematische Definition oder wissen, wie man eine Matrix in Java implementiert?

mathematisch (vereinfacht):

eine Matrix ist eine Abbildung A von einer IndexMenge I in die Menge der (reellen/ganzzahligen/sonstigen) Zahlen

wenn die Indexmenge I = {1,2,3}, dann schreibt man die Abbildung einfach hin, indem man die Werte aufzählt

A = (a_1, a_2, a_3)

(das wär dann ein Sonderfall, nämlich ein Vektor aus 3 Zahlen, manchmal auch als 1x3 Matrix bezeichnet); dabei schreibt man a_i = A(i) = Wert der Abbildung am Index i (das ist nur eine Notation)


wenn die Indexmenge I = {(1,1,),(1,2),(2,1),(2,2)} aus Paaren (i,j) natürlicher Zahlen besteht, dann hast du den "Normalfall" einer Matrix, die kann man dann als rechteckiges Schema hinschreiben, wobei man a_ij = A(i,j) schreibt

Code:
A = ( a_11, a_12 
        a_21, a_22)
= die Abbildung, die (1,1) den Wert a_11 zuordnet usw.

In Java macht man sowas mit Arrays (wobei aber die indices bei 0 anfangen)
 

dotlens

Top Contributor
meez hat gesagt.:
dotlens hat gesagt.:
in java schreibt man beim deklarieren nicht a[][] sondern int[][]. Auch wenn neuerdings auch a[][] funktioniert.

Hallo?? Hähh? :autsch:
[url hat gesagt.:
http://www.galileocomputing.de/openbook/javainsel4/javainsel_03_005.htm#Rxx365java03005040000F81F03C106[/url]]Eine Array-Variablendeklaration ähnelt einer gewöhnlichen Deklaration, nur dass nach dem Datentyp oder den Variablen die Zeichen »[« und »]« gesetzt werden müssen. Uns ist es freigestellt, welche Schreibweise wir wählen. Hauptsache, es werden überhaupt Klammern gesetzt. Wie bei der gesamten Programmierung, so sollte auch hier konsistent vorgegangen werden – einmal so, einmal so, behindert die schnelle Wahrnehmung von Programmquelltext.
ich hab es in meinem buch so gelernt dass man die klammern zum Datentyp setzt
 

sascha123

Mitglied
äh....ja! also die erklärung von wildcard scheint gut zu sein, ist aber ein bißchen schwierig für mich zu verstehen. um die mathematische definition gehts mir weniger, sondern wirklich um die implementierung in java. und was man dann alles machen kann, wie zum bsp. matrixaddition/-multiplikation/usw
 

Wildcard

Top Contributor
sascha123 hat gesagt.:
äh....ja! also die erklärung von wildcard scheint gut zu sein, ist aber ein bißchen schwierig für mich zu verstehen.
Sieh dir einfach den Code an den du verwendet hast:
Code:
public class matrix1 { 
   public static void main(String[] args) { 

int wert = 0; 
int[][] a = new int[10][10]; 
for(int i = 0; i < 10; i++){ 
   for(int j = 0; j < 10; j++){ 
      a[i][j] = wert++; 
      System.out.println(a[i][j]); 
   } 
} 
} 
}
Das heißt:
gehe jede Zeile und jede Spalte durch, inkrementiere den Wert, und mach ein System.out.println();
Code:
public class matrix1 { 
   public static void main(String[] args) { 

int wert = 0; 
int[][] a = new int[10][10]; 
for(int i = 0; i < 10; i++){ 
   for(int j = 0; j < 10; j++){ 
      a[i][j] = wert++; 
      System.out.print(a[i][j]); 
   } 
    System.out.println(); 
} 
} 
}
Der Code macht folgendes:
Laufe die Spalten durch, inkremtiere den Wert und gib die werte mit System.out.print (also ohne Zeilenumbruch) aus.
Wenn du in die nächste Zeile kommst mach ein println.
Besser verständlich?
 

mic_checker

Top Contributor
Wenn du Matrizenaddition etc. machen willst könnte eine eigene Klasse "Matrix" vielleicht sinnvoll sein. In dieser könntest du dann diverse Methoden implementieren, wie addiere(),transponiere(),multipliziere() etc.

Die Addition zweier Matrizen ist äussert simpel, die transponierte Matrix aufzustellen ist auch nicht viel schwerer, bei der Matrizen-Multiplikation musst du ein-zwei Dinge beachten....

Du kannst ja immer noch posten wenn du dich dadran probierst und damit Probleme hast, ich möchte dich aber nicht "verunsichern"....
 

sascha123

Mitglied
danke an wildcard, mic_checker und alle anderen.
hab das mit dem ausgeben die ganze zeit falsch gehabt, weil ich das "ln" immer hab stehen lassen....
aber jetzt hab ichs kapiert. ich meld mich dann nochmal, wenn ich mit der addition/multipliaktion probs haben sollte.

gruß sascha
 

sascha123

Mitglied
hallo! ich hab mich dann ma grade an der addition versucht:

Code:
public class matrix1 {
	public static void main(String[] args) {
		
		int wert=0;
		int wert2=0;
		int[][] a = new int[3][3];
		int[][] b = new int[3][3];
		
		for(int i = 0; i<3; i++){
			for(int j = 0; j<3; j++){
				a[i][j] = wert++;				
				System.out.print(a[i][j] + " ");
		
			}
			System.out.println();
				
		}
		System.out.println();
		
		for(int i = 0; i < 3; i++) {
			for(int j = 0; j < 3; j++){
				b[i][j] = wert2++;
				System.out.print(b[i][j] + " ");
			}
			System.out.println();		
		}	
			System.out.println();
		
		
		int[][] c = new int[3][3]; 
		for(int i = 0; i < 3; i++) {
			for(int j = 0; j < 3; j++) {
				c[i][j] = a[i][j] + b[i][j];
				System.out.print(c[i][j] + " ");
			}
			System.out.println();		
		}	
	
	}
}

So funktioniert das auch. würde nur gerne wissen, wie man das vll noch übersichtlicher, vereinfachter oder so machen kann?

gruß sascha
 

dotlens

Top Contributor
'wet2' benötigst du eigentlich nicht, du kannst einfach 'wert' wieder auf 0 setzen.
Schön programmiert würdes du konstanten für die grösse der Array verwenden. diese kannst du dann auch in den vorschleifen benutzen. und wenn du einmal die Array vergrössen möchtest, brauchst du blos eine Zahl zu ändern.
Code:
private final int arrayGroesse= 3;
 

mic_checker

Top Contributor
Er meint es (wahrscheinlich so):

Code:
public class Matrix1 {
   private static int zeilen = 3;
   private static int spalten = 3;
   public static void main(String[] args) {
      
      int wert=0;
      int wert2=0;
      int[][] a = new int[zeilen][spalten];
...

Btw. Klassennamen schreibt man groß.
 

mic_checker

Top Contributor
Noch ein Tipp:
Ich würde eine extra Klasse "Matrix" schreiben, später noch eine Testklasse.
Die klasse Matrix könnte dann so anfangen z.B.:

Code:
public class Matrix
{
	final private int spalten;
	final private int zeilen;
	private int[][] elemente;
	
	public Matrix(int z,int s)
	{
		if(z <= 0 || s <= 0)
			throw new RuntimeException("Ungültige Parameter im Konstruktor");
		
		elemente = new int[z][s];
		
		zeilen = z;
		spalten = s;
	}
...
	public void pruefeIndizes(int z,int s)
	{
		if(z < 0 || s < 0 || z >= zeilen || s >= spalten)
			throw new RuntimeException("Ungültige Indizes -> Über/Unterschreitung");
	}
	
	public int get(int z,int s)
	{
		pruefeIndizes(z,s);
		
		return elemente[z][s];
	}
	
	public void set(int z,int s,int wert)
	{
		pruefeIndizes(z,s);
		
		elemente[z][s] = wert;
	}
...

Das Erfragen und Setzen von Werten erfolgt über die getter/setter Methoden. In diesen wird anfangs überprüft ob die Werte im zulässigen Bereich liegen.

Dann könntest du noch Methoden definieren wie:

Code:
	public Matrix addiere(Matrix add)
	{
....
	}
	
	public Matrix transponiere()
	{
.....	
        }
	
	public Matrix inverse()
	{
        }

Methoden zur Matrizenmultiplikation natürlich nicht weglassen! ;)
 
G

Guest

Gast
hi mic_checker, danke für deine bemühungen.
werd mir das jetzt mal in ruhe reinziehen. sieht aber alles logisch aus :wink:

gruß sascha
 
G

Guest

Gast
ich schreib einfach mal hier rein :)
ich hab probleme damit eine methode zum transponieren einer matrix zu schreiben. Bei quadratischen Matrizzen ist das auch kein Problem, wenn ich aber z.b. eine 2x3 zu einer 3x2 Matrix transponieren will, ändert sich ja das Format meines Matrix Objektes bzw. das dahinter stehende mehrdimensinale Feld.
Wie kann ich also das über einen Matrix Konstruktor erzeugte Feld ändern?

mein Konstruktor und paar ausgewählte Methoden aus der Klasse siehe unten:

Code:
class Matrix
{
	double [][] mat;
	int zeilen,spalten;
	
	public Matrix(double [][] m) //Konstruktor für leere mxn Matrix
	{
		mat = m;
		zeilen = m.length;
		spalten = m[0].length;
	}
.......
public void belegeMatrix(int bereich) 
	//Erzeugen einer Matrix mit zufälligen Einträgen in einem ZahlenBereich
	{
		for (int i=0;i<zeilen;i++)
		{
			for (int j=0;j<spalten;j++)
			{
				mat[i][j] = Math.random()*bereich;
			}	
		}	
	}

public String toString() 
	{
		String ausgabeString = new String();
		ausgabeString = "\t";
		for (int i=0;i<this.zeilen;i++)
		{
			for (int j=0;j<this.spalten;j++) 
			{
				ausgabeString += (int) getValueAt(i,j)+"  ";
			}
			if (i != zeilen)// letzte zeile?
			{
				ausgabeString +="\n\t";
			}
		}

		return ausgabeString;
	}

public static void main(String [] args)
	{
		Matrix xx = new Matrix(new double [2][3]);
		int SKALAR = 3;
		
		xx.belegeMatrix(100); //belege leere mXn Matrix mit Einträgen im Bereich 0 bis 100
                  xx.add(xx);
                  xx.multiply(SKALAR);
	}

ich habe also in der main methode eine 2x3 Matrix erzeugt. Wie kann ich nun in einer transpose() Methode, das mat Feld auf [3][2] ändern, ohne, dass er rummeckert?
plz help.
 

mic_checker

Top Contributor
Allgemein kannst du so vorgehen:
Die transponierte Matrix hat so viele Zeilen wie die alte Spalten und so viele Spalten wie die alte Zeilen.

Nachdem du eine entsprechende Matrix erzeugt hast kannst du in ner for-Schleife das ganze praktisch umsetzen.

Hab hier mal alten Code ausgekramt, der sich auch damit befasste:

Code:
public class Matrix
{
	final private int spalten;
	final private int zeilen;
	private int[][] elemente;
	
	public Matrix(int z,int s)
	{
		if(z <= 0 || s <= 0)
			throw new RuntimeException("Ungültige Parameter im Konstruktor");
		
		elemente = new int[z][s];
		
		zeilen = z;
		spalten = s;
	}
....
public void pruefeIndizes(int z,int s)
	{
		if(z < 0 || s < 0 || z >= zeilen || s >= spalten)
			throw new RuntimeException("Ungültige Indizes -> Über/Unterschreitung");
	}
	
	public int get(int z,int s)
	{
		pruefeIndizes(z,s);
		
		return elemente[z][s];
	}
	
	public void set(int z,int s,int wert)
	{
		pruefeIndizes(z,s);
		
		elemente[z][s] = wert;
	}
.....
	public Matrix transponiere()
	{
		Matrix t = new Matrix(spalten,zeilen);
		
		for(int i = 0;i < zeilen;i++)
			for(int j = 0;j < spalten;j++)
				t.set(j,i,this.get(i,j));
		
		return t;
	}
....

Habs lang nicht mehr getestet, falls noch Code fehlt poste ich den auch noch....solltest du an deine Variante anpassen können.
 
G

Guest

Gast
danke das funktioniert sehr gut.
Warum ich das nicht gleich über ne Matrix methode gemacht habe.
Nein ich versteif mich in ne void methode...

:toll: :toll: :toll:
 

mos

Mitglied
Geschmackssache ist es eigentlich nicht. In C wird es mit int a[] gemacht, Java ist da anders, obwohl einfachheitshalber beides geht.
 

mic_checker

Top Contributor
Auf was bezieht sich dein Posting? Konnte nirgendwo die Frage sehen ob man "int[] a" oder "int a[]" schreiben muss - darauf beziehst du dich ja (oder ?).

Falls ich einfach nur blind bin nehm ich alles zurück und behaupte das gegenteil ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I matrix aufgabe Java Basics - Anfänger-Themen 22
L Zweidimensionaler Array; n x m - Matrix überprüfuen Java Basics - Anfänger-Themen 35
C Matrix mit Array ausgeben Java Basics - Anfänger-Themen 6
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
F Adjunkte Matrix erstellen Java Basics - Anfänger-Themen 3
M Matrix Java Basics - Anfänger-Themen 3
F Matrix Multiplikation Java Basics - Anfänger-Themen 3
B Dünn besetzte Matrix Java Basics - Anfänger-Themen 7
Al3xand3r01 Matrix, Nachbarelemente Java Basics - Anfänger-Themen 16
E Rückwärtsmultiplikation einer invertierten matrix Java Basics - Anfänger-Themen 2
U Dreiecks-Matrix mit Array Java Basics - Anfänger-Themen 3
Z Matrix Klasse mit Mehrdimensionalen Array (Addition, Multiplikation, to String) Java Basics - Anfänger-Themen 57
E 2D Array - char durch die Matrix "wandern" lassen Java Basics - Anfänger-Themen 7
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
B Diskrete Faltung (Matrix) Randfälle Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
N Quadratische Matrix inkl Summe Java Basics - Anfänger-Themen 8
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
D Methoden Matrix Multiplikation Java Basics - Anfänger-Themen 27
O Matrix, Vektor Java Basics - Anfänger-Themen 9
H 2D Array, Symmetrische Matrix Java Basics - Anfänger-Themen 12
S Matrix spaltenweise befüllen Java Basics - Anfänger-Themen 1
T Zufällige Matrix in neue Matrix schreiben Java Basics - Anfänger-Themen 6
C Matrix-Werte werden nicht wie erwartet ausgegeben Java Basics - Anfänger-Themen 7
C Matrix erstellen Spaltensumme, Zeilensumme, Diagonale Java Basics - Anfänger-Themen 1
S Methoden Transponierte Matrix Java Basics - Anfänger-Themen 3
N Vererbung Submatrix mit Verweis auf Matrix erstellen Java Basics - Anfänger-Themen 9
J Matrix erstellen Java Java Basics - Anfänger-Themen 7
B Transponiertes Matrix Java Basics - Anfänger-Themen 12
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
C Matrix transponieren - Hilfe Java Basics - Anfänger-Themen 1
D Ausgabe einer Matrix mit System.out.println Java Basics - Anfänger-Themen 6
T Art 4 Felder Matrix Memory Java Basics - Anfänger-Themen 2
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
L Matrix(Array) minimieren... Java Basics - Anfänger-Themen 9
E Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 7
S eingegebene Matrix anzeigen Java Basics - Anfänger-Themen 4
J Matrix für Schachbrett Java Basics - Anfänger-Themen 6
G tga Datei lesen und in eine matrix umwandeln Java Basics - Anfänger-Themen 1
G Bilddaten in Matrix umwandeln Java Basics - Anfänger-Themen 1
T Eine String Matrix erstellen die eine boolean Funtion verwendet Java Basics - Anfänger-Themen 10
O Matrix Multiplizieren Java Basics - Anfänger-Themen 4
S LWJGL - Matrix vom Matrixstack laden Java Basics - Anfänger-Themen 3
T Matrix auf Symmetrie überprüfen Java Basics - Anfänger-Themen 6
V Matrix Transponieren Java Basics - Anfänger-Themen 3
V Methoden Matrix als 1D Array mit Werten füllen Java Basics - Anfänger-Themen 12
W Zweidimensionale Arrays als Matrix ausgeben Java Basics - Anfänger-Themen 8
R Matrix-Vektor-Multiplikation Java Basics - Anfänger-Themen 13
O Matrix ordnen Java Basics - Anfänger-Themen 4
M Symmetrische Matrix Java Basics - Anfänger-Themen 2
W Methoden Rang von einer Matrix mit Gauss Java Basics - Anfänger-Themen 0
U Matrix Subtrahieren Java Basics - Anfänger-Themen 12
E Input/Output convert string to two dimensional char and output = matrix Java Basics - Anfänger-Themen 2
A daten vom 1d array in 2d matrix speichern Java Basics - Anfänger-Themen 3
I Matrix überprüfen Java Basics - Anfänger-Themen 8
Z Matrix mit Vektor multiplizieren Java Basics - Anfänger-Themen 13
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
N Matrix/Vektoren Java Basics - Anfänger-Themen 3
N Matrix Java Basics - Anfänger-Themen 14
T Methode, die eine 2 dimensionale Matrix kopiert. Java Basics - Anfänger-Themen 16
J Matrix Java Java Basics - Anfänger-Themen 3
D 2 mehrdimensionale Matrix einlesen Java Basics - Anfänger-Themen 2
A N*N Matrix Determinante berechnen Java Basics - Anfänger-Themen 47
K Quadratische Matrix um 90° drehen Java Basics - Anfänger-Themen 5
C Programm zur Berechnung der Spur einer Matrix Java Basics - Anfänger-Themen 4
B Zeilenumbruch (zweidim. Matrix) Java Basics - Anfänger-Themen 2
O Java Matrix mal Matrix über while Schleife... Java Basics - Anfänger-Themen 10
O Transponieren einer Matrix per While-Schleife Java Basics - Anfänger-Themen 3
M Matrix - Probelm Java Basics - Anfänger-Themen 7
O 2D Matrix befüllen mit geraden Zahlen!? Java Basics - Anfänger-Themen 14
J Java Matrix befüllen Java Basics - Anfänger-Themen 5
M Matrix Matrix Multiplikation Java Basics - Anfänger-Themen 6
F Matrix Java Basics - Anfänger-Themen 11
E Array als Matrix Java Basics - Anfänger-Themen 21
G OOP Parameter Matrix Java Basics - Anfänger-Themen 2
N Matrix Klasse Java Basics - Anfänger-Themen 4
B Maske an eine Matrix anpassen Java Basics - Anfänger-Themen 5
W Matrix übergeben Java Basics - Anfänger-Themen 7
T Matrix transponieren Java Basics - Anfänger-Themen 17
W Eine Methode schreiben, ob eine Matrix eine Diagonalmatrix ist.? Java Basics - Anfänger-Themen 3
M String Datei in Float-Matrix umwandeln Java Basics - Anfänger-Themen 8
D Problem: Werte eine Matrix vergleichen! Java Basics - Anfänger-Themen 5
B Matrix Java Basics - Anfänger-Themen 2
Semox Matrix multiplizieren Java Basics - Anfänger-Themen 4
N Matrix an toString Java Basics - Anfänger-Themen 7
C Diagonale in einem NxN Matrix Java Basics - Anfänger-Themen 6
F Einträgen von Matrix zu sotieren Java Basics - Anfänger-Themen 2
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5
J Spezielle Matrix ausgeben ! Java Basics - Anfänger-Themen 8
S Problem bei Matrix Addition Java Basics - Anfänger-Themen 5
F matrix werte übergeben Java Basics - Anfänger-Themen 5
M Hauptdiagonale Matrix berechnen Java Basics - Anfänger-Themen 6
M Klassenerstellung für Matrix mit Rechenopperationen Java Basics - Anfänger-Themen 42
D Matrix .bat datei erstellen und öffnen Java Basics - Anfänger-Themen 2
J Matrix ausgeben Java Basics - Anfänger-Themen 9
N Matrix Matrix Produkt Java Basics - Anfänger-Themen 7
N prüfe ob etwas in einer Matrix steht... Java Basics - Anfänger-Themen 14
L rechtecke zeichnen anhand von matrix Java Basics - Anfänger-Themen 27
J Matrix aus Datei einlesen mit StreamTokenizer Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben