Pengunjung

Senin, 08 Juli 2013

Konvolusi Image Menggunakan MATLAB

Konvolusi adalah salah satu proses filtering image yang sering dilakukan pada proses pengolahan gambar. Pada MATLAB terdapat banyak sekali cara yang dapat dilakukan untuk melakukan proses konvolusi. Proses konvolusi dilakukan dengan menggunakan matriks yang biasa disebut mask yaitu matriks yang berjalan sepanjang proses dan digunakan untuk menghitung nilai representasi lokal dari beberapa piksel pada image.

 Secara umum konvolusi didefinisikan sebagai cara untuk mengkombinasikan dua buah deret angka yang menghasilkan deret angka yang ketiga. Didalam dunia seismik deret-deret angka tersebut adalah wavelet sumber gelombang, reflektivitas bumi dan rekaman seismik. Secara matematis, konvolusi adalah integral yang mencerminkan jumlah lingkupan dari sebuah fungsi a yang digeser atas fungsi b sehingga menghasilkan fungsi c. Konvolusi dilambangkan dengan asterisk (*). Sehingga, a*b = c berarti fungsi a dikonvolusikan dengan fungsi b menghasilkan fungsi c.

Kekurangan dari metode ini adalah mengonsumsi banyak waktu karena harus mengalikan pixel berulang-ulang, sehingga tidak cocok untuk aplikasi real time. untuk mengatasi keterbatasan ini, digunakan metode alternatif yaitu transformasi fourier yang mengutak-atik ranah frekuensi, bukan spasial layaknya konvolusi. Berikut source code untuk konvolusi image menggunakan MATLAB.

gambar=imread('aceng.jpg');
mask = [-1 -1 -1; -1 8 -1; -1 -1 -1];
gray=rgb2gray(gambar);
thresh=graythresh(gray);
imbw=im2bw(gray,thresh);
hasil=conv2(double(imbw),mask,'valid');
imshow(gambar)
figure, imshow(hasil)
%konvolusi image


Sabtu, 06 Juli 2013

Object Counting Menggunakan MATLAB

Object Counting adalah proses menghitung objek berdasarkan konektivitasnya terhadapap piksel disekitarnya, bisa berdasarkan 4 piksel koneksi atau menggunakan 8 piksel koneksi. Berikut saya lampirkan source code Matlab untuk image processing object counting.

gambar=imread('aceng.jpg');
gray=rgb2gray(gambar);
thresh=graythresh(gray);
imbw=im2bw(gray,thresh);
[labeled,numObjects] = bwlabel(imbw,8);
imlabel = label2rgb(labeled, @spring, 'g', 'shuffle');
imshow(imbw)
figure,imshow(imlabel)

%objek counting



Implementasi Region of Interest (ROI) Menggunakan Image Processing

Region of Interest (ROI) merupakan salah satu fitur yang tersedia dalam JPEG2000. ROI memungkinkan dilakukannya pengkodean secara berbeda pada area tertentu dari citra digital, sehingga mempunyai kualitas yang lebih baik dari area sekitarnya. Fitur ini menjadi sangat penting, bila terdapat bagian tertentu dari citra digital yang dirasakan lebih penting dari bagian yang lainnya.

Metode yang digunakan untuk pengkodean ROI ini adalah Metode Maxshift. Prinsip utama pada pengkodean ROI ini adalah dengan menggeser bitplane dari koefisien yang dipilih sebagai ROI, sehingga menempati posisi yang lebih tinggi daripada bitplane sekitarnya. Karena menggunakan metode Maxshift, pergeserannya dilakukan sampai batas maksimal, sehingga seluruh bitplane dari koefisien ROI berada di atas bitplane dari area sekitarnya. Hal ini menyebabkan, pengkodean pada ROI akan menghasilkan area dengan kualitas maksimal dibandingkan area sekitarnya. Pada tahapan pengkodean entropi, koefisien yang dipilih untuk ROI, akan dikodekan terlebih dahulu, daripada koefisien yang lainnya.

Untuk melakukan ROI, perlu diidentifikasi koefisien–koefisien yang termasuk dalam ROI. Hal tersebut dimaksudkan untuk menghasilkan sebuah ROI mask, yang merupakan indikator dari koefisien yang termasuk ROI atau bukan. Umumnya yang digunakan sebagai penanda merupakan sebuah angka biner, yang dimiliki oleh piksel–piksel yang termasuk area ROI. Penanda tersebut berperan sebagai pemetaan area dari citra digital yang termasuk ROI. Pada proses DWT pun, mask tersebut akan berubah, mengikuti transformasi yang dilakukan pada citra digital. Sehingga pada akhirnya akan diperoleh informasi mengenai koefisien yang termasuk ROI.

Bentuk lain atau area yang berbentuk tidak beraturan yang ingin dipisahkan dari image induk maka didefinisikan sebagai ROI (Region of Interest) dimana di MATLAB terdapat banyak sekali fungsi yang bisa digunakan, salah satunya yaitu  roipoly(I,c,r) dimana I adalah matrik gambar, c adalah matrik titik kolom daerah yang menjadi ROI dan r adalah matrik titik baris daerah yang menjadi ROI. Source code Matlab untuk ROI sebagai berikut:

gambar=imread('aceng.jpg')
I=gambar(:,:,1);
c = [625 685 733 798 816 753 667];
r = [327 282 247 288 221 402 427];
BW = roipoly(I,c,r);
j = roifill(I,c,r);
figure, imshow(gambar)
figure, imshow(I)
figure, imshow(BW)
figure, imshow(j)
% image procssing




Jumat, 05 Juli 2013

Menampilkan Video Gambar Menggunakan Matlab

Dalam pemrosesan video yaitu mengambil data dengan menggunakan perintah video input dan menentukan parameter seperti video resolusi, lebar, panjang dan band dari video kemudian membuat sebuah handle yang menampung  image frame tersebut. Setelah handle image didapatkan maka biasanya video dapat ditampilkan. 

Sebelum memulai mengambil data dari video camera perlu dipastikan bahwa adapter kamera kita sudah terbaca dengan baik oleh matlab, untuk melakukan hal tersebut dapat digunakan perintah imaqhwinfopada commond windows

>> imaqhwinfo
ans =
InstalledAdaptors: {'coreco'  'winvideo'}
MATLABVersion: '7.7 (R2008b)'
ToolboxName: 'Image Acquisition Toolbox'
ToolboxVersion: '3.2 (R2008b)'
Terlihat dari hasil diatas bahwa kamera yang terinstal  pada komputer bermerk coreo dan
menggunakan driver winvideo

Dalam proses image processing yang dilakukan secara real-time pastinya dibutuhkan input data yang diambil secara real-time. Data yang diambil dapat berupa data video maupun data gambar. Data input dapat diambil dari webcam,  maupun kamera yang terintegrasi langsung pada laptop  Contoh sederhana dari menampikan video pada matlab seperti dibawah ini.

vid= videoinput('winvideo',1);
set(vid,'ReturnedColorSpace','rgb');
vidRes = get(vid, 'VideoResolution');
imWidth = vidRes(1);
imHeight = vidRes(2);
nBands = get(vid, 'NumberOfBands');
hImage = image( zeros(imHeight, imWidth, nBands) );
preview(vid, hImage);  

Hasilnya adalah sebagai berikut:

Kamis, 04 Juli 2013

Membuat Pengolahan Citra Dengan Domain Frekuensi

Pada Domain frekuensi, citra dinyatakan sebagai kombinasi dari gelombang penyusun dengan frekuensi berbeda. Transformasi Fourier merupakan suatu proses yang banyak digunakan untuk memindahkan domain dari suatu fungsi atau obyek ke dalam domain frekuensi. Di dalam pengolahan citra digital, transformasi fourier digunakan untuk mengubah domain spasial pada citra menjadi domain frekuensi. Analisa-analisa dalam domain frekuensi banyak digunakan seperti filtering. Dengan menggunakan transformasi fourier, sinyal atau citra dapat dilihat sebagai suatu obyek dalam domain frekuensi.

Berikut adalah gambar orang ganteng yang belum diproses oleh image processing. ^_^


Setelah diselesaikan menggunakan image processing maka hasilnya sebagai berikut:


Source code Matlab untuk menyelesaikan citra menggunakan fft ini adalah sebagai berikut:

gambar=imread('aceng.jpg');% aceng merupakan fiel gambar jpg
red=gambar(:,:,1);
green=gambar(:,:,2);
blue=gambar(:,:,3);
f=fft2(gambar);
ff=abs(f);
flog=log(ff);
imshow(ff(:,:,3),[0 200]), colormap(jet),colorbar
figure,imshow(ff(:,:,3),[0 12]), colormap(jet),colorbar
%Mngolah citra dngan metode FFT

 Sumber ini saya ambil dari artikel muhammad iqbal IPB Bogor

Membuat GUI untuk Logika Fuzzy

Pada artikel sebelumnya saya sudah menulis judul artikel "Menyelesaikan Logika Fuzzy Mamdani Menggunakan Matlab". Secara lengkap saya telah membahas cara menyelesaikan prediksi banjir menggunakan logika fuzzy dengan bantuan software MATLAB. Pada artikel ini saya akan memberikan sedikit ilmu untuk membuat tampilan GUI logika fuzzy untuk studi kasus prediksi banjir yang saya jelaskan pada tulisan sebelumnya. 

 Untuk membuat GUI pada prediksi banjir menggunakan logika fuzzy. Pertama kita save file prediksi banjir yang telah diselesaikan dengan logika fuzzy dan file GUI untuk menyelesaikannya dalam satu folder. Ketik guide pada commond windows sehingga muncul tampilan sebagai berikut:


Klik ok. Kemudian klik Button Group pada menu disampingnya. kemudian kita edit menjadi input dan output. Sehingga tampilanya seperti gambar dibawah ini:


Selanjutnya kita klik Static Text. kemudian klik 2x sehingga muncul akan muncul tampilan inspector. Setelah itu ganti Static Text pada string dengan variabel inputan dan outputan dalam kasus prediksi banjir . Maka tampilanya sebagai berikut:

 
Selanjutnya kita klik Edit Text. kemudian klik 2x sehingga muncul akan muncul tampilan inspector. Setelah itu hapus semua Edit Text pada string dan ganti tag dengan curah_hujan, lama_hujan, debit_sungai dan prediksi  .Maka tampilanya sebagai berikut:


Selanjutnya kita klik Push button. kemudian klik 2x sehingga muncul akan muncul tampilan inspector. Setelah itu ganti Push button pada string dan tag dengan Running dan Exit  .Maka tampilanya sebagai berikut:


Selanjutnya save dan Running. Terus masukan source code berikut:

function varargout = bisa(varargin)
% BISA M-file for bisa.fig
%      BISA, by itself, creates a new BISA or raises the existing
%      singleton*.
%
%      H = BISA returns the handle to a new BISA or the handle to
%      the existing singleton*.
%
%      BISA('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in BISA.M with the given input arguments.
%
%      BISA('Property','Value',...) creates a new BISA or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before bisa_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to bisa_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help bisa

% Last Modified by GUIDE v2.5 12-Jun-2013 09:49:20

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @bisa_OpeningFcn, ...
                   'gui_OutputFcn',  @bisa_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before bisa is made visible.
function bisa_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to bisa (see VARARGIN)

% Choose default command line output for bisa
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes bisa wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = bisa_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;



function prediksi_Callback(hObject, eventdata, handles)
% hObject    handle to prediksi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of prediksi as text
%        str2double(get(hObject,'String')) returns contents of prediksi as a double


% --- Executes during object creation, after setting all properties.
function prediksi_CreateFcn(hObject, eventdata, handles)
% hObject    handle to prediksi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function curah_hujan_Callback(hObject, eventdata, handles)
% hObject    handle to curah_hujan (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of curah_hujan as text
%        str2double(get(hObject,'String')) returns contents of curah_hujan as a double
curah_hujan=str2double(get(hObject,'string'));
handles.curah_hujan=curah_hujan;
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function curah_hujan_CreateFcn(hObject, eventdata, handles)
% hObject    handle to curah_hujan (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function lama_hujan_Callback(hObject, eventdata, handles)
% hObject    handle to lama_hujan (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of lama_hujan as text
%        str2double(get(hObject,'String')) returns contents of lama_hujan as a double

lama_hujan=str2double(get(hObject,'string'));
handles.lama_hujan=lama_hujan;
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function lama_hujan_CreateFcn(hObject, eventdata, handles)
% hObject    handle to lama_hujan (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end



function debit_sungai_Callback(hObject, eventdata, handles)
% hObject    handle to debit_sungai (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of debit_sungai as text
%        str2double(get(hObject,'String')) returns contents of debit_sungai as a double

debit_sungai=str2double(get(hObject,'string'));
handles.debit_sungai=debit_sungai;
guidata(hObject, handles);

% --- Executes during object creation, after setting all properties.
function debit_sungai_CreateFcn(hObject, eventdata, handles)
% hObject    handle to debit_sungai (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end


% --- Executes on button press in Running.
function Running_Callback(hObject, eventdata, handles)
% hObject    handle to Running (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
a=readfis('fuzzy_banjir')
out=evalfis([handles. curah_hujan handles. lama_hujan handles. debit_sungai], a)
set(handles. prediksi, 'string', out);


% --- Executes on button press in Exit.
function Exit_Callback(hObject, eventdata, handles)
% hObject    handle to Exit (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
close

Maka Tampilan akhirnya sebagai berikut:


Rabu, 03 Juli 2013

Targetku pada tahun 2013

Hari semakin berlalu. Pada bulan Juli ini mungkin banyak sekali masalah yang saya hadapi. terutama dalam menyusun sebuah gagasan untuk kemajuan diri sendiri. Sebelumnya apa yang saya rencanakan sudah sukses saya gapai. Sekarang, saya harus mulai meniti kembali usaha yang sudah saya buat. Saya mempunyai cita2 yang belum saya tuntaskan. Oleh karena itu, untuk mewujudkan cita-cita itu maka saya membutuhkan perencanaan yang matang. saya ingat perkataan ibu Marwah Daud. Beliau berkata Sebelum berlayar ke laut pikiran kita harus sudah sampai dilaut duluan. kata2 yang bijak yang selalu saya ingat bahwa perencanaan yang matang akan membuat keberhasilan yang sangat gemilang. 


Pada tahun 2013 ini, saya akan menggoreskan target dan pencapaiaan yang harus dipenuhi dengan kerja keras dan do'a. saya ingin membuktikan bahwa the power of planning itu benar2 bisa diwujudkan dengan kerja keras.  Targetku pada tahun 2013 ini adalah sebagai berikut:
  1. Kuliah S2
  2. Publikasi Buku
  3. Publikasi paper 10 buah
  4. Penghasilan 4 juta lebih 
  5. Mempunyai 10 ekskul Robotik 
  6. Menyimpan uang 2.5 juta untuk membeli rumah.
  7. Mebiayai adik sekolah
  8. Khitbah 
  9. Menjadi pengajar SMP, SMA dan SMK. 
9 poin yang harus saya tuntaskan. Mudah2n bisa saya selesaikan dengan mudah.Bismillah....Hamba mohon berilah kemudahan dalam mengejar cita2 hamba ya Alloh. amin ^_^

Senin, 01 Juli 2013

Membuat GUI untuk sistem persamaan Differensial menggunakan metode RK 4

Sprott mempunyai beberapa bentuk fungsi sederhana tiga dimensi sistem dinamis yang menunjukkan chaos. Beberapa persamaan  jerk ditemukan memiliki fungsi nonlinier sederhana yang harus memungkinkan implementasi elektronik. Hasil Tampilan GUI untuk sistem Jerk bisa dilihat dibawah ini:


 Persamaan jerk telah dipilih  oleh Spott sebagai berikut:

Dimana Persamaan  ini memiliki sistem non-linear  dalam bentuk modulus variable dinamik. Persamaan perilaku chaos ini (untuk a=0.6 dan b = 1) telah diverifikasi oleh Sprott dan Linz  dengan menerapkan kondisi awal 0. Solusi numerik yang diperoleh dapat berupa diagram fasa dan diagram time series. Dengan menganalisis diagram fasa dan time series dari sistem, dapat diamati lintasan dari sistem tersebut yang kemudian dapat diklasifikasikan jenis geraknya. 

Untuk membuat GUI, pada tulisan sebelumnya sudah saya jelaskan. maka disini saya hanya memberi gambaran secara garis besar saja. GUI untuk tampilan sirkuit Jerk sebagai berikut:


Pada tampilan GUI diatas, y0 adalah kondisi awal sistem, T (start)= waktu awal, T (end)= waktu akhir, a,b dan c adalah parameter sistem. displayplot untuk menampilkan diagram fase dan timeplot untuk menampilkan time series.  Setelah membuat GUI seperti diatas, maka masukan source code kedalam matlab sebagai berikut:

 function varargout = lorenzGUI(varargin)

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @lorenzGUI_OpeningFcn, ...
                   'gui_OutputFcn',  @lorenzGUI_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin & isstr(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


%--------------------------------------------------------------------------
function lorenzGUI_OpeningFcn(hObject, eventdata, handles, varargin)

handles.output = hObject;
movegui(hObject,'onscreen')              % To display application onscreen
movegui(hObject,'center')                % To display application in the center of screen
set(handles.gridopt,'checked','on')      % To check the grid option
set(handles.animate2d_disp2,'Value',0)
set(handles.y13dlabel,'Visible','Off')
set(handles.y23dlabel,'Visible','Off')
set(handles.y2label,'String','y2','Visible','On','Position',[0.255 0.606 0.032 0.034])
xlimits = [-25  25];
ylimits = [-30  30];
zlimits = [-1   50];
ytime_limits = [-25 25];
xtime_limits = [1 40];
set(handles.display_plot,'XLim',xlimits,'YLim',ylimits,'ZLim',zlimits);
set(handles.time_plot,'XLim',xtime_limits,'YLim',ytime_limits);
handles.line_plot = [];
handles.line_plotd = [];
handles.line_time_plot = [];
handles.line_time_plotd = [];
guidata(hObject, handles);
%--------------------------------------------------------------------------
function varargout = lorenzGUI_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;

%--------------------------------------------------------------------------
function run_wave_Callback(hObject, eventdata, handles)

t0 = str2num(get(handles.t0,'String'));       % Get start time
tfinal = str2num(get(handles.tf,'String'));   % Get end time
b = str2num(get(handles.b,'String'));         % Get value of b
r = str2num(get(handles.r,'String'));         % Get value of r
sigma = str2num(get(handles.sigma,'String')); % Get value of sigma
y0 = str2num(get(handles.y0,'String'));       % Get initial solution
dy0 = str2num(get(handles.dyo,'String'));     % Get the change in the initial solution
dy = y0 - dy0;

C = sqrt(b*(r-1)).*[1 -1];
Cp2 = r-1;
y = y0(:);
y2 = dy(:);
i = 1;
set(handles.animate2d_disp1,'Enable','Off')
set(handles.animate2d_disp2,'Enable','Off')
set(handles.animate3d_disp,'Enable','Off')
set(handles.actual_yo,'Enable','Off')
set(handles.change_dyo,'Enable','Off')

if strcmp(get(handles.run_wave,'String'),'RUN/PLOT')
    set(handles.run_wave,'String','STOP');
    cla;
    set(handles.display_plot,'HandleVisibility','On')
    set(handles.time_plot,'HandleVisibility','Off')
    cla; % clear figure
    set(gca,'UserData',1)

    pause(0.01)
    options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-4]);
    [t1,Y] = ode45(@lorenzequation,[t0 tfinal],y0,options,b,r,sigma);
    [t2,DY] = ode45(@lorenzequation,[t0 tfinal],dy,options,b,r,sigma);
    ball_plot = line('XData',y(1),'YData',y(2),'ZData',y(3), ...
            'Color','Blue','Marker','.','Markersize',25,'Erase','Xor');
    line_plot = line('XData',[],'YData',[],'YData',[],'Color','Blue','LineStyle','-','Erase','None');
    ball_plotd = line('XData',dy(1),'YData',dy(2),'ZData',dy(3), ...
            'Color','Red','Marker','.','Markersize',25,'Erase','Xor');
    line_plotd = line('XData',[],'YData',[],'YData',[],'Color','Red','LineStyle','-','Erase','None');
  
  
    set(handles.display_plot,'Drawmode','Fast','Visible','On','NextPlot','Add')
    set(handles.display_plot,'HandleVisibility','Off')
    set(handles.time_plot,'HandleVisibility','On')
    ball_time_plot = line('XData',t0,'YData',y(1),...
            'Color','Blue','Marker','.','MarkerSize',25,'Erase','Xor');
    line_time_plot = line('XData',[],'YData',[],'Color','Blue','LineStyle','-','Erase','None');
    ball_time_plotd = line('XData',t0,'YData',dy(1),...
            'Color','Red','Marker','.','MarkerSize',25,'Erase','Xor');
    line_time_plotd = line('XData',[],'YData',[],'Color','Red','LineStyle','-','Erase','None');
  
  
    set(handles.time_plot,'Drawmode','Fast','Visible','On','NextPlot','Add')
    xlimits = [t0 tfinal];
    ylimits = [ceil(min(min(Y(:,1)),min(DY(:,1))))-5 ceil(max(max(Y(:,1)),max(DY(:,1))))+5];
    set(handles.time_plot,'XLim',xlimits,'YLim',ylimits,'Box','ON');
    set(handles.display_plot,'HandleVisibility','On')
    set(handles.time_plot,'HandleVisibility','Off')
    if get(handles.animate2d_disp1,'Value') == 1
        Yt = [Y(:,1)];
        DYt = [DY(:,1)];
        plot_view = [0,90];
        set(handles.display_plot,'View',plot_view);
        xlimits = [ceil(min(min(Y(:,1)),min(DY(:,1))))-5 ceil(max(max(Y(:,1)),max(DY(:,1))))+5];
        ylimits = [ceil(min(min(Y(:,2)),min(DY(:,2))))-5 ceil(max(max(Y(:,2)),max(DY(:,2))))+5];
        zlimits = [ceil(min(min(Y(:,3)),min(DY(:,3))))-5 ceil(max(max(Y(:,3)),max(DY(:,3))))+5];
        set(handles.display_plot,'XLim',xlimits,'YLim',ylimits,'ZLim',zlimits,'Box','ON');
        c_mark1 = line('Xdata',[C(1)],'Ydata',[C(1)],'Marker','.','MarkerSize',25,'Color','Green');
        c_mark2 = line('Xdata',[C(2)],'Ydata',[C(2)],'Marker','.','MarkerSize',25,'Color','Green');
        c_line = line('xdata',[C(1) C(2)],'ydata',[C(1) C(2)],'LineStyle',':','Linewidth',2,'Color','Green');
    elseif get(handles.animate2d_disp2,'Value') == 1
        plot_view = [0,90];
        set(handles.display_plot,'View',plot_view);
        Y = [Y(:,1) Y(:,3) Y(:,2)];
        DY = [DY(:,1) DY(:,3) DY(:,2)];
        Yt = [Y(:,1)];
        DYt = [DY(:,1)];
        xlimits = [ceil(min(min(Y(:,1)),min(DY(:,1))))-5 ceil(max(max(Y(:,1)),max(DY(:,1))))+5];
        ylimits = [ceil(min(min(Y(:,2)),min(DY(:,2))))-5 ceil(max(max(Y(:,2)),max(DY(:,2))))+5];
        zlimits = [ceil(min(min(Y(:,3)),min(DY(:,3))))-5 ceil(max(max(Y(:,3)),max(DY(:,3))))+5];
        set(handles.display_plot,'XLim',xlimits,'YLim',ylimits,'ZLim',zlimits,'Box','ON');
        c_mark1 = line('XData',[C(1)],'YData',[Cp2],'Marker','.','MarkerSize',25,'Color','Green');
        c_mark2 = line('XData',[C(2)],'YData',[Cp2],'Marker','.','MarkerSize',25,'Color','Green');
        c_line = line('XData',[C(1) C(2)],'YData',[Cp2 Cp2],'LineStyle',':','Linewidth',2,'Color','Green');
    elseif get(handles.animate3d_disp,'Value') == 1
        Yt = [Y(:,1)];
        DYt = [DY(:,1)];
        plot_view = [-37.5,30];
        set(handles.display_plot,'View',plot_view);
        xlimits = [ceil(min(min(Y(:,1)),min(DY(:,1))))-5 ceil(max(max(Y(:,1)),max(DY(:,1))))+5];
        ylimits = [ceil(min(min(Y(:,2)),min(DY(:,2))))-5 ceil(max(max(Y(:,2)),max(DY(:,2))))+5];
        zlimits = [ceil(min(min(Y(:,3)),min(DY(:,3))))-5 ceil(max(max(Y(:,3)),max(DY(:,3))))+5];
        set(handles.display_plot,'XLim',xlimits,'YLim',ylimits,'ZLim',zlimits,'Box','OFF');
    end
    set(gca,'UserData',1)
    while get(gca,'Userdata')==1
        if t1(i) >= tfinal
            set(gca,'Userdata',-1);
            set(handles.run_wave,'String','RUN/PLOT');
            break
        end
      
        if get(handles.actual_yo,'Value')==0
            set(line_plot,'Visible','Off')
            set(line_time_plot,'Visible','Off')
        elseif get(handles.actual_yo,'Value')==1
            set(line_plot,'Visible','On')
            set(line_time_plot,'Visible','On')
         end
        if get(handles.change_dyo,'Value')==0
            set(line_plotd,'Visible','Off')
            set(line_time_plotd,'Visible','Off')
        elseif get(handles.change_dyo,'Value')==1
            set(line_plotd,'Visible','On')
            set(line_time_plotd,'Visible','On')
        end
        set(ball_plot,'XData',Y(i,1),'YData',Y(i,2),'ZData',Y(i,3))
        set(ball_plotd,'XData',DY(i,1),'YData',DY(i,2),'ZData',DY(i,3))
        set(ball_time_plot,'XData',t1(i),'YData',Yt(i))
        set(ball_time_plotd,'XData',t2(i),'YData',DYt(i))
        set(line_plot,'XData',Y(1:i,1),'YData',Y(1:i,2),'ZData',Y(1:i,3))
        set(line_plotd,'XData',DY(1:i,1),'YData',DY(1:i,2),'ZData',DY(1:i,3))
        set(line_time_plot,'XData',t1(1:i),'YData',Yt(1:i))
        set(line_time_plotd,'XData',t2(1:i),'YData',DYt(1:i))
        handles.line_plot = line_plot;
        handles.line_plotd = line_plotd;
        handles.line_time_plot = line_time_plot;
        handles.line_time_plotd = line_time_plotd;
        guidata(hObject, handles);
        drawnow;
        pause(0.01)
        i = i + 1;
    end
    set(line_plot,'Erase','Background')
    set(line_plotd,'Erase','Background')
    set(line_time_plot,'Erase','Background')
    set(line_time_plotd,'Erase','Background')
   
else
    set(gca,'Userdata',-1);
    set(handles.run_wave,'String','RUN/PLOT');
end
set(handles.display_plot,'HandleVisibility','Off')
set(handles.time_plot,'HandleVisibility','On')
set(handles.animate2d_disp1,'Enable','On')
set(handles.animate2d_disp2,'Enable','On')
set(handles.animate3d_disp,'Enable','On')
set(handles.actual_yo,'Enable','On')
set(handles.change_dyo,'Enable','On')

%--------------------------------------------------------------------------
function animate2d_disp1_Callback(hObject, eventdata, handles)
cla;
set(handles.time_plot,'HandleVisibility','Off')
set(handles.display_plot,'HandleVisibility','On')
cla;
plot_view = [0,90];
set(handles.display_plot,'View',plot_view,'Box','On');
set(handles.y1label,'Visible','On')
set(handles.y2label,'String','y2','Visible','On','Position',[0.255 0.606 0.032 0.034])
set(handles.y13dlabel,'Visible','Off')
set(handles.y23dlabel,'Visible','Off')
set(handles.animate3d_disp,'Value',0)
set(handles.animate2d_disp2,'Value',0)

%--------------------------------------------------------------------------
function animate2d_disp2_Callback(hObject, eventdata, handles)
cla;
set(handles.time_plot,'HandleVisibility','Off')
set(handles.display_plot,'HandleVisibility','On')
cla;
plot_view = [0,90];
set(handles.display_plot,'View',plot_view,'Box','On');
set(handles.y1label,'Visible','On')
set(handles.y2label,'String','y3','Visible','On','Position',[0.255 0.606 0.032 0.034])
set(handles.y13dlabel,'Visible','Off')
set(handles.y23dlabel,'Visible','Off')
set(handles.animate3d_disp,'Value',0)
set(handles.animate2d_disp1,'Value',0)

%--------------------------------------------------------------------------
function animate3d_disp_Callback(hObject, eventdata, handles)
cla;
set(handles.time_plot,'HandleVisibility','Off')
set(handles.display_plot,'HandleVisibility','On')
cla;
plot_view = [-37.5,30];
set(handles.display_plot,'View',plot_view,'Box','OFF');
set(handles.y1label,'Visible','Off')
set(handles.y2label,'String','y3','Position',[0.245 0.6 0.032 0.034])
set(handles.y13dlabel,'Visible','On')
set(handles.y23dlabel,'Visible','On')
set(handles.animate2d_disp1,'Value',0)
set(handles.animate2d_disp2,'Value',0)

%--------------------------------------------------------------------------
function info_Callback(hObject, eventdata, handles)
helpwin('lorenzGUI.m')

%--------------------------------------------------------------------------
function close_button_Callback(hObject, eventdata, handles)
close(gcbf) % to close GUI

%--------------------------------------------------------------------------
function b_CreateFcn(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function b_Callback(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function sigma_CreateFcn(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function sigma_Callback(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function r_CreateFcn(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function r_Callback(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function t0_CreateFcn(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function t0_Callback(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function tf_CreateFcn(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function tf_Callback(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function y0_CreateFcn(hObject, eventdata, handles)

%--------------------------------------------------------------------------
function y0_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------
function Gridmenu_Callback(hObject, eventdata, handles)

% --------------------------------------------------------------------
function grid_onoff_Callback(hObject, eventdata, handles)
if strcmp(get(handles.gridopt,'checked'),'on')
    set(handles.gridopt,'checked','off')           % To uncheck the grid option
    set(handles.display_plot,'XGrid','Off','YGrid','Off','ZGrid','Off') % Make the grid invisible
    set(handles.time_plot,'XGrid','Off','YGrid','Off') % Make the grid invisible
else
    set(handles.gridopt,'checked','on')            % To check the grid option
    set(handles.display_plot,'XGrid','On','YGrid','On','ZGrid','On')   % Make the grid visible
    set(handles.time_plot,'XGrid','On','YGrid','On') % Make the grid invisible
end

% --------------------------------------------------------------------
% Funtion to solve the equations
function dy = lorenzequation(t,y,b,r,s)
dy = zeros(3,1);
dy(1) =y(2);
dy(2) =r*y(3);
dy(3) = abs(y(1))-1-b*y(2)-s*y(3);

% --- Executes during object creation, after setting all properties.
function dyo_CreateFcn(hObject, eventdata, handles)

function dyo_Callback(hObject, eventdata, handles)

% --- Executes on button press in actual_yo.
function actual_yo_Callback(hObject, eventdata, handles)
if get(handles.actual_yo,'Value')==0
    set(handles.line_plot,'Visible','Off')
    set(handles.line_time_plot,'Visible','Off')
elseif get(handles.actual_yo,'Value')==1
    set(handles.line_plot,'Visible','On')
    set(handles.line_time_plot,'Visible','On')
end

% --- Executes on button press in change_dyo.
function change_dyo_Callback(hObject, eventdata, handles)
if get(handles.change_dyo,'Value')==0
    set(handles.line_plotd,'Visible','Off')
    set(handles.line_time_plotd,'Visible','Off')
  
elseif get(handles.change_dyo,'Value')==1
    set(handles.line_plotd,'Visible','On')
    set(handles.line_time_plotd,'Visible','On')
end


 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Lady Gaga, Salman Khan