Tag: Matriks

  • Contoh Penggunaan Array Pada Bahasa C -Persamaan Linier dengan 3 Variabel Peubah

    Berikut ini contoh penggunaan Array pada Bahasa C untuk asus permsaaa Linier 3 Variabel.

    Penggunaan Array Pada Bahasa C

    Misalkan terdapat tiga buah persamaan linier dengan 3 variabel peubah yakni :

    1. x + 3y – 2z = 10
    2. 2x – y + 6z = 3
    3. x + y – 2z = 5

    Tentukan solusi dari nilai x, y dan z!

    A. Solusi dengan Perhitungan Matriks

    Langkah pertama yang harus dilakukan adalah menyusun persamaan tersebut ke dalam matriks yakni AX = B

    \begin{bmatrix}
    1 & 3 & -2\\
    2 & -1 & 6\\
    1 & 1 & -2 \\
    \end{bmatrix}
    
    \begin{bmatrix}
    x\\
    y\\
    z \\
    \end{bmatrix} =
    
    \begin{bmatrix}
    10\\
    3\\
    5 \\
    \end{bmatrix}

    untuk mencari nilai x kita perlu menginvers matriks

    Determinant matriks A:

    |A| = 1(2 – 6) – 3(-4 – 6) – 2(2 + 1) = 20

    cari matriks Adjoint A

    Ajd \ (A)= \begin{bmatrix}
    -4 & 4 & 16\\
    10 & 0 & -10\\
    3 & 2 & -7 \\
    \end{bmatrix}

    selanjutnya bagikan (Ajd (A)) / |A|, hasilnya adalah

    A^-=
    \begin{bmatrix}
    -\frac{1}{5} & \frac{1}{5} & \frac{4}{5}\\
    \frac{1}{2} & 0 & -\frac{1}{2}\\
    \frac{3}{20} & \frac{1}{10} & -\frac{7}{20} \\
    \end{bmatrix}
    X=A^-B=\begin{bmatrix}
    -\frac{1}{5} & \frac{1}{5} & \frac{4}{5}\\
    \frac{1}{2} & 0 & -\frac{1}{2}\\
    \frac{3}{20} & \frac{1}{10} & -\frac{7}{20} \\
    \end{bmatrix}
    
    \begin{bmatrix}
    10\\
    3\\
    5 \\
    \end{bmatrix}
    X=\begin{bmatrix}
    \frac{60}{23}\\
    \frac{57}{23}\\
    \frac{1}{23} \\
    \end{bmatrix}

    maka nilai masing adalah :

    x = 60/23
    y = 57/23
    z = 1/23

    B. Solusi dengan Perhitungan Matriks

    Kasus ini dapat diselesaikan dengan metode Array dengan bahasa C dengan perintah berikut :

    #include <stdio.h>
    
    #define N 3
    
    void getCofactor(float A[N][N], float temp[N][N], int p, int q, int n) {
        int i = 0, j = 0;
        for (int row = 0; row < n; row++) {
            for (int col = 0; col < n; col++) {
                if (row != p && col != q) {
                    temp[i][j++] = A[row][col];
                    if (j == n - 1) {
                        j = 0;
                        i++;
                    }
                }
            }
        }
    }
    
    float determinant(float A[N][N], int n) {
        float D = 0;
        if (n == 1)
            return A[0][0];
    
        float temp[N][N];
        int sign = 1;
        for (int f = 0; f < n; f++) {
            getCofactor(A, temp, 0, f, n);
            D += sign * A[0][f] * determinant(temp, n - 1);
            sign = -sign;
        }
    
        return D;
    }
    
    void adjoint(float A[N][N], float adj[N][N]) {
        if (N == 1) {
            adj[0][0] = 1;
            return;
        }
    
        int sign = 1;
        float temp[N][N];
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                getCofactor(A, temp, i, j, N);
                sign = ((i + j) % 2 == 0) ? 1 : -1;
                adj[j][i] = (sign) * (determinant(temp, N - 1));
            }
        }
    }
    
    int inverse(float A[N][N], float inverse[N][N]) {
        float det = determinant(A, N);
        if (det == 0) {
            printf("Singular matrix, can't find its inverse");
            return 0;
        }
    
        float adj[N][N];
        adjoint(A, adj);
    
        for (int i = 0; i < N; i++)
            for (int j = 0; j < N; j++)
                inverse[i][j] = adj[i][j] / det;
    
        return 1;
    }
    
    void multiply(float mat1[N][N], float mat2[N], float res[N]) {
        for (int i = 0; i < N; i++) {
            res[i] = 0;
            for (int j = 0; j < N; j++)
                res[i] += mat1[i][j] * mat2[j];
        }
    }
    
    int main() {
        float A[N][N] = { {1, 3, -2}, {2, -1, 6}, {1, 1, -2} };
        float B[N] = { 10, 3, 5 };
        float inv[N][N];
    
        if (inverse(A, inv)) {
            float X[N];
            multiply(inv, B, X);
    
            printf("Nilai dari x, y dan z : \n");
            for (int i = 0; i < N; i++)
                printf("x%d = %f\n", i + 1, X[i]);
        }
    
        return 0;
    }

    Penjelasan Program:

    • Program ini mendefinisikan ukuran matriks sebagai N = 3.
    • Fungsi getCofactor mengambil kofaktor dari matriks.
    • Fungsi determinant menghitung determinan dari matriks.
    • Fungsi adjoint menghitung adjoin dari matriks.
    • Fungsi inverse menghitung invers dari matriks, dan jika matriks tidak singular (determinannya bukan nol), mengembalikan inversnya.
    • Fungsi multiply mengalikan dua matriks.
    • Fungsi main menginisialisasi matriks A dan B, menghitung invers dari A, dan mengalikannya dengan B untuk mendapatkan solusi X.

    Dengan menjalankan program ini, Anda akan mendapatkan solusi untuk sistem persamaan linear yang diberikan.

    Latihan Soal

    1. 3x + 2y – 5z = -14
      2x – 3y + 4z = 10
      x + y + z = 4
    2. 3x – 4y + 2z = -9
      -4x + 4y + 10z = 32
      -x + 2y – 7z = -7
    3. 4a + 3b = 4
      2a + 2b – 2c = 0
      5a + 3b + c = -2
  • Operasi Matematika untuk Array di Matlab

    Operasi Matematika untuk Array di Matlab

    AhmadDahlan.NET – Array dapat didefenisikan sebagai sekumpulan nilai atau variable yang tersusun pada baris dan kolom. Array adalah sintaks untuk menunjukkan Matriks dalam bahasa pemograman.

    Dalam bahasa Pemograman Matlab, Semua nilai dari variable pada dasarnya disimpan dalam bentuk Array, misalnya

    >> B = 5 ;
    B =
      5

    angka 5 ini adalah matriks dengan dimensi 1 x 1. Array ini adalah array paling sederhana yang bisa disimpan dan dioperasikan di Matlab.

    A. Mendefenisikan Array di Matlab

    Misalkan kita memiliki sebuah vektor posisi dari sebuah partikel dengan persamaan x = 2 i + j – 7z

    Vektor ini dapat ditulisakan dengan sintak

    >> x = [ 2 1 -7]
    x = 
    2 1 -7

    Untuk membuat kolom, kita menggunakan pemisah ; seperti berikut

    >> y = [3; x+7; 4]
    y = 
    3
    x+7
    4

    Array dengan dimensi 2 x 3 dapat ditulis dengan bentuk

    >> y2 = [1 0 1; 2 0 u]
    y2 = 
    1 0 1 
    2 0 u

    Untuk membuat Array dengan deret tertentu juga bisa dilakukan dengan sintaks loop dari Matlab. Misalnya saya ingin membuat matriks deret yang dimulai dari 3 sampai 11 dengan interval 2.

    >> z = [3 : 2 : 11]
    z =
    3 5 7 9 11

    sintak lain jika deret kelipatan 1

    >> p = [ -3 ; 5]
    p = 
    -3 -2 -1 0 1 2 3 4 5

    B. Adressing Array

    Addressing Array adalah fasilitas yang digunakan untuk mendeklarasikan variable berdasarkan indek dari array yang ada. Misalkan saya memiliki Matriks 1 x 8 :

    >>y = [2 4 6 7 4 5 0 1]
    y =
    2 4 6 7 4 5 0 1

    kita bisa memangil dan mengoperasikan array pada posisi dan tertentu sesuai dengan kebutuhan. Proses pemanggilan dilakukan berdasarkan alamat elemen matriks yang ada :

    >>y = [2 4 6 7 4 5 0 1]
    y =
    2 4 6 7 4 5 0 1
    >> y1 = y(3:5)
    y1 = 
    6 7 4

    Kita juga bisa menyusun array dari colon yang diinginkan mengunakan fasilitas “:”. Misalkan

    >> a = [1 0 1; 2 3 4; b c d]
    a =
    1 0 1 
    2 3 4 
    b c d
    >>a1 = a(;2)
    a1 = 
    0
    3
    c 

    C. Operasi Matematis pada Array

    Operasi matematis pada array mengadopsi prosedur operasi matematis pada vektor.

    1. Pemjumlahan dan Pengurangan

    Penjumlahan dan pengurangan pada vektor bisa dilakukan jika dimensi vektor sama.

    \begin{bmatrix}a & b\\ c & d \end{bmatrix} - \begin{bmatrix}p & q\\ r & s \end{bmatrix} = \begin{bmatrix}a-p & b-q\\ c-r & d-s \end{bmatrix}

    Misalkan

    >> a = [1 -2; 3 4]; b = [2 3; 2 1];
    >> a - b =
    ans 
    -1 -5
     1  3

    2. Perkalian Skalar Pada Matriks.

    Perkalian skalar adalah perkalian yang mengalikan elemen skalar dengan vektor pada matriks atau kelipatan skalar dari elemen-elemen yang ada di Matriks.

    q\begin{bmatrix}a & b\\ c & d \end{bmatrix} = \begin{bmatrix}qa & qb\\ qc & qd \end{bmatrix}
    >> a = 2; b = [1 0; 2 3];
    >> a*b =
    ans 
    2 0 
    4 6

    3. Perkalian Vektor Pada Matrik

    Operasi perkalian pada matriks dapat dilakukan jika jumlah kolom pada matriks sama dengan jumlah baris yang sama. Misalnya kita mengalikan matriks dimensi a × s dan matriks dimensi s × b, maka hasilnya adalah matrik a × b.

    Milsalan kita mengalikan Matriks 1 x 3 dan 3 x 2 akan menghasilkan matriks 1 x 2

    a = \begin{bmatrix}1 & 2 & 3 \end{bmatrix}

    dan

    b=\begin{bmatrix}
    1 &2 \\ 
    3 &4 \\ 
     5& 5
    \end{bmatrix}

    maka a × b = [ (1*1+2*3+3*5) (1*2+2*4+3*5)] = [21 25]

    Latihan

    1. Buatlah Matriks dengan element sebagai berikut : 3, π, √ 10, 22/7, sin 34o, tan 27o
    2. tentukan nilai x dan y dari x + y + 2z= 11 dan x + 5y – z = 0