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

ditulis oleh :

di

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

Tinggalkan Balasan

Komentar