Ahmad Dahlan God does not play dice with the Cosmos.

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

2 min read

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
Ahmad Dahlan God does not play dice with the Cosmos.

Program Menghitung Ketinggan Maksimal Gerak Vertikal Ke Atas dengan Bahasa…

Program menghitung ketinggian maksimal digunakan untuk mengetahui ketinggian benda yang dilempar ke atas dengan kecepatan awal tertentu. Program ini dirancang dengan asumsi hambatan udara...
Ahmad Dahlan
32 sec read

Tinggalkan Balasan