mengacak sebagian nilai di dalam matriks

Rabu, 09 Juni 2010
gw bikin matriks kaya gini (pake MATLAB 2009a)

nodes = zeros(20,20,6);
for i = 1:2:20
for j = 1:3:10
n(i,j) = nodes(i,j);
n(i,j) = 1;
end
end

trus sekarang gw pengen ngasih keterangan tambahan jumlah partikel di tiap isi matriks yang bernilai 1.

jumlahpartikel = nonzeros(n);
for k = 1:15
jumlahpartikel(k) = 3;
for l = 16:30
jumlahpartikel(l) = 2;
for o = 31:40
jumlahpartikel(o) = 1;
end
end
end

nah, sekarang gw masukin nilai2 jumlah partikel itu ke dalam matriks awal
k = 1;
for i = 1:2:20
for j = 1:3:10
npart(i,j) = jumlahpartikel(k);
k = k+1;
end
end

posisi jumlah partikel di dalem matriksnya masih rapi. sekarang gw mau ngacak jumlah partikel di matriks tersebut (cuma ngacak yang bernilai tidak nol).

randomjumlahpartikel = zeros(40,1);
for z = 1:40
y = randperm(z);
randomjumlahpartikel = jumlahpartikel(y);
end


trus keacakan distribusi partikel ini gw masukin lagi ke matriks, dengan nama matriks density.

k = 1;
for i = 1:2:20
for j = 1:3:10
density(i,j) = randomjumlahpartikel(k);
k = k+1;
end
end


kita liat di matriks n nilainya antara 1 dan 0. trus setelah dimasukin nilai jumlah partikel di tiap isi matriks yang bernilai 1, hasilnya ditunjukin di matriks npart. abis itu si jumlah partikel (yang tidak nol) di matriks npart diacak dan hasilnya adalah matriks density.

untuk matriks 20x10 di atas, prosesnya cepet banget. begitu gw run ga nyampe 1 detik kemudian hasilnya udah keluar.

ternyata masalah muncul saat gw melakukan proses serupa untuk matriks 640x480. kemaren sore (sekitar jam17.30) gw run, dan siang ini (sekitar jam14.20) ternyata proses jumlahpartikel baru jalan 1/8836-nya. gila.

pertanyaannya: gimana cara mengefisienkan proses tersebut?


-------------------------------------------------------------------------------------

3 komentar:

Unknown mengatakan...

ternyata masalah utk matriks besar (seperti 640x480) teratasi setelah gw ngubah

jumlahpartikel = nonzeros(n);
for k = 1:15
jumlahpartikel(k) = 3;
for l = 16:30
jumlahpartikel(l) = 2;
for o = 31:40
jumlahpartikel(o) = 1;
end
end
end

jadi begini:

jumlahpartikel = nonzeros(n);
for k = 1:15
jumlahpartikel(k) = 3;
end
for l = 16:30
jumlahpartikel(l) = 2;
end
for o = 31:40
jumlahpartikel(o) = 1;
end

hehehe. maap ga penting.

blackblock mengatakan...

hihi akhirrnyyaaaa alhamd.. makanya jangan panik duluan, padahal selesai dalam bbrp menit juga kan.. ato mungkin karena ada yg nemenin ya :P

Unknown mengatakan...

iya kali ya

Posting Komentar