25: Vektoren 3 – erweitertes Matrix-Programm

 

Schreiben Sie unter Nutzung von Aufgabe 24 die folgenden Methoden:

  • Division aller Elemente einer Matrix durch das betragsmäßig größte Element
  • Zerlegung einer Matrix A in jeweils 3×3 große Teilmatrizen
  • Länge eines Vektors (als 1-zeilige Matrix):
    \left| v \right| = \sqrt{v_1^2+\ldots+v_n^2}

Lösung


public class Aufgabe25 extends Aufgabe24
{
	public static double[][] MaxQuotient (double[][] dMatrix)
	{
		for (int i = 0; i < dMatrix.length; ++ i)
			for (int j = 0; j < dMatrix[0].length; ++ j)
				dMatrix[i][j] /= MaximalerWert(dMatrix);

		return dMatrix;
	} // end ProduktSkalar

	public static void DreierZerlegung (double[][] dMatrix)
	{
		for (int i = 0; i < dMatrix.length / 3; ++ i)
			for (int j = 0; j < dMatrix[0].length / 3; ++j)
			{
				System.out.println(dMatrix[3 * i][j * 3]
				           + " " + dMatrix[3 * i][j * 3 + 1]
				           + " " + dMatrix[3 * i][j * 3 + 2]);
				System.out.println(dMatrix[3 * i + 1][j * 3]
				       	   + " " + dMatrix[3 * i + 1][j * 3 + 1]
				       	   + " " + dMatrix[3 * i + 1][j * 3 + 2]);
				System.out.println(dMatrix[3 * i + 2][j * 3]
				       	   + " " + dMatrix[3 * i + 2][j * 3 + 1]
				       	   + " " + dMatrix[3 * i + 2][j * 3 + 2]);

				System.out.println("-----");
			}

	}

	public static double Betrag (double[] dVektor)
	{
		double dQuadSumme = 0;
		for (int i = 0; i < dVektor.length; ++ i)
			dQuadSumme += dVektor[i] * dVektor[i];
		return Math.sqrt(dQuadSumme);
	}

	public static void main(String[] args)
	{
		double[] dTest1 = {1, 2, 3};
		double[][] dTest3 = {{1, 2, 3}, {2, 3, 4}, {4, 5, 6}};

		double[][] dTest4 = {{1, 2, 3, 4, 5, 6},
							 {2, 3, 4, 3, 2, 1},
							 {4, 6, 8, 6, 4, 2},
							 {3, 5, 9, 7 ,4, 1},
							 {2, 4, 8, 7, 6, 1},
							 {2, 3 ,1, 5, 4, 5}};

		System.out.println("-----");
		DreierZerlegung(dTest4);

		System.out.println(MaxQuotient(dTest3)[1][1]);

		System.out.println(Betrag(dTest1));

	}
}

Und die extended Aufgabe24:


public class Aufgabe24
{
	public static double[][] Summe (double[][] dMatrixA, double[][] dMatrixB)
	{
		double[][] dErgebnis = new double[dMatrixA.length][dMatrixA[0].length];

		for (int i = 0; i < dMatrixA.length; ++ i)
			for (int j = 0; j < dMatrixA[0].length; ++ j)
				dErgebnis[i][j] = dMatrixA[i][j] + dMatrixB[i][j];

		return dErgebnis;
	} // end Summe

	public static double[][] ProduktSkalar (double[][] dMatrix, double dSkalar)
	{
		for (int i = 0; i < dMatrix.length; ++ i)
			for (int j = 0; j < dMatrix[0].length; ++ j)
				dMatrix[i][j] *= dSkalar;

		return dMatrix;
	} // end ProduktSkalar

	public static double MaximalerWert (double[][] dMatrix)
	{
		double dMax = 0;
		for (int i = 0; i < dMatrix.length; ++ i)
			for (int j = 0; j < dMatrix[0].length; ++ j)
				if (dMatrix[i][j] > dMax)
					dMax = dMatrix[i][j];
		return dMax;
	} // end MaximalerWert

	public static double[][] Transponierte (double[][] dMatrix)
	{
		double[][] dErgebnis = new double[dMatrix.length][dMatrix[0].length];
		for (int i = 0; i < dMatrix.length; ++ i)
			for (int j = 0; j < dMatrix[0].length; ++ j)
				dErgebnis[i][j] = dMatrix[j][i];
		return dErgebnis;
	} // end Transponierte

	public static double[][] TeilMatrix (double[][] dMatrix, int[] iBereich)
	{
		double[][] dErgebnis
			= new double[iBereich[2] - iBereich[0] + 1]
			            [iBereich[3] - iBereich[1] + 1];
		for (int i = iBereich[0]; i <= iBereich[2]; ++ i)
			for (int j = iBereich[1]; j <= iBereich[3]; ++ j)
				dErgebnis[i - iBereich[0]][j - iBereich[1]] = dMatrix[i][j];
		return dErgebnis;
	} // end TeilMatrix

	public static void main (String[] args)
	{
		double[][] dTest1 = {{1, 2, 3}, {4, 5, 6}};
		double[][] dTest2 = {{2, 3, 4}, {5, 7, 6}};
		double[][] dTest3 = {{1, 2, 3}, {2, 3, 4}, {4, 5, 6}};
		int[] iBereich = {1, 1, 2, 2};

		System.out.println(Summe(dTest1, dTest2)[1][0]);
		System.out.println(ProduktSkalar(dTest1, 5)[1][0]);
		System.out.println(MaximalerWert(dTest2));
		System.out.println(Transponierte(dTest3)[2][0]);
		System.out.println(TeilMatrix(dTest3, iBereich)[1][0]);
	} // end main
} // end Aufgabe 24