Tampilkan postingan dengan label Matlab. Tampilkan semua postingan
Tampilkan postingan dengan label Matlab. Tampilkan semua postingan

Senin, 27 Maret 2017

Bilangan Prima (SCILAB)

Dalam matematika, bilangan prima adalah bilangan asli yang lebih besar dari angka 1, yang faktor pembaginya adalah 1 dan bilangan itu sendiri. 2 dan 3 adalah bilangan prima. 4 bukan bilangan prima karena 4 bisa dibagi 2. Sepuluh bilangan prima yang pertama adalah 2, 3, 5, 7, 11, 13, 17, 19, 23 dan 29. (https://id.wikipedia.org/wiki/Bilangan_prima)

Kali ini Saya share code untuk memperoleh 100 bilangan prima pertama dengan menggunakan Scilab. Ada beberapa code yang Saya tampilkan di sini, untuk membandingkan seberapa cepat dan efektif code tersebut untuk memperoleh 100 bilangan prima pertama.

code pertama:
1. Asumsi awal semua bilangan dianggap sebagai bilangan prima.

2. Kemudian bilangan tersebut dicek dengan cara dibagi dengan semua bilangan bulat sebelumnya (yang lebih kecil). Jika sisa pembagian (modulo) ada yang sama dengan nol maka bilangan tersebut bukan bilangan prima. Atau Jika sisa pembagian (modulo) tidak ada yang sama dengan nol maka bilangan tersebut adalah bilangan prima.

3. Step 1 dan 2 dilakukan berulang-ulang sampai diperoleh 100 bilangan prima.


clear
clc

tic()

i=1;
x=2;
prima(i)=x
while (i<100)
    i=i+1;
    x=x+1;
    prima(i)=x
    for j=2:(x-1)
        sisa=modulo(x,j);
        if(sisa==0) then
            i=i-1;
            break;
        end
    end
end
disp(prima)

disp(toc())



code kedua:
1. Asumsi awal semua bilangan dianggap sebagai bilangan prima.

2. Kemudian bilangan tersebut dicek dengan cara dibagi dengan semua bilangan prima sebelumnya (yang lebih kecil). Jika sisa pembagian (modulo) ada yang sama dengan nol maka bilangan tersebut bukan bilangan prima. Atau Jika sisa pembagian (modulo) tidak ada yang sama dengan nol maka bilangan tersebut adalah bilangan prima.

3. Step 1 dan 2 dilakukan berulang-ulang sampai diperoleh 100 bilangan prima.


clear
clc

tic()

i=1;
x=2;
prima(i)=x
while (i<100)
    i=i+1;
    x=x+1;
    prima(i)=x
    for j=1:(i-1)
        sisa=modulo(x,prima(j));
        if(sisa==0) then
            i=i-1;
            break;
        end
    end
end
disp(prima)

disp(toc())
 



code ketiga:
1. Asumsi awal semua bilangan dianggap sebagai bilangan prima.

2. Kemudian bilangan tersebut dicek dengan cara dibagi dengan semua bilangan prima sebelumnya yang nilainya maksimal setengah dari bilangan yang dicek. Jika sisa pembagian (modulo) ada yang sama dengan nol maka bilangan tersebut bukan bilangan prima. Atau Jika sisa pembagian (modulo) tidak ada yang sama dengan nol maka bilangan tersebut adalah bilangan prima.

3. Step 1 dan 2 dilakukan berulang-ulang sampai diperoleh 100 bilangan prima.


clear
clc

tic()

i=1;
k=i;
x=2;
prima(i)=x
while (i<100)
    i=i+1;
    x=x+1;
   
    if (ceil(x/2)>prima(k)) then        //ceil==>pembulatan ke atas
        k=k+1;
    end
   
    prima(i)=x
    for j=1:k
        sisa=modulo(x,prima(j));
        if(sisa==0) then
            i=i-1;
            break;
        end
    end
end
disp(prima)

disp(toc())
 

Hasil:
Berikut screenshot hasil 100 bilangan prima pertama yang diperoleh. (setelah di arrange dalam bentuk matriks 10x10, kalo dalam MATLAB bisa menggunakan fungsi reshape)

Hasil Running 100 bilangan prima pertama (setelah di arrange dalam matriks 10x10)
Perbandingan konsumsi waktu untuk ketiga code tersebut: (aproximately)
code pertama: 5.878969 s
code kedua  : 1.398557 s
code ketiga : 0.939001 s

Yang terakhir dibuat dalam bentuk function untuk bisa memperoleh bilangan prima ke n. 


dalam bentuk function:

function [y]= bil_prima(ke)

i=1;
k=i;
x=2;
prima(i)=x
while (i<ke)
    i=i+1;
    x=x+1;
   
    if (ceil(x/2)>prima(k)) then        //ceil==>pembulatan ke atas
        k=k+1;
    end
   
    prima(i)=x
    for j=1:k
        sisa=modulo(x,prima(j));
        if(sisa==0) then
            i=i-1;
            break;
        end
    end
end
y=prima(ke);

endfunction



cara pemanggilan function:

//cara memanggil function

clear
clc

exec('/home/muhammadpuji/Desktop/Scilab/Belajar/05_function_bil_prima.sce', -1)         //mengaktifkan function bil_prima(ke)

tic()
ke=100;
y=bil_prima(ke);
disp(strcat(["Bilangan prima ke ",string(ke)," = ",string(y)],"","c"));

disp(strcat([string(toc()), " s"]));





Developed by:
Muhammad Nurul Puji
Project-G











Senin, 13 April 2015

Cara mengakses Serial Port menggunakan Matlab pada Linux Ubuntu 14.04 (Kasus komunikasi dgn Arduino)

Pada postingan sebelumnya Sy mencoba komunikasi dgn Arduino melalui Serial Port melalui Visual Basic. Kali ini Sy mencoba share tentang cara komunikasi Serial Port melalui Matlab di Linux Ubuntu 14.04.

Berikut adalah perintah yang umum digunakan pada Matlab untuk komunikasi melalui Serial Port.

%untuk inisialisasi Serial Port.
s = serial(portname,'BaudRate',baudrate,'terminator', 'LF');
%untuk membuka koneksi Serial Port
fopen(s);

%untuk kirim perintah ke mikro melalui Serial Port
perintah=char(strcat(frekuensi, {' '}, num2str(i) , {' '} , num2str(j)));   %Hanya contoh perintah
fprintf(s,perintah);   %untuk menulis perintah melalui Serial Port

%untuk membaca data melalui Serial Port
readbuffer=fscanf(s);

%untuk menutup koneksi apabila sudah selesai
fclose(s);
delete(s);
clear s;

Baris perintah (command) di atas akan bisa langsung digunakan pada OS berbasis windows dgn memasukkan portname='COM1' atau port yang lain.

Namun ternyata pada saat Sy coba dgn OS Ubuntu 14.04 dgn portname yang aktif adalah '/dev/ttyACM0' ternyata pada saat fopen(s) komunikasi tidak berhasil dan tampil kesalahan pada console Matlab. Bikin panik aja, apalagi saat saat genting.haha.. 



Setelah searching kesana kemari ternyata pada Matlab under Ubuntu, nama Portname harus diberi alias. Caranya dengan menambahkan kode berikut (termasuk tanda '-')

-Dgnu.io.rxtx.SerialPorts=/dev/ttyS0:/dev/ttyS1:/dev/ttyS2:/dev/ttyS3:/dev/ttyS4:/dev/ttyS5:/dev/USB0:/dev/USB1:/dev/USB2:/dev/USB3:/dev/USB4:/dev/USB5:/dev/ttyACM0:/dev/ttyACM1:/dev/ttyACM2:/dev/ttyACM3:/dev/ttyACM4:/dev/ttyACM5

kemudian disimpan dalam file bernama java.opts dan disimpan kedalam direktori aktif Matlab. Biasanya alamat direktori aktifnya adalah

/usr/local/MATLAB/R2012b/bin/glnxa64/

dengan catatan gnlxa64 adalah untuk 64 bit. Silahkan dicek lagi jika berbeda. Jangan lupa merestart aplikasi Matlab supaya bisa berfungsi. Alhamdulillah Serial Port sdh bisa terkoneksi.



















Cara mengetahui ip address raspberry atau perangkat lain yg terhubung pada wifi yg sama

1. Install nmap [jika belum ada]: sudo apt install nmap 2. Cek ip address komputer (yg akses ke wifi yang sama): ip addr misal hasilnya 192....