Berikut ini contoh penggunaan Array pada Bahasa C untuk asus permsaaa Linier 3 Variabel.
Daftar Isi
Penggunaan Array Pada Bahasa C
Misalkan terdapat tiga buah persamaan linier dengan 3 variabel peubah yakni :
- x + 3y – 2z = 10
- 2x – y + 6z = 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 matriksA
danB
, menghitung invers dariA
, dan mengalikannya denganB
untuk mendapatkan solusiX
.
Dengan menjalankan program ini, Anda akan mendapatkan solusi untuk sistem persamaan linear yang diberikan.
Latihan Soal
- 3x + 2y – 5z = -14
2x – 3y + 4z = 10
x + y + z = 4 - 3x – 4y + 2z = -9
-4x + 4y + 10z = 32
-x + 2y – 7z = -7 - 4a + 3b = 4
2a + 2b – 2c = 0
5a + 3b + c = -2