Gyakorlati alapok

Műveletek mátrixban

 

Honlapomon gyakorlati bevezetőként már esett szó a kétdimenziós tömbökről a Kétdimenziós tömb című fejezetben. Ezen matematikai szerkezetek másik neve egyébként "neósan" fogalmazva mátrix. Folytassuk tovább felfedezésüket és alapszintű felhasználásukat, de először nézzük meg a kötelező elméletet!

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

A matematikai mátrix mennyiségek, értékek táblázat alakú elrendezése:

 

www.informatika-programozas.hu

 

Rajta egzakt matematikai műveletek kiválóan végezhetők, felhasználása ezért rendkívül sokoldalú: a fizikától, a számítógépes grafikától kezdve a biológián át egészen a nyelvészetig, számtalan tudományágban használhatók akár az elméleti leírás tömör megfogalmazására, akár a számítások megkönnyítésére vagy automatizálására.

 

A mátrix vízszintes vonalban elhelyezkedő elemei sorokat, függőleges vonalban elhelyezkedő elemei oszlopokat alkotnak. Egy m sorból és n oszlopból álló mátrixot m-szer n mátrixnak nevezzük (m × n), az m és n pozitív egész számok a mátrix dimenziói (kiterjedései). A mátrix dimenzióit mindig először a sorok számával, majd az oszlopok számával adjuk meg.

 

Programozás-technikailag a mátrix tehát kétdimenziós tömbként értelmezhető és ilyen megközelítésben a tömbökkel azonos módon kell őket létrehozni és kezelni.

 

Az alábbi kód további óriási előnye, hogy funkcionálisan szétosztott -tehát a funkciókat külön metódusokban valósítjuk meg-, ezért bármelyik funkció tetszőleges mennyiségben használható fel. A funkciók a következők:

Az összes funkció viszonylag homogén, a meglévő tudásszintükkel hamar implementálható. Kis gondot talán a legutolsó matrixOsztas() metódus okozhat, hiszen 2 db int típusú mátrixszal dolgozunk, amelynek végeredménye így az osztás jellege miatt garantáltan csonkolódni fog. Ezt több helyen is le kell kezelnünk:

public static void matrixKiiras(int matrix[][]){
    for(int i = 0; i <= 3; i++){
        System.out.println();
        for(int j = 0; j <= 3; j++){
            System.out.print(matrix[i][j] + " ");
        }
    }
}

public static void matrixKiiras(double matrix[][]){
    for(int i = 0; i <= 3; i++){
        System.out.println();
        for(int j = 0; j <= 3; j++){
            System.out.print(matrix[i][j] + " ");
        }
    }
}

Nézzük meg a futtatható Java-kódot!

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

import java.util.Random;

public class Main {

public static int[][] matrixFeltoltes(){
    Random rnd = new Random();
    int matrix[][] = new int[4][4];
    for(int i = 0; i < matrix.length; i++){
        for(int j = 0; j < matrix.length; j++){
            matrix[i][j] = rnd.nextInt(90) + 1;
        }
    }
    return matrix;
}

public static void matrixKiiras(int matrix[][]){
    for(int i = 0; i <= 3; i++){
        System.out.println();
        for(int j = 0; j <= 3; j++){
            System.out.print(matrix[i][j] + " ");
        }
    }
}

public static void matrixKiiras(double matrix[][]){
    for(int i = 0; i <= 3; i++){
        System.out.println();
        for(int j = 0; j <= 3; j++){
            System.out.print(matrix[i][j] + " ");
        }
    }
}

public static int minimum(int matrix[][]){
    int min = 91;
    for(int i = 0; i < matrix.length; i++){
        for(int j = 0; j < matrix[i].length; j++){
            if(min > matrix[i][j]){
                min = matrix[i][j];
            }
        }
    }
    return min;
}

public static int maximum(int matrix[][]){
    int max = 0;
    for(int i = 0; i < matrix.length; i++){
        for(int j = 0; j < matrix[i].length; j++){
            if(max < matrix[i][j]){
                max = matrix[i][j];
            }
        }
    }
    return max;
}

public static void minimumKereses(int matrix[][], int min){
    int i, j;
    for(i = 0; i < matrix.length; i++){
        for(j = 0; j < matrix[i].length; j++){
            if(min == matrix[i][j]){
                System.out.println((j + 1) + ". oszlop " + (i + 1) + ". sorában van.");
            }
        }
    }
}

public static void maximumKereses(int matrix[][], int max){
    int i, j;
    for(i = 0; i < matrix.length; i++){
        for(j = 0; j < matrix[i].length; j++){
            if(max == matrix[i][j]){
                System.out.println((j + 1) + ". oszlop " + (i + 1) + ". sorában van.");
            }
        }
    }
}

public static int[][] matrixOsszeadas(int tombMatrix1[][], int tombMatrix2[][], int tombEredmeny[][]){
    for(int i = 0; i <= 3; i++){
        for(int j = 0; j <= 3; j++){
            tombEredmeny[i][j] = tombMatrix1[i][j] + tombMatrix2[i][j];
        }
    }
    return tombEredmeny;
}

public static int[][] matrixKivonas(int tombMatrix1[][], int tombMatrix2[][], int tombEredmeny[][]){
    for(int i = 0; i <= 3; i++){
        for(int j = 0; j <= 3; j++){
            tombEredmeny[i][j] = tombMatrix1[i][j] - tombMatrix2[i][j];
        }
    }
    return tombEredmeny;
}

public static int[][] matrixSzorzas(int tombMatrix1[][], int tombMatrix2[][], int tombEredmeny[][]){
    for(int i = 0; i <= 3; i++){
        for(int j = 0; j <= 3; j++){
            tombEredmeny[i][j] = tombMatrix1[i][j] * tombMatrix2[i][j];
        }
    }
    return tombEredmeny;
}

public static double[][] matrixOsztas(int tombMatrix1[][], int tombMatrix2[][], double tombEredmeny[][]){
    for(int i = 0; i <= 3; i++){
        for(int j = 0; j <= 3; j++){
            tombEredmeny[i][j] = (double)tombMatrix1[i][j] / tombMatrix2[i][j];
        }
    }
    return tombEredmeny;
}

public static void main(String[] args) {
    int tombMatrix1[][] = new int[4][4];
    tombMatrix1 = matrixFeltoltes();
    matrixKiiras(tombMatrix1);

    System.out.println();

    int min = minimum(tombMatrix1);
    System.out.println("\nA legkisebb elem: " + min);
    minimumKereses(tombMatrix1, min);

    int max = maximum(tombMatrix1);
    System.out.println("\nA legnagyobb elem: " + max);
    maximumKereses(tombMatrix1, max);

    int tombMatrix2[][] = new int[4][4];
    int tombEredmeny[][] = new int[4][4];
    tombMatrix2 = matrixFeltoltes();
    matrixKiiras(tombMatrix2);
    System.out.println("\n");
    System.out.print("Összeadás:");
    matrixOsszeadas(tombMatrix1, tombMatrix2, tombEredmeny);
    matrixKiiras(tombEredmeny);

    System.out.println("\n");
    System.out.print("Különbség:");
    matrixKivonas(tombMatrix1, tombMatrix2, tombEredmeny);
    matrixKiiras(tombEredmeny);

    System.out.println("\n");
    System.out.print("Szorzat:");
    matrixSzorzas(tombMatrix1, tombMatrix2, tombEredmeny);
    matrixKiiras(tombEredmeny);

    System.out.println("\n");
    System.out.print("Hányados:");
    double tombOsztasiEredmeny[][] = new double[4][4];
    matrixOsztas(tombMatrix1, tombMatrix2, tombOsztasiEredmeny);
    matrixKiiras(tombOsztasiEredmeny);
    }
}

 

Végeredmény (például):

7 70 28 45
2 9 16 39
40 59 48 8
39 23 87 81

A legkisebb elem: 2
1. oszlop 2. sorában van.

A legnagyobb elem: 87
3. oszlop 4. sorában van.

60 78 49 70
23 67 75 89
77 57 50 86
30 2 82 23

Összeadás:
67 148 77 115
25 76 91 128
117 116 98 94
69 25 169 104

Különbség:
-53 -8 -21 -25
-21 -58 -59 -50
-37 2 -2 -78
9 21 5 58

Szorzat:
420 5460 1372 3150
46 603 1200 3471
3080 3363 2400 688
1170 46 7134 1863

Hányados:
0.11666666666666667 0.8974358974358975 0.5714285714285714 0.6428571428571429
0.08695652173913043 0.13432835820895522 0.21333333333333335 0.43820224719101125
0.5194805194805194 1.0350877192982457 0.96 0.09302325581395349
1.3 11.5 1.0609756097560976 3.5217391304347827