Processing math: 100%

Thursday, April 25, 2013

Belajar bikin animasi dengan MATLAB, part 1

clc;
figure('menubar', 'none', 'resize' , 'off');
x = dir('.');
test = cell(length(dir)) ;
iterasi = 0;
for i=1:length(x),
a = x(i);
a = a.name;
a =regexp(a, '\.', 'split');
if(iscell(a(end)) && length(a) == 2)
n =a(end);
m = a(1);
n = n{1};
m = m{1};
% cari hanya file yang berekstensi 'jpg' dan 'png'
cc = regexp(m,'[a-z, A-Z, 0-9]', 'match');
dd = regexp(n,'[jpg, png]','match');
if(~isempty(cc) && ~isempty(dd))
cc = strcat(m,'.', n);
iterasi = iterasi+1;
test{iterasi} = imread(cc);
end
end
end
panel1 = uipanel('units', 'pix', 'position', [20,20, 525,380]);
axes('parent', panel1);
i = 1;
while 1
im = image(test{i});
pause(2);
% salah satu cara biar MATLAB g crash. karena di MATLAb thread itu
% berjalan dengan cara yang aneh dan tidak diduga-duga. saya kan sudah
% bilang MATLAB itu jelek, :D
% kalo anda exit figure, sementara loop ini masih jalan, MATLAB akan
% crash, dan kalo anda gunakan 'requestclosefcn', itu akan membuat
% crash.
if (ishandle(im))
delete(im);
else
break;
end
i = i+1;
if i == iterasi+1
i=1;
end
end
disp('program selesai');
view raw animasi.m hosted with ❤ by GitHub
download file lengkap:https://docs.google.com/file/d/0B1irLqfPwjq0QXlJMk14dkk5N1U/edit?usp=sharing

Monday, April 22, 2013

Persamaan differensial.

Persamaan differensial.
Persamaan differensial itu sangat penting dalam dunia fisika. Persamaan differensial merupakan metode untuk merumuskan objek fisis yang paling tinggi hanya mempunyai percepatan (perubahan kecepatan1) ke dalam bentuk matematis. Menurut sejarah orang yang pertama merumuskan persamaan differensial adalah Issac Newton2. Berbeda dengan bentuk-bentuk matematis lainnya (baik identitas maupun persamaan, pertidaksamaan atau apalah), persamaan differensial harus berangkat dari objek real.
Jadi ketika kita menjumpai sebuah persamaan differensial, selanjutnya adalah bagaimana memecahkannya untuk kasus yang kita temui. Maksudnya persamaan differensial itu bukan sekedar pajangan dalam dunia matematika yang belum ditahu digunakan untuk apa (misal Last Fermat Theoreme atau Poincare Conjecture), tapi persamaan differensial itu merupakan suatu objek yang bisa kita terapkan ke dalam tataran praxis. Semua bentuk fisis dalam kehidupan sehari-hari tunduk pada persamaan differensial. Sebenarnya saya sendiri kurang begitu paham bagaimana persamaan differensial itu bisa dirumuskan. Tapi yang saya bisa tebak, bahwa orang-orang yang merumuskan persamaan differensial itu adalah pemikir tingkat tinggi. Jadi ketika Navier Stokes merumuskan persamaan Navier Stokes, sebenarnya yang ada dipikirannya itu adalah bagaimana momentum dan energi itu merambat. Ketika Newton memikirkan hukum Newton, yang dia coba katakan itu adalah hasil eksperimen dari Galileo tentang gerak jatuh bebas serta pergerakan planet.
Sebenarnya tidak ada cara umum dalam memecahkan persamaan differensial. Anda bisa buka buku karangan Michael E. Taylor tentang persamaan differensial parsial. Itu ada 3 jilid tebal-tebal dan tentunya bikin pusing. Mulai persamaan yang mudah dipecahkan hingga yang susah berupa bentuk yang non linear. Tapi berdasarkan pengalaman saya, ada 3 metode umum dalam memecahkan persamaan differensial, yakni:
a. Separasi variabel3
b. Menggunakan fungsi green
c. Menggunakan deret
d. Manipulasi matematis untuk mencari bentuk yang familiar, kemudian integralkan.
Tapi, bagian c saya belum temukan apa landasan formalnya sampai metode itu digunakan, tapi yang jelas dari persamaan itulah bentuk umum persamaan Bessel dan Legendre diturunkan.
Kemudian berbicara mengenai kasus simetri persamaan differensial, ada 3 macam keadaan yang umum dijumpai.
1. Simetri bidang datar, anda hanya perlu memecahkannya pada satu sumbu (misal sumbu x) selanjutnya untuk sumbu lain, bisa dilakukan generalisasi dengan mudah (pada banyak kasus begitu yang terjadi :D)
2. Simetri bola, contohnya untuk kasus elektron yang terperangkap dalam atom (bukan elektron bebas), biasanya anda akan sampai pada persamaan Legendre yang menghasilkan suku-suku deret Legendre.
3. Simetri Silinder, contohnya untuk perambatan gelombang elektromagnetik pada pandu gelombang (yang umunmnya berbentuk silinder). Biasanya anda akan sampai pada persamaan Bessel, dan yang mempunyai solusi umum fungsi Bessel.
Sebenarnya mengajarkan persamaan differensial butuh kesabaran, karena umumnya para pelajar bukan orang yang begitu tertarik dengan matematika. Makanya pada banyak buku fisika kuantum itu, sebelum kita membahas keadaan elektron dalam atom (dengan potensial terpusat) kita terlebih dahulu diajarkan hal-hal yang sederhana mengenai pemecahan persamaan Schrodinger. Misalnya potensial sumur tak hingga, potensial tangga, dan potensial-potensial lainnya. Gunanya untuk apa, karena pada kasus potensial tersebut, persamaan differensialnya masih mudah dipecahkan, karena hanya melibatkan simetri bidang datar. Ketika berangkat pada atom hidrogen di mana harus dirumuskan dalam skala 3 dimensi, maka otomatis simetrinya adalah simetri Bola, karena elektron sendiri mengorbit atom diasumsikan dalam orbit “bola”. Akibatnya kemungkinan besar akan sampai pada persamaan Bessel dan akhirnya pada fungsi Bessel yang sangat membingunkan bagi pemula.
Itu baru simetri bola, bagaimana kalo simetri belah ketupat atau simetri belah durian, saya ga tau fungsi apa yang digunakan. Tentunya para pemula seperti saya ini sudah pingsan duluan.





1. Tidak ada jaminan bahwa persamaan differensial itu harus sampe orde 2. Persamaan bousinneq itu sampe orde 4 (http://en.wikipedia.org/wiki/Boussinesq_equation_(water_waves) )
3. Ada banyak metode dalam separasi variabel, bukan hanya dalam bentuk perkalian, tapi ada juga dalam bentuk penjumlahan, dan itu paling tricky untuk dipraktekan bagi pemula: http://ptp.oxfordjournals.org/content/105/3/379.full.pdf

Belajar persamaan differensial I



Saturday, April 13, 2013

belajar deteksi mouse dengan MATLAB



function test_GUI
clc;
% pelajari kembali penggunaan perintah 'struct' di matlab sehingga anda
% paham maksud perintah 'M.f', 'M.ax', dan lain-lain.
M.f=figure('menubar', 'none');
M.ax = axes('units','pix' ,'position',[60,110, 470,280]);
t =0:.1:10;
plot(t,sin(t));
xlabel('t');
ylabel('sin(t)');
M.xmin = get(M.ax, 'xlim');
M.ymin = get(M.ax, 'ylim');
M.xmax = M.xmin(2);
M.ymax = M.ymin(2);
M.xmin = M.xmin(1);
M.ymin = M.ymin(1);
M.keterangan(1) = uicontrol('units', 'pix','style', 'tex', ...
'position',[40,14, 150,20],'string', 'Posisi klik:' , ...
'fontsize', 14 , 'fontweight', 'bold' ,...
'backg' , get(M.f, 'color'), 'HorizontalAlignment', 'left');
M.keterangan(2) = uicontrol('units', 'pix','style', 'tex', ...
'position',[200,14, 190,23],'string', '' , ...
'fontsize', 14 , 'fontweight', 'bold' ,...
'backg' , get(M.f, 'color'),'HorizontalAlignment', 'right');
M.keterangan(3) = uicontrol('units', 'pix','style', 'tex', ...
'position',[40,40, 150,20],'string', 'Posisi pointer:' , ...
'fontsize', 14 , 'fontweight', 'bold' ,...
'backg' , get(M.f, 'color'), 'HorizontalAlignment', 'left');
M.keterangan(4) = uicontrol('units', 'pix','style', 'tex', ...
'position',[200,40, 190,23],'string', '' , ...
'fontsize', 14 , 'fontweight', 'bold' ,...
'backg' , get(M.f, 'color'), 'HorizontalAlignment', 'right');
set(M.ax,...
'buttondownfcn',...% menanggapi jika mouse di klik di atas 'axes'/daerah plot
{@point_location, ... % panggil fungsi ini
M}); % masukkan struktur M sebagai parameter
% untuk mendeteksi pergerakan mouse di atas axes, karena secara default
% MATLAB g' menyediakan pendeteksi pergerakan untuk axes jadi kita gunakan
% pendeteksi pergerekan dari figure, dan membandingkan nilainya dengan
% lokasi axes.
set(M.f, 'windowbuttonmotionfcn', {@lokasi_pointer , M}); % end function
% 'varargin' itu dalam MATLAB ditulis dengan huruf kecil, untuk lebih
% jelasnya silakan pelajari lebih lanjut.
function [] = point_location(varargin)
% struktur (atau 'struct') dalam 'varargin' ditempatkan pada item ke-3
M = varargin{3};
xx=get(M.ax,'currentpoint');
klik_mana =get(M.f, 'selectiontype');
xx = xx(1,:);
% jika tidak lewat batas daerah
% plot. Ingat axes itu terdiri dari sumbu ('tickmark') dan daerah
% plotnya. Jadi walaupun sudah di luar daerah plot, akan tetapi masih
% di atas sumbu ('tickmark'), maka itu masih dideteksi di dalam axes.
% kemudian jika mouse diklik kiri bukan diklik kanan.
if ~(xx(1)<M.xmin)&&~(xx(2) < M.ymin)&& ...
(strcmp('normal', klik_mana)==1)
% tampilkan dalam dua angka di belakang koma dan 1 angka di depan koma
set(M.keterangan(2), 'str', strcat('x= ', num2str(xx(1), '%2.3f'), ...
' y= ' ,num2str(xx(2), ' %2.3f') ));
end %end if
function lokasi_pointer(varargin)
C = varargin{3};
xx = get(C.ax, 'currentpoint');
xx = xx(1,:);
if ~(xx(1)<C.xmin) && ~(xx(2)< C.ymin) ...
&& ~(xx(1) > C.xmax) && ~(xx(2) > C.ymax)
set(C.keterangan(4), 'str', strcat('x= ', num2str(xx(1), '%2.3f'), ...
' y= ' ,num2str(xx(2), ' %2.3f') ));
end %end if
view raw test_GUI.m hosted with ❤ by GitHub

Wednesday, April 10, 2013

Belajar scrollbar di MATLAB



function test_scrollbar
f = figure('menubar' , 'none');
panel = uipanel('units', 'pix', 'position', [40,40, 400,400]);
axes('units', 'pix', 'position', [0,0,400,400], 'parent', panel);
line([-10,10],[0,0]);
line([0 0],[-10,10]);
my_slider = uicontrol('units', 'pix', ...
'style', 'slider', ...
'position', [40,10, 100,20]);
while ishandle(f)==1
s = get(my_slider, 'value');
c = asind(s);
l = line([-10,10], [-10*tand(c) 10*tand(c)], 'Color', 'g');
m = line([10*tand(c) -10*tand(c)], [-10,10], 'Color', 'g');
drawnow;
if ishandle(l)==1, delete(l);end
if ishandle(m)==1, delete(m);end
end
end

Contoh plot transformasi



clc;
figure;
line([-10 10], [0 0 ]) % garis horizontal
line([0 0], [-10, 10]) % garis vertikal
hold on;
x = linspace(-10,10, 1000);
omega = sqrt(1+x.^2);
plot(x, omega, 'coloR', 'G');
hold on;
line([-10,10], [-4,4],'Color', 'r');
line([-4,4], [-10,10], 'CoLoR', 'R');
view raw ngajar_plot.m hosted with ❤ by GitHub