Anda di halaman 1dari 11

Tugas Kelompok 1

Analisis Numerik - Semester Ganjil 2020/2021

Kelompok B15
Nofaldi Atmam 1906398420
Muhammad Faishol Amirul M. 1906285573
Yusuf Fakhri Aldrian 1906351096

FAKULTAS ILMU KOMPUTER


UNIVERSITAS INDONESIA
DEPOK
2021
A. Pendahuluan

Teori Balok Euler-Bernoulli adalah pemodelan untuk suatu material yang bengkok
ketika diberikan tekanan. Perpindahan vertikal balok diwakili oleh fungsi y(x), dengan
0 ≤ 𝑥 ≤ 𝐿, dengan L adalah panjang balok, dimana fungsi ini memenuhi 𝐸𝐼𝑦'''' = 𝑓(𝑥)
. Kita dapat memodelkan persamaan Balok Euler-Bernoulli ini menjadi sebuah Sistem
Persamaan Linear (SPL), misalkan untuk suatu bilangan positif n, maka h=L/n, dimana
nilai h ini kita akan membagi suatu balok dengan panjang L ke dalam n bagian sama
panjang, jadi untuk mencari nilai y pada x = L, maka didapatkan persamaan linear
4
𝑦𝑖−2 − 4𝑦𝑖−1 + 6𝑦𝑖 − 4𝑦𝑖+1 + 𝑦𝑖+2 = (ℎ / 𝐸𝐼)𝑓(𝑥). Kita akan membuat sebuah

Sistem Persamaan Linear dengan representasi Ax = b, dimana koefisien A adalah variabel


pada ruas kiri persamaan tersebut.
Salah satu keuntungan mengerjakan proyek ini adalah kita dapat mengetahui
perhitungan defleksi papan loncat indah. Apabila proyek ini dikerjakan lebih lanjut kita
dapat membantu para atlet loncat indah dalam perlombaan. Hal ini dikarenakan kita
dapat memodelkan tenaga ataupun tekanan yang diberikan kepada papan sehingga
mereka dapat memiliki lompatan yang lebih tinggi. Lompatan yang lebih tinggi
memberikan waktu yang lebih banyak di udara, sehingga mereka dapat melakukan lebih
banyak gaya dan mendapatkan nilai yang lebih tinggi.

B. Isi

1. Diketahui matriks A adalah konstanta bernoulli beam ukuran n x n

function [A] = generateBeamConst(n)


A = zeros(n, n);
A(1, 1:4) = [16, -9, 8/3, -1/4];
A(2, 1:4) = [-4, 6, -4, 1];
for i=3:n-2
A(i, i-2:i+2) = [1, -4, 6, -4, 1];
endfor
A(n-1, n-3:n) = [16/17, -60/17, 72/17, -28/17];
A(n, n-3:n) = [-12/17, 96/17, -156/17, 72/17];
endfunction
Algoritma standar
Berikut adalah algoritma LU factorization tanpa pivoting (standar, bukan khusus
untuk menangani matriks pita, untuk semua matriks nxn.

function [L, U] = beamLUFactStd(n)


A = generateBeamConst(n)
L = eye(n);
for k = 1 : n
L(k + 1 : n, k) = A(k + 1 : n, k) / A(k, k);
endfor
endfunction

Algoritma efisien - spesial untuk menangani matriks pita


Berikut adalah algoritma LU factorization tanpa pivoting khusus untuk matrix pita
atau tridiagonal.

function [L,U] = beamLUFactOpt(n)


A = generateBeamConst(n);
L = eye(n);
for i = 1:n-1
akhir_row = i + 2;
if (i >= n - 3)
akhir_row = n;
endif
for j = i+1:akhir_row
L(j,i) = A(j,i)/A(i,i);
S = max(j - 3, 1);
E = min(j + 3, n);
A(j,S:E) = A(j,S:E) - L(j,i)*A(i,S:E);
endfor
endfor
U = triu(A);
endfunction

Mula-mula kita melakukan iterasi pada semua input n, kemudian kita mencari solusi
untuk dua buah pendekatannya, yaitu pendekatan secara standar dan efisien.
Algoritma jika implementasi menggunakan partial pivoting.
Jika partial pivoting diterapkan, hasil terlindungi dari adanya kemungkinan
munculnya unsur yang sangat kecil pada diagonal pada saat dilakukan operasi
perhitungan. Dalam partial pivoting, unsur dengan nilai mutlak paling besar yang
berada pada kolom yang akan disederhanakan dipindahkan ke posisi diagonal
sebelum kolom itu disederhanakan.
Dengan partial pivoting, kita pakai elemen diagonal matriks sebagai pivot untuk
eliminasi kolom pertama. Lalu, eliminasi Gaussian dimulai dengan melihat terlebih
dahulu entri terbesar di kolom pertama, lalu barisnya ditukar dengan baris pivot.
Berikut adalah algoritma LU factorization yang menggunakan partial pivoting.

function [L, U] = beamLUFactWPartialPivoting(n)


A = generateBeamConst(n);
L = eye(n);

P = eye(n);

for k=1:n-1
% Mencari baris l (dimana l itu terbesar)
[m, l] = max(abs(A(k:n, k)));
% Adjust max indexing
l += (k - 1);

% Tukar baris l dan baris k


tmp = A(l, :);
A(l, :) = A(k, :);
A(k, :) = tmp;

% Tukar baris-baris P
tmp = P(l, :);
P(l, :) = P(k, :);
P(k, :) = tmp;

% Tukar baris l and baris k dari L


% Tukar hanya baris yang sudah diproses
# maintain unit lower triangular property
tmp = L(l, 1:k-1);
L(l, 1:k-1) = L(k, 1:k-1);
L(k, 1:k-1) = tmp;

for i=k+1:n
% Find m untuk setiap baris i
L(i, k) = A(i,k)/A(k, k);
% Eliminasi baris i+1 .. n
A(i,:) = A(i,:) - L(i, k) * A(k,:);
endfor
endfor

U = A;

endfunction

2. Pada kedua pendekatan, program akan meng-generate matriks koefisien terlebih


dahulu. Untuk proses ini, kita dapat mengabaikan banyak komputasinya karena dapat
digantikan dengan menyimpan langsung nilainya di sebuah konstanta.
Dalam implementasi standar (src/beamLUFactStd.m), program memiliki dua
nested loop. Loop terdalam memiliki sebuah operasi yang sebetulnya membutuhkan n
komputasi. Operasi tersebut dilakukan sebanyak (n - k) kali, sehingga total komputasi
2 2
untuk loop terdalam adalah 𝑛 − 𝑛𝑘 kali atau O(𝑛 ). Pada loop terluar terdapat
sebuah operasi yang membutuhkan (n - k) komputasi dan sebuah loop. Perlu
diperhatikan bahwa loop ini dilakukan sebanyak n kali, sehingga untuk loop terluar
2 3
membutuhkan 𝑛(𝑛 − 𝑛𝑘 + 𝑛 − 𝑘)komputasi atau O(𝑛 ). Maka total komputasi
3
untuk pendekatan standar adalah O(𝑛 ).
Sama halnya dengan implementasi efisien (src/beamLUFactOpt.m), program
juga memiliki dua nested loop. Namun loop terdalam hanya memiliki iterasi
maksimal sebanyak 3 kali. Setiap iterasinya, akan terdapat E - S + 1 komputasi atau
maksimalnya adalah 7 komputasi. Jadi total komputasi untuk loop terdalam hanyalah
21 komputasi. Bagian loop terluar memiliki sekitar n kali iterasi. Maka total
komputasi yang dibutuhkan untuk pendekatan ini adalah 21𝑛 komputasi atau O(n).
Maka dapat disimpulkan pendekatan kedua (src/beamLUFactOpt.m) memiliki
kompleksitas yang lebih rendah. Hal ini juga didukung oleh grafik perbandingan
running time program di bawah ini.
3. Menggunakan nilai n = 10.4k , dimana nilai k adalah [1,2,3,4] kita dapat melihat
condition number untuk setiap input adalah:

n Condition Number Backward Error Backward Error


Standar Optimal

40 4389447.78408 1.2976e+15 1.2976e+15

160 1098636697.05383 2.1725e+84 2.1725e+84

640 2.7962e+11 NaN NaN

2560 7.1484e+13 NaN NaN

Dari tabel diatas kita dapat melihat hasil backward error untuk pendekatan
standar dan pendekatan optimal kedua pendekatan tersebut memiliki nilai yang sama,
karena kedua pendekatan ini memiliki output L dan U yang sama, yang membedakan
kedua pendekatan ini adalah cara mereka melakukan LU factorization. Tidak ada
pendekatan yang cenderung lebih akurat karena nilainya sama saja.
Dari tabel diatas kita dapat melihat nilai condition number untuk setiap input
n, dari sini kita dapat menyimpulkan bahwa semakin besar nilai n akan semakin besar
juga nilai condition numbernya, Dapat kita lihat bahwa saat n = 40 nilai condition
number saja sudah sangat besar, hal ini tentu akan berpengaruh kepada ekspektasi
akurasi kita, karena nilai condition numbernya sangat besar, sedikit saja ada nilai
input yang berubah maka nilai output juga dapat berubah sangat jauh, terlebih lagi
untuk nilai n yang sangat besar condition numbernya kita sudah tidak dapat
melakukan komputasi untuk backward errornya.

2 2 2
4. Dengan menggunakan fungsi exact 𝑦(𝑥) = (𝑓/24𝐸𝐼)𝑥 (𝑥 − 4𝐿𝑥 + 6𝐿 ).
Untuk setiap n pada [10,20,40,80,100], Dimana solusi dari nomor 1 adalah yAprrox
dan solusi dari fungsi exact adalah yExact, dan error pada setiap ujung balok, berikut
tabel dan plotnya :

n = 10, plot:

n = 20, plot:

n = 40, plot:
n = 80, plot:

untuk n = 100, tidak dapat melihat hasil plot karena octave selalu mengeluarkan error,
value untuk n=100 terlalu tinggi.

Berikut tabel nilai error untuk tiap tiap nilai n pada ujung balok (x=L):

n error di x = L

10 0.075146

20 10.565

40 1348714.82859

80 1.8286e+17

100 9.7904e+22

Dari tabel di atas terlihat bahwa dengan bertambahnya nilai n, maka semakin
besar error pada hasil. Bahkan untuk nilai n yang sangat besar hasilnya tidak dapat
ditampilkan pada plot, dengan nilai error yang sangat tinggi juga, sementara untuk n
yang kecil nilai errornya masih dapat ditoleransi (< 1).

5. Berikut ini merupakan tabel backward error pada x = L meter untuk beberapa nilai n.

n error di x=L cond(A) n error di x=L cond(A)

6 0.042590 2557.9 42 15846788926. 5327931.96864


73865

8 0.094226 7787.2 74 1.5230e+19 50716586.2550


1

10 0.21727 18574.01842 138 5.1134e+37 608727017.928


74

12 110.47 37888.74398 266 2.7946e+75 8366909734.94


478

14 575.56 69343.57544 522 4.8334e+151 1.2380e+11

18 6747.2 186318.92783 1034 NaN 1.9038e+12

26 792044.05813 795823.14470 2058 NaN 2.9857e+13

Dari tabel di atas terlihat bahwa dengan bertambahnya nilai n, maka semakin
besar error pada hasil. Hal ini dikarenakan nilai dari conditional number pada matriks
A yang sangat besar pula, sehingga menyebabkan persamaan menjadi sangat sensitif
dan terjadinya ill-condition. Conditional number untuk matriks A semakin besar
karena matriks A dibentuk atas persamaan aproksimasi.
C. Kesimpulan

Penyelesaian SPL untuk mencari perpindahan vertikal balok pada permasalahan balok
Euler-Bernoulli dapat dioptimasi karena matriks konstanta membentuk matriks pita. Dari
3
yang awalnya membutuhkan O(𝑛 ) berubah menjadi O(n). Optimasi ini juga tidak
mengubah tingkat akurasi pada hasil.
Meskipun begitu, akurasi pada solusi permasalahan akan semakin memburuk
dengan bertambahnya banyak segmentasi yang dilakukan. Hal ini disebabkan karena
matriks konstanta dibentuk dari persamaan aproksimasi. Semakin banyak nilai yang
diaproksimasi, maka semakin besar pula condition number yang dimiliki oleh matriks
konstanta. Hal ini menyebabkan solusi permasalahan menjadi semakin tidak akurat.
REFERENSI

https://www.researchgate.net/figure/LU-factorization-of-a-matrix-without-pivoting-Blank-spa
ces-indicate-zero-entries-The_fig7_270659665
https://stackoverflow.com/questions/41150997/perform-lu-decomposition-without-pivoting-i
n-matlab/55730883
Slide Perkuliahan Analisis Numerik Fasilkom UI

Anda mungkin juga menyukai