LAMPIRAN
Lampiran 1 Pembuktian Teorema 2.4.15 (Rumus Proyeksi Ortogonal)
Misalkan suatu hiperbidang di ℝ
𝑁mempunyai persamaan 𝐚
𝑇𝐱 = 𝑏 dan misalkan 𝐱
∗adalah sebarang titik di ℝ
𝑁, maka proyeksi ortogonal, 𝐱
𝑝, dari 𝐱
∗terhadap hiperbidang tersebut dinyatakan dengan
𝐱
𝑝= 𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚.
Bukti:
Teorema ini dapat dibuktikan dengan membuktikan bahwa (i) titik 𝐱
𝑝terletak pada hiperbidang 𝐚
𝑇𝐱 = 𝑏 (dalam hal ini, 𝐚
𝑇𝐱
𝑝= 𝑏) dan (ii) vektor 𝐱
𝑝− 𝐱
∗ortogonal terhadap hiperbidang 𝐚
𝑇𝐱 = 𝑏 (dalam hal ini, vektor 𝐱
𝑝− 𝐱
∗sejajar dengan vektor 𝐚).
Pertama, karena
𝐱
𝑝= 𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚, maka
𝐚
𝑇𝐱
𝑝= 𝐚
𝑇𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚 = 𝐚
𝑇𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚
𝑇𝐚 = 𝐚
𝑇𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚
𝟐= 𝐚
𝑇𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗= 𝑏.
Jadi, terbukti bahwa titik 𝐱
𝑝terletak pada hiperbidang 𝐚
𝑇𝐱 = 𝑏.
Kedua, karena
𝐱
𝑝= 𝐱
∗+ 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚, maka
𝐱
𝑝− 𝐱
∗= 𝑏 − 𝐚
𝑇𝐱
∗𝐚
𝟐𝐚.
Karena vektor 𝐱
𝑝− 𝐱
∗merupakan merupakan vektor 𝐚 dikalikan dengan suatu skalar, maka vektor 𝐱
𝑝− 𝐱
∗sejajar dengan vektor 𝐚. Jadi, terbukti bahwa vektor 𝐱
𝑝− 𝐱
∗ortogonal terhadap hiperbidang 𝐚
𝑇𝐱 = 𝑏.
Bukti lengkap. ∎
Lampiran 2 Pembuktian Persamaan (6)
Diketahui Persamaan (3), yaitu
𝑓
𝑖𝐱 = 𝐱 + 𝑏
𝑖− 𝐚
𝑖𝑇𝐱
𝐚
𝑖 2𝐚
𝑖untuk 𝑖 = 1, 2, … , 𝑀.
Akan dibuktikan bahwa Persamaan (3) ekivalen dengan Persamaan (6), yaitu 𝑓
𝑖𝐱 = 𝑃
𝑖𝐱 + 𝑏
𝑖𝐚
𝑖 2𝐚
𝑖untuk 𝑖 = 1, 2, … , 𝑀 dengan
𝑃
𝑖= 𝐼 − 1
𝐚
𝑖 2𝐚
𝑖𝐚
𝑖𝑇. Bukti:
𝑓
𝑖𝐱 = 𝐱 + 𝑏
𝑖− 𝐚
𝑖𝑇𝐱 𝐚
𝑖 2𝐚
𝑖↔ 𝑓
𝑖𝐱 = 𝐱 − 𝐚
𝑖𝑇𝐱
𝐚
𝑖 2𝐚
𝑖+ 𝑏
𝑖𝐚
𝑖 2𝐚
𝑖↔ 𝑓
𝑖𝐱 = 𝐱 − 1
𝐚
𝑖 2𝐚
𝑖𝐚
𝑖𝑇𝐱 + 𝑏
𝑖𝐚
𝑖 2𝐚
𝑖↔ 𝑓
𝑖𝐱 = 𝐼𝐱 − 1
𝐚
𝑖 2𝐚
𝑖𝐚
𝑖𝑇𝐱 + 𝑏
𝑖𝐚
𝑖 2𝐚
𝑖↔ 𝑓
𝑖𝐱 = 𝐼 − 1
𝐚
𝑖 2𝐚
𝑖𝐚
𝑖𝑇𝐱 + 𝑏
𝑖𝐚
𝑖 2𝐚
𝑖.
Bukti lengkap. ∎
Lampiran 3 Pembuktian Persamaan (9)
Diketahui Persamaan (4), yaitu
𝐹 𝐱; 𝐛 = 𝑓
1∘ 𝑓
2∘ ⋯ ∘ 𝑓
𝑀𝐱 = 𝑓
1𝑓
2⋯ 𝑓
𝑀𝐱 ⋯ , Persamaan (6), yaitu
𝑓
𝑖𝐱 = 𝑃
𝑖𝐱 + 𝑏
𝑖𝐚
𝑖 2𝐚
𝑖untuk 𝑖 = 1, 2, … , 𝑀, Persamaan (8), yaitu
𝑅𝐛 = 𝑏
𝑖𝐚
𝑖 2𝑄
𝑖−1𝐚
𝑖𝑀
𝑖=1
,
dan
𝑄
𝑖= 𝑃
1𝑃
2… 𝑃
𝑖(𝑖 = 1, 2, … , 𝑀) dengan 𝑄
0= 𝐼.
Akan dibuktikan bahwa Persamaan (4) ekivalen dengan Persamaan (9), yaitu 𝐹 𝐱; 𝐛 = 𝑄𝐱 + 𝑅𝐛
dengan matriks 𝑄 = 𝑄
𝑀. Bukti:
𝐹 𝐱; 𝐛 = 𝑄𝐱 + 𝑅𝐛
↔ 𝐹 𝐱; 𝐛 = 𝑃
1𝑃
2… 𝑃
𝑀𝐱 + 𝑏
𝑖𝐚
𝑖 2𝑄
𝑖−1𝐚
𝑖𝑀
𝑖=1
↔ 𝐹 𝐱; 𝐛 = 𝑃
1𝑃
2… 𝑃
𝑀𝐱 + 𝑏
1𝐚
1 2𝑄
0𝐚
1+ 𝑏
2𝐚
2 2𝑄
1𝐚
2+ ⋯ + 𝑏
𝑀𝐚
𝑀 2𝑄
𝑀−1𝐚
𝑀↔ 𝐹 𝐱; 𝐛 = 𝑃
1𝑃
2… 𝑃
𝑀𝐱 + 𝑏
1𝐚
1 2𝐚
1+ 𝑏
2𝐚
2 2𝑃
1𝐚
2+ ⋯ + 𝑏
𝑀𝐚
𝑀 2𝑃
1𝑃
2… 𝑃
𝑀−1𝐚
𝑀↔ 𝐹 𝐱; 𝐛 = 𝑃
1𝑃
2… 𝑃
𝑀𝐱 + 𝑏
2𝐚
2 2𝐚
2+ ⋯ + 𝑏
𝑀𝐚
𝑀 2𝑃
2… 𝑃
𝑀−1𝐚
𝑀+ 𝑏
1𝐚
1 2𝐚
1↔ 𝐹 𝐱; 𝐛 = 𝑓
1𝑃
2… 𝑃
𝑀𝐱 + 𝑏
2𝐚
2 2𝐚
2+ ⋯ + 𝑏
𝑀𝐚
𝑀 2𝑃
2… 𝑃
𝑀−1𝐚
𝑀↔ 𝐹 𝐱; 𝐛 = 𝑓
1𝑃
2𝑃
3… 𝑃
𝑀𝐱 + ⋯ + 𝑏
𝑀𝐚
𝑀 2𝑃
3… 𝑃
𝑀−1𝐚
𝑀+ 𝑏
2𝐚
2 2𝐚
2↔ 𝐹 𝐱; 𝐛 = 𝑓
1𝑓
2𝑃
3… 𝑃
𝑀𝐱 + ⋯ + 𝑏
𝑀𝐚
𝑀 2𝑃
3… 𝑃
𝑀−1𝐚
𝑀⋮
↔ 𝐹 𝐱; 𝐛 = 𝑓
1𝑓
2⋯ 𝑃
𝑀𝐱 + 𝑏
𝑀𝐚
𝑀 2𝐚
𝑀⋯
↔ 𝐹 𝐱; 𝐛 = 𝑓
1𝑓
2⋯ 𝑓
𝑀𝐱 ⋯ .
Bukti lengkap. ∎
Lampiran 4 Bukti Persamaan (10)
Berdasarkan Persamaan (5) dan (9), untuk 𝐛 = 𝟎 diperoleh 𝐱
𝑛+1= 𝐹 𝐱
𝑛; 𝟎 = 𝑄𝐱
𝑛, Akan dibuktikan (dengan menggunakan Induksi Matematika) bahwa
𝐱
𝑛= 𝑄
𝑛𝐱
0, untuk setiap 𝑛 ∈ ℕ.
Bukti:
Untuk 𝑛 = 1, Ruas kiri:
𝐱
1= 𝑄𝐱
0. Ruas kanan:
𝑄𝐱
0.
Ruas kiri sama dengan ruas kanan, berarti benar untuk 𝑛 = 1.
Anggap benar untuk 𝑛 = 𝑚, 𝑚 ∈ ℕ, yaitu
𝐱
𝑚= 𝑄
𝑚𝐱
0.
Akan dibuktikan bahwa benar untuk 𝑛 = 𝑚 + 1, 𝑚 ∈ ℕ, yaitu 𝐱
𝑚 +1= 𝑄
𝑚 +1𝐱
0. Bukti:
𝐱
𝑚 +1= 𝑄𝐱
𝑚= 𝑄𝑄
𝑚𝐱
0= 𝑄
𝑚 +1𝐱
0. Terbukti benar untuk 𝑛 = 𝑚 + 1, 𝑚 ∈ ℕ.
Bukti lengkap. ∎
Lampiran 5 Pembuktian Persamaan (11)
Berdasarkan Persamaan (5) dan (9), untuk 𝐛 = 𝟎 diperoleh 𝐱
𝑛+1= 𝐹 𝐱
𝑛; 𝟎 = 𝑄𝐱
𝑛, dan berdasarkan bagian pertama dari Teorema 4.3.6, diperoleh
𝑄 = 𝑃
𝒦+ 𝑄 = 𝑃
𝒦+ 𝑄𝑃
ℐ. Akan dibuktikan (dengan menggunakan Induksi Matematika) bahwa
𝐱
𝑛= 𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄
𝑛𝐱
0∈ Im 𝐴𝑇
,
untuk setiap 𝑛 ∈ ℕ.
Bukti:
Untuk 𝑛 = 1, Ruas kiri:
𝐱
1= 𝑄𝐱
0. Ruas kanan:
𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄 𝐱
0∈ Im 𝐴𝑇
= 𝑃
𝒦+ 𝑄 𝐱
0= 𝑄𝐱
0.
Ruas kiri sama dengan ruas kanan, berarti benar untuk 𝑛 = 1.
Anggap benar untuk 𝑛 = 𝑚, 𝑚 ∈ ℕ, yaitu 𝐱
𝑚= 𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄
𝑚𝐱
0∈ Im 𝐴𝑇
.
Akan dibuktikan bahwa benar untuk 𝑛 = 𝑚 + 1, 𝑚 ∈ ℕ, yaitu 𝐱
𝑚 +1= 𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄
𝑚 +1𝐱
0∈ Im 𝐴𝑇
. Bukti:
𝐱
𝑚 +1= 𝑄𝐱
𝑚= 𝑃
𝒦+ 𝑄 𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄
𝑚𝐱
0∈ Im 𝐴𝑇
= 𝑃
𝒦𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑃
𝒦𝑄
𝑚𝐱
0∈ Im 𝐴𝑇
+ 𝑄𝑃
ℐ𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄 𝑄
𝑚𝐱
0∈ Im 𝐴𝑇
= 𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝟎 + 𝑄𝟎 + 𝑄
𝑚 +1𝐱
0∈ Im 𝐴𝑇
= 𝑃
𝒦𝐱
0∈ Ker 𝐴
+ 𝑄
𝑚 +1𝐱
0∈ Im 𝐴𝑇
.
Terbukti benar untuk 𝑛 = 𝑚 + 1, 𝑚 ∈ ℕ.
Bukti lengkap. ∎
Lampiran 6 Pembuktian Persamaan (12)
Berdasarkan Persamaan (5) dan (9), diperoleh
𝐱
𝑛+1= 𝐹 𝐱
𝑛; 𝐛 = 𝑄𝐱
𝑛+ 𝑅𝐛.
Akan dibuktikan (dengan menggunakan Induksi Matematika) bahwa 𝐱
𝑛= 𝑄
𝑛𝐱
0+ 𝑄
𝑘𝑅
𝑛−1
𝑘=0
𝐛,
untuk setiap 𝑛 ∈ ℕ.
Bukti:
Untuk 𝑛 = 1, Ruas kiri:
𝐱
1= 𝑄𝐱
0+ 𝑅𝐛.
Ruas kanan:
𝑄𝐱
0+ 𝑄
𝑘𝑅
0
𝑘=0
𝐛 = 𝑄𝐱
0+ 𝑄
0𝑅𝐛 = 𝑄𝐱
0+ 𝑅𝐛.
Ruas kiri sama dengan ruas kanan, berarti benar untuk 𝑛 = 1.
Anggap benar untuk 𝑛 = 𝑚, 𝑚 ∈ ℕ, yaitu
𝐱
𝑚= 𝑄
𝑚𝐱
0+ 𝑄
𝑘𝑅
𝑚 −1
𝑘=0
𝐛.
Akan dibuktikan bahwa benar untuk 𝑛 = 𝑚 + 1, 𝑚 ∈ ℕ, yaitu
𝐱
𝑚 +1= 𝑄
𝑚 +1𝐱
0+ 𝑄
𝑘𝑅
𝑚
𝑘=0
𝐛.
Bukti:
𝐱
𝑚 +1= 𝑄𝐱
𝑚+ 𝑅𝐛
= 𝑄 𝑄
𝑚𝐱
0+ 𝑄
𝑘𝑅
𝑚 −1
𝑘=0
𝐛 + 𝑅𝐛
= 𝑄
𝑚 +1𝐱
0+ 𝑄 𝑄
𝑘𝑅
𝑚 −1
𝑘=0
𝐛 + 𝑅𝐛
= 𝑄
𝑚 +1𝐱
0+ 𝑄
𝑘 +1𝑅
𝑚 −1
𝑘=0
𝐛 + 𝑅𝐛
= 𝑄
𝑚 +1𝐱
0+ 𝑄
𝑘𝑅
𝑚
𝑘=1
𝐛 + 𝑄
0𝑅𝐛
= 𝑄
𝑚 +1𝐱
0+ 𝑄
𝑘𝑅
𝑚
𝑘=0
𝐛.
Terbukti benar untuk 𝑛 = 𝑚 + 1, 𝑚 ∈ ℕ.
Bukti lengkap. ∎
Lampiran 7 Program MATLAB dari algoritme untuk metode Kaczmarz
Fungsi kaczmarz
function x = kaczmarz(A,b,x0)
%---
% Fungsi kaczmarz menghasilkan penyelesaian hampiran atas sistem persamaan linear
% (SPL) Ax=b :
% a11*x1 + a12*x2 + ... + a1N*xN = b1
% a21*x1 + a22*x2 + ... + a2N*xN = b2
% :
% aM1*x1 + aM2*x2 + ... + aMN*xN = b3
% menggunakan metode Kaczmarz.
%---
% Input:
% A = matriks berorde M x N (matriks koefisien dari SPL)
% a11 a12 ... a1N
% a21 a22 ... a2N
% :
% aM1 aM2 ... aMN
% b = vektor kolom berorde M x 1 (vektor konstanta dari SPL)
% b1
% b2
% :
% bM
% x0 = vektor kolom berorde N x 1 (penyelesaian hampiran awal)
%
% Input tambahan:
% iter = banyaknya iterasi
% harus berupa bilangan asli
% default: 100
% atau
% tol = batas toleransi
% harus berupa bilangan real positif
% default: 10^(-6)
%
% Output:
% x = vektor kolom berorde Nx1 (penyelesaian hampiran)
% x1
% x2
% :
% xN
%---
% Cek banyaknya input if (nargin < 3)
error('Input terlalu sedikit.');
elseif (nargin > 3)
error('Input terlalu banyak.');
end
[M,N] = size(A);
% Orde A, b, dan x0 harus cocok if (size(b,1) ~= M)
error('Orde matriks A dan vektor b tidak cocok.');
elseif (size(b,2) ~= 1)
error('b harus berbentuk vektor kolom.');
elseif (size(x0,1) ~= N || size(x0,2) ~= 1) error('Orde x0 tidak cocok dengan masalah.') end
x = zeros(N,1);
% Penentuan kriteria pemberhentian
disp('Apakah kriteria pemberhentian akan ditentukan sendiri?');
disp('Pilih : 1 atau 0');
disp('1 : Ya');
disp('0 : Tidak');
jawab = input('Jawab : ');
if (isempty(jawab))
error('Tidak ada jawaban.');
Lampiran 7 (lanjutan)
elseif (jawab ~= 1 && jawab ~= 0)
error('Jawaban harus berupa bilangan 1 atau 0.');
elseif (jawab == 0)
disp('Kriteria pemberhentian:')
disp('Banyaknya iterasi = 100 atau batas toleransi = 10^(-6).');
maksiter = 100; % Nilai default tol = 10^(-6); % Nilai default iter = 1;
for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end
d = norm(A*x-b);
while (iter <= maksiter && d > tol) iter = iter+1;
for i = 1:iter for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end end
d = norm(A*x-b);
end
disp(['Pada iterasi ke-', num2str(iter)]);
disp(['diperoleh penyelesaian hampiran dengan norm sisaan sebesar ', num2str(d)]);
else
disp('Pilih kriteria pemberhentian (1, 2, atau 3)');
disp('1 : Banyaknya iterasi');
disp('2 : Batas toleransi');
disp('3 : Keduanya');
itertol = input('Pilihan : ');
if (isempty(itertol))
error('Tidak ada kriteria pemberhentian yang dipilih.');
elseif (itertol ~= 1 && itertol ~= 2 && itertol ~=3) error('Input harus berupa bilangan 1, 2 atau 3.');
elseif (itertol == 1)
disp('Masukkan banyaknya iterasi!');
disp('Banyaknya iterasi harus berupa bilangan asli.');
iter = input('Banyaknya iterasi = ');
if (isempty(iter))
error('Tidak ada input sebagai banyaknya iterasi.');
elseif (iter < 1 || (fix(iter)-iter) ~= 0)
error('Banyaknya iterasi harus berupa bilangan asli.');
else
for i = 1:iter for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end end
d = norm(A*x-b);
disp(['Pada iterasi ke-', num2str(iter)]);
disp(['diperoleh penyelesaian hampiran dengan norm sisaan sebesar ', num2str(d)]);
end
elseif (itertol == 2)
disp('Masukkan batas toleransi!');
disp('Batas toleransi harus berupa bilangan real positif.');
tol = input('Batas toleransi = ');
if (isempty(tol))
error('Tidak ada input sebagai batas toleransi.');
elseif (tol <= 0)
error('Batas toleransi harus berupa bilangan real positif.');
else
iter = 1;
Lampiran 7 (lanjutan)
for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end
d = norm(A*x-b);
while d > tol iter = iter+1;
for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end
d = norm(A*x-b);
end
disp(['Pada iterasi ke-', num2str(iter)]);
disp(['diperoleh penyelesaian hampiran dengan norm sisaan sebesar ', num2str(d)]);
end else
disp('Pertama, masukkan banyaknya iterasi!');
disp('Banyaknya iterasi harus berupa bilangan asli.');
iter = input('Banyaknya iterasi = ');
if (isempty(iter))
error('Tidak ada input sebagai banyaknya iterasi.');
elseif (iter < 1 || (fix(iter)-iter) ~= 0)
error('Banyaknya iterasi harus berupa bilangan asli.');
else
maksiter = iter;
end
disp('Kedua, masukkan batas toleransi!');
disp('Batas toleransi harus berupa bilangan real positif.');
tol = input('Batas toleransi = ');
if (isempty(tol))
error('Tidak ada input sebagai batas toleransi.');
elseif (tol <= 0)
error('Batas toleransi harus berupa bilangan real positif.');
end iter = 1;
for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end
d = norm(A*x-b);
while (iter <= maksiter && d > tol) iter = iter+1;
for i = 1:iter for k = 1:M
x = x0+(b(k)-A(k,:)*x0)*A(k,:)'/(norm(A(k,:))^2);
x0 = x;
end end
d = norm(A*x-b);
end
disp(['Pada iterasi ke-', num2str(iter)]);
disp(['diperoleh penyelesaian hampiran dengan norm sisaan sebesar ', num2str(d)]);
end end end
Lampiran 8 Program MATLAB untuk membangkitkan matriks koefisien dan vektor konstanta dari SPL ke-1
Fungsi blur
function [A,b] = blur(N,band,sigma)
%---
% Masalah uji BLUR: Memburamkan gambar digital.
%
% Matriks A adalah matriks simetrik berukuran (N^2)x(N^2), matriks Toeplitz blok
% ganda yang memodelkan pemburaman suatu gambar berukuran NxN dengan suatu fungsi
% pemancaran titik Gauss. Ini disimpan dalam format matriks sparse.
%
% Pada setiap blok Toeplitz, hanya elemen-elemen matriks dalam suatu jarak band-1
% dari diagonal yang merupakan taknol (band adalah setengah bandwidth). Jika band
% tidak dirinci, digunakan band = 3.
%
% Parameter sigma mengontrol lebar dari fungsi pemancaran titik Gauss dan
% akibatnya jumlah pemulusan. Jika sigma tidak dirinci, digunakan sigma = 0.7.
%
% Vektor x adalah suatu versi kolom yang ditumpuk dari suatu gambar uji sederhana,
% sedangkan vektor b adalah suatu versi kolom yang ditumpuk dari gambar yang
% diburamkan, yaitu b = A*x.
%---
% Inisialisasi if (nargin < 2) band = 3;
end
band = min(band,N);
if (nargin < 3) sigma = 0.7;
end
% Mengonstruksi matriks koefisien A
z = [exp(-([0:band-1].^2)/(2*sigma^2)),zeros(1,N-band)];
A = toeplitz(z);
A = sparse(A);
A = (1/(2*pi*sigma^2))*kron(A,A);
% Mengonstruksi vektor konstanta b x = zeros(N,N);
N2 = round(N/2);
N3 = round(N/3);
N6 = round(N/6);
N12 = round(N/12);
T = zeros(N6,N3);
for i = 1:N6 for j = 1:N3
if ((i/N6)^2 + (j/N3)^2 < 1) T(i,j) = 1;
end end end
T = [fliplr(T),T];
T = [flipud(T);T];
x(2+[1:2*N6],N3-1+[1:2*N3]) = T;
T = zeros(N6,N3);
for i = 1:N6 for j = 1:N3
if ((i/N6)^2 + (j/N3)^2 < 0.6) T(i,j) = 1;
end end end
T = [fliplr(T),T];
T = [flipud(T);T];
x(N6+[1:2*N6],N3-1+[1:2*N3]) = x(N6+[1:2*N6],N3-1+[1:2*N3]) + 2*T;
Lampiran 8 (lanjutan)
f = find(x==3);
x(f) = 2*ones(size(f));
T = triu(ones(N3,N3));
[mT,nT] = size(T);
x(N3+N12+[1:nT],1+[1:mT]) = 3*T;
T = zeros(2*N6+1,2*N6+1);
[mT,nT] = size(T);
T(N6+1,1:nT) = ones(1,nT);
T(1:mT,N6+1) = ones(mT,1);
x(N2+N12+[1:mT],N2+[1:nT]) = 4*T;
x = reshape(x(1:N,1:N),N^2,1);
b = A*x;
end
Lampiran 9 Program MATLAB untuk membangkitkan matriks koefisien dan vektor konstanta dari SPL ke-2
Fungsi phillips
function [A,b] = phillips(n)
%---
% Diskretisasi persamaan Fredholm jenis pertama ditemukan oleh D. L. Phillips.
% Didefinisikan fungsi
% phi(x) = | 1 + cos(x*pi/3) , |x| < 3 .
% | 0 , |x| >= 3
% maka kernel K, penyelesaian f, dan ruas kanan g diberikan oleh:
% K(s,t) = phi(s-t) ,
% f(t) = phi(t) ,
% g(s) = (6-|s|)*(1+.5*cos(s*pi/3)) + 9/(2*pi)*sin(|s|*pi/3) .
% Interval integrasi adalah [-6,6].
%
% Didiskretisasi dengan metode Galerkin.
%
% Input : n harus kelipatan 4.
%---
% Cek input if (rem(n,4)~=0)
error('n harus kelipatan 4');
end
% Mengonstruksi matriks koefisien A h = 12/n;
n4 = n/4;
r1 = zeros(1,n);
c = cos((-1:n4)*4*pi/n);
r1(1:n4) = h + 9/(h*pi^2)*(2*c(2:n4+1) - c(1:n4) - c(3:n4+2));
r1(n4+1) = h/2 + 9/(h*pi^2)*(cos(4*pi/n)-1);
A = toeplitz(r1);
% Mengonstruksi vektor konstanta b b = zeros(n,1); c = pi/3;
for i = n/2+1:n
t1 = -6 + i*h; t2 = t1 - h;
b(i) = t1*(6-abs(t1)/2) ...
+ ((3-abs(t1)/2)*sin(c*t1) - 2/c*(cos(c*t1) - 1))/c ...
- t2*(6-abs(t2)/2) ...
- ((3-abs(t2)/2)*sin(c*t2) - 2/c*(cos(c*t2) - 1))/c;
b(n-i+1) = b(i);
end
b = b/sqrt(h);
end
Lampiran 10 Program MATLAB untuk membangkitkan matriks koefisien dan vektor konstanta dari SPL ke-3
Fungsi tomo
function [A,b,x] = tomo(N,f)
%---
% TOMO: Membuat suatu masalah uji tomografi 2D
%
% Fungsi ini membuat suatu masalah uji tomografi dua dimensi sederhana. Suatu
% domain 2D [0,N]x[0,N] dibagi ke dalam N^2 sel dengan ukuran satuan dan sejumlah
% round(f*N^2) sinar pada arah acak yang menembus domain ini. Nilai default
% adalah f=1.
%
% Setiap sel bersesuaian dengan suatu nilai dalam vektor x dan setiap sinar
% bersesuaian dengan elemen dalam vektor konstanta b, yaitu
% sum_{cells in ray} x_{cell j} * length_{cell j}
% dengan length_{cell j} adalah panjang sinar pada sel ke-j.
%
% Matriks A adalah sparse, dan setiap baris (bersesuaian dengan suatu sinar)
% memegang nilai length_{cell j} pada posisi ke-j. Oleh karena itu:
% b = A*x .
% Apabila suatu penyelesaian x_reg telah dihitung, ini dapat divisualisasikan
% dengan mengartikan imagesc(reshape(x_reg,N,N)).
%
% Penyelesaian eksak, reshape(x,N,N), identik dengan gambar eksak pada fungsi
% blur.
%---
% Nilai default if nargin==1 f = 1;
end
% Mengonstruksi matriks koefisien A
A = spalloc(N,N,2*N);
x = (0:N)';
y = x;
for i = 1:round(f*N^2)
x0 = N*rand;
x1 = N*rand;
y0 = N*rand;
y1 = N*rand;
a = (y1-y0)/(x1-x0);
b = y0 - a*x0;
yp = a*x + b;
xp = (y - b)/a;
xp = [x;xp];
yp = [yp;y];
[xp,I] = sort(xp);
yp = yp(I);
I = find(xp >= 0 & xp <= N & yp >= 0 & yp <= N);
xp = xp(I);
yp = yp(I);
I = find(diff(xp)==0);
xp(I) = [];
yp(I) = [];
d = sqrt( diff(xp).^2 + diff(yp).^2 );
xm = 0.5*(xp(1:end-1)+xp(2:end));
ym = 0.5*(yp(1:end-1)+yp(2:end));
j = ( floor(xm) )*N + floor(ym) + 1;
A(i,j) = d';
end
Lampiran 10 (lanjutan)
x = zeros(N,N);
N2 = round(N/2);
N3= round(N/3);
N6 = round(N/6);
N12 = round(N/12);
T = zeros(N6,N3);
for i = 1:N6 for j = 1:N3
if ((i/N6)^2 + (j/N3)^2 < 1) T(i,j) = 1;
end end end
T = [fliplr(T),T];
T = [flipud(T);T];
x(2+(1:2*N6),N3-1+(1:2*N3)) = T;
T = zeros(N6,N3);
for i = 1:N6 for j = 1:N3
if ((i/N6)^2 + (j/N3)^2 < 0.6) T(i,j) = 1;
end end end
T = [fliplr(T),T];
T = [flipud(T);T];
x(N6+(1:2*N6),N3-1+(1:2*N3)) = x(N6+(1:2*N6),N3-1+(1:2*N3)) + 2*T;
f = find(x==3);
x(f) = 2*ones(size(f));
T = triu(ones(N3,N3));
[mT,nT] = size(T);
x(N3+N12+(1:nT),1+(1:mT)) = 3*T;
T = zeros(2*N6+1,2*N6+1);
[mT,nT] = size(T);
T(N6+1,1:nT) = ones(1,nT);
T(1:mT,N6+1) = ones(mT,1);
x(N2+N12+(1:mT),N2+(1:nT)) = 4*T;
x = reshape(x(1:N,1:N),N^2,1);
% Mengonstruksi vektor konstanta b b = A*x;
end