Dalam tulisan kali ini, saya akan mencoba menjelaskan sedikit mengenai bagaimana cara menambahkan kode latex ke dalam libre office. Mengapa latex, adalah karena di samping sudah merupakan sebuah standar dalam penulisan dokument, Latex juga memberikan sedikit fleksibilitas dalam penulisan rumus (formula) ke dalam dokument. Dalam artian ada banyak simbol-simbol dan teknik penulisan persamaan yang ada di Latex yang mungkin tidak dijumpai dalam sistem pemrosesan dokumen model lain.
Untuk keperluan itu, kita terlebih dahulu harus menggunakan sebuah addons yakni texmath, yang bisa di download di:
http://extensions.libreoffice.org/extension-center/texmaths-1
Untuk bisa menggunakannya, kita harus pastikan bahwa di komputer kita sudah terinstall miktex atau kompiler Latex yang lain. Kalo Sudah tinggal kita install dan konfigurasi agar libre office mengenali miktex pada komputer kita.
Untuk menginstall, gampang aja, yakni klik: menu->extension manager->add->pilih lokasi installer texmath
Jika sudah terinstall, restart dulu libre office, akan muncul icon seperti gambar berikut
Sekarang klik icon ketiga pada gambar tersebut, untuk melakukan konfigurasi agar libre office tahu di mana miktex (kompiler Latex) berada:
Dalam gambar tersebut, kita hanya perlu mengisi dua buah kotak, kotak ketiga hanya pilihan, sementara kotak yang paling atas wajib di isi karena merupakan lokasi bagi latex kompiler. Biasanya kalo miktex sudah terinstall (bukan portable), texmath akan dengan sendirinya mengenali lokasinya, namun karena kebetulan saya menggunakan miktex portable, maka harus dilakukan konfigurasi manual ketiga kotak tersebuut.
Selanjutnya kita tinggal klik icon berbentuk pi untuk memasukkan persamaan ke dalam dokument kita.
Lantas klik tombol Latex:
Untuk persamaan yang diberi nomor klik icon berbentuk pi yang di tengah (yang lebih kecil dengan tambahan angka 1 dalam kurung siku).
Selanjutnya kita bisa mengatur beberapa hal menyangkut resolusi persamaan dalam dokument kita beserta transparansinya. Yakni dengan mengklik kotak preference
Bagusnya kita jangan menggunakan transparansi, karena ketika persamaannya diletakkan dalam sebuah diagram, transparansi akan menyulitkan kita dalam memindah-mindahkan persamaannya. Namun ada kalanya kita meletakkan sebuah persamaan di atas sebuah kotak atau diagram yang berwarna sehingga jika tidak diberi transparansi akan kurang bagus seperti pada gambar berikut
Oleh karena itu kita harus mengatur preamble pada kode Latex yakni dengan mengklik kotak preamble
Yang perlu dilakukan adalah menghilangkan tanda comment (%) dari kode tersebut, lantas menset nilai fgcolor dan bgcolor sesuai dengan nilai warna (dalam RGB) dari kotak/diagram yang akan ditempati oleh persamaan tersebut. Untuk mengetahui nilai warna tersebut. fgcolor menyatakan warna text sementara bgcolor menyatakan warna latar belakang. Secara default nilai fgcolor adalah (0,0, 255) atau hitam, sementara bgcolor adalah (255,255,255) atau putih. Untuk mengetahui nilai RGB dari diagram kita caranya adalah klik kanan pada area diagram lantas pilih menu area->color:
SELAMAT MENCOBA.....
Sesungguhnya shalat itu mencegah dari (perbuatan-perbuatan) keji dan mungkar
Q.S. Al-'Ankabut Ayat 45
Monday, December 30, 2013
Friday, December 20, 2013
Menghitung bobot dan node pada Gauss Quadrature
Untuk menghitung integral berhingga dengan Gauss-Quadrature sebenarnya agak-agak rumit. Karena kita harus menempuh beberapa metode yang agak ruwet dan tidak mudah. Harus menyelesaikan sistem persamaan Linear dan lain-lain manipulasi aljabar yang membingungkan. Karena kita harus menghitung bobot dan node yang tergantung berapa nodenya. Tapi saya menemukan suatu source code di internet yang sudah menyelesaikan persoalan tersebut. Yakni
Anda bisa mengkonfirmasi di buku nilai-nilai di atas.
Kebetulan dasar teorinya agak ribet, tapi saya menemukan salah satunya di internet juga yakni sebuah tesis magister. Yang bisa anda download di:
https://drive.google.com/file/d/0B1irLqfPwjq0RFhHQVpvaUVuWlk/edit?usp=sharing
function [x,w]=lgwt(N,a,b) % lgwt.m % % This script is for computing definite integrals using Legendre-Gauss % Quadrature. Computes the Legendre-Gauss nodes and weights on an interval % [a,b] with truncation order N % % Suppose you have a continuous function f(x) which is defined on [a,b] % which you can evaluate at any x in [a,b]. Simply evaluate it at all of % the values contained in the x vector to obtain a vector f. Then compute % the definite integral using sum(f.*w); % % Written by Greg von Winckel - 02/25/2004 N=N-1; N1=N+1; N2=N+2; xu=linspace(-1,1,N1)'; % Initial guess y=cos((2*(0:N)'+1)*pi/(2*N+2))+(0.27/N1)*sin(pi*xu*N/N2); % Legendre-Gauss Vandermonde Matrix L=zeros(N1,N2); % Derivative of LGVM Lp=zeros(N1,N2); % Compute the zeros of the N+1 Legendre Polynomial % using the recursion relation and the Newton-Raphson method y0=2; % Iterate until new points are uniformly within epsilon of old points while max(abs(y-y0))>eps L(:,1)=1; Lp(:,1)=0; L(:,2)=y; Lp(:,2)=1; for k=2:N1 L(:,k+1)=( (2*k-1)*y.*L(:,k)-(k-1)*L(:,k-1) )/k; end Lp=(N2)*( L(:,N1)-y.*L(:,N2) )./(1-y.^2); y0=y; y=y0-L(:,N2)./Lp; end % Linear map from[-1,1] to [a,b] x=(a*(1-y)+b*(1+y))/2; % Compute the weights w=(b-a)./((1-y.^2).*Lp.^2)*(N2/N1)^2;Di mana versi python-nya adalah:
import numpy as np np.set_printoptions(precision=4) # fungsi untuk menghitung node-node pada gauss-quadrature def lgwt(N, a , b): N = N -1 N1 , N2= N + 1, N+2 xu = np.linspace(-1,1, N1) y = np.cos(( 2* np.transpose(np.arange(0,N+1)) + 1 )\ * np.pi / (2 * N + 2)) + (0.27 / N1 ) * np.sin(np.pi * xu * N / N2) ; L = np.zeros([N1, N2]) y0 = 2 while np.max(np.abs(y - y0 )) > spacing(1): L[:,0] = 1 L[:,1] = y for k in range(1, N1): L[:,k+1] = ((2*(k+1)-1)*y *L[:,k]-(k)*L[:,k-1])/(k+1) Lp=(N2)*(L[:,N1-1]-y * L[:,N2-1])/(1-np.power(y,2)) y0 = y y = y0 - L[:, N2-1] / Lp N2 = float(N2) N1 = float(N1) x = (a*(1-y ) + b * (1+ y) ) / 2 w = (b-a) / ((1 - np.power(y ,2 ) ) * np.power(Lp, 2) ) \ * np.power(N2/N1 , 2) return (x, w) (a , b ) = lgwt(12,-5,5) # untuk ngetes print a print bPotongan eksekusinya adalah
Anda bisa mengkonfirmasi di buku nilai-nilai di atas.
Kebetulan dasar teorinya agak ribet, tapi saya menemukan salah satunya di internet juga yakni sebuah tesis magister. Yang bisa anda download di:
https://drive.google.com/file/d/0B1irLqfPwjq0RFhHQVpvaUVuWlk/edit?usp=sharing
Thursday, December 19, 2013
Maksud perintah eval di MATLAB
Berikut ini saya berikan contoh penggunaan perintah eval di MATLAB. Silakan dites di komputer anda... kebetulan saya g bisa buat video demonya lantaran koneksi lambat :D.
sayang = ['clc;',... 'f = figure;', ... 'x = linspace(-pi,pi,100 );', ... 'y = sin(x);',... 'maju = 1;',... 'm = 1;',... 'n = 1;',... 'while ishandle(f)',... 'for i=1:length(x)',... 'p = plot(x(1:i),y(1:i), ''linewidth'', 3);'... 'hold on;'... 'p1 = plot(x(i), y(i),''r.'' , ''markersize'', 30);'... 'axis([-pi pi -1 1]);'... 'pause(0.01);',... 'if ishandle(p), delete(p); end,'... 'if ishandle(p1),delete(p1); end,'... 'end,',... 'for i=length(x):-1:1',... 'p = plot(x(i:length(x)),y((i:length(y))), ''linewidth'', 3);',... 'p1 = plot(x(i), y(i),''r.'' , ''markersize'', 30);'... 'axis([-pi pi -1 1]);'... 'pause(0.01);',... 'if ishandle(p), delete(p); end,',... 'if ishandle(p1),delete(p1); end,'... 'end,',... 'end']; eval(sayang);
Wednesday, December 18, 2013
Kenapa harus ada perintah comet di MATLAB
Saya sampai hari ini kurang paham, kenapa sampai ada perintah comet di MATLAB. Coba tes perintah berikut di komputer anda, apa yang terjadi. Soalnya koneksi lagi lambat jadi g bisa buat videonya.
function comet clc; f = figure; m = @sin ; n = @cos ; x = linspace(-pi,pi, 300); a = 'm'; tescomet(30); function tescomet(n) state = 1; for i=1:n if state a = strcat(a,'(n'); state = 0; else a = strcat(a,'(m'); state = 1; end end a = strcat(a, '(x)'); for k= 1:n a = strcat(a, ')'); end end y = eval(a); m = 1; plot(x, y); hold on; maju = 1; while ishandle(f) if m > length(x), maju = 0; m = length(x); elseif m < 1 maju = 1 ; m = 1; end p = plot(x(m), y(m), 'r.', 'markersize', 30); pause(0.005); if ishandle(p), delete(p); end if maju, m = m+1; else m = m - 1; end end end
Batas memori stack pada python dan matlab
Saya penasaran, bagaimana jika kita memplot sebuah fungsi sinusoidal hingga tak berhingga, apa yang terjadi. Maksudnya adalah bagaimana jika kita memplot \( \sin(\sin( \sin( \cdots x) \cdots )) \). Ternyata untuk software yang berbeda hasilnya beda pula. Untuk MATLAB kapasitasnya di batasi sampai 32 kurung bersarang. Sementara untuk python untuk 90 kurung bersarang.
Berikut contohnya untuk MATLAB
dengan sourcenya:
dengan source-nya
dengan sourcenya:
function test_sin_sin clc; x = linspace(0, 2*pi ); cut(2); cut(15); cut(30); function cut(a) y = 'sin('; for i=1:a, y = strcat(y,'sin('); end y = strcat(y, 'x)'); for i=1:a, y = strcat(y, ')'); end y = eval(y); plot(x, y); hold on ; end endAdapun untuk python adalah
dengan source-nya
# -*- coding: utf-8 -*- """ Created on Thu Dec 19 15:22:44 2013 @author: fajar """ x = linspace(-pi,pi, 1000); def test(a): aa = 'sin(' for i in range(a): aa += 'sin(' aa += 'x)' for i in range(a): aa+= ')' yy = eval(aa); plot(x, yy); test(90)
Wednesday, December 11, 2013
Tuesday, December 3, 2013
Convert List Generic ke list tipe tertentu di java
Berikut ini adalah contoh bagaimana mengconvert list generic ke list tipe tertentu di java
Monday, November 18, 2013
Belajar optimisasi di MATLAB
Sebenarnya untuk kreatif g perlu mahal, asalkan kita banyak baca. Berikut ini saya akan membahas sebuah contoh dasar pada buku kalkulus James stewart edisi 5 pada bab 4.7 yakni soal latihan nomor 57.
Yang hasilnya saya gambar ulang menjadi
Pada gambar di atas, terlihat jelas bahwa sudut \(\theta\) dapat dinyatakan sebagai fungsi \(x\) yakni
$$
\begin{equation}
\theta = 180^o -tan^{-1} \left ( \frac{2}{x} \right ) - \tan^{-1} \left( \frac{5}{3-x} \right )
\end{equation}
$$
yang nilai maksimumnya dapat dinyatakan sebagai
$$
\begin{eqnarray}
\frac{d \theta}{dx } &= & 0 + \frac{2}{x^2} \frac{1}{1 + \frac{4}{x^2} } - \frac{5}{(3 - x)^2} \cdot \frac{1}{1 + \frac{25}{(3 - x)^2}} \\
& = & \frac{2}{x^2 + 4} - \frac{5}{(3 - x)^2 + 25} = 0
\end{eqnarray}
$$
atau
\begin{eqnarray}
3 x^2 + 12 x - 12 = 0
\end{eqnarray}
yang akarnya adalah \(x = - 6 \pm 6\sqrt{2} \). Di mana yang memenuhi adalah \(x = -6 + 6 \sqrt{2} = 6 (\sqrt{2} - 1) \approx 2.4\)
Untuk mengilustrasikan jawaban tersebut, saya sudah membuat sebuah program sederhana dalam bahasa MATLAB yang sourcenya pembaca bisa coba di rumah, ditulis dengan menggunakan MATLAB 2009. Adapun sourcenya adalah:
% jawaban soal nomor 57 BAB 4.7 dari buku James Stewart kalkulus % edisi 5 % author: Mohammad Fajar function soal57 clc; f = figure('menubar', 'none', 'resize', 'off', ... 'position', [200, 100, 800, 450]); ax1 = axes('units', 'pix', 'position', [50 50 340 270]... , 'xlim', [0 2*pi], 'ylim', [-1.5, 1.5]); ax2 = axes('units', 'pix', 'position', [430 50 340 270]... , 'xlim', [0 2*pi], 'ylim', [-1.5, 1.5]); slider = uicontrol('style', 'slider', 'position', [50 380 90 20]); text_ = uicontrol('style', 'text', 'position', [150 380 40 20 ]); set(slider, 'value', 0.1); set(slider, 'sliderstep', [0.05 0.05]); ss = 0:0.01:3; theta = 180 - atand(2./ss) - atand(5./(3- ss)); maksimum = max(theta); % jawabannya while ishandle(f) xx = get(slider , 'value'); xx = xx * 3; set(text_, 'string', num2str(xx)); trigx = [0 0;5 2;0 0]; trigy = [0 3-xx;0 3;3-xx 3]; z = [1 1;1 1;1 1]; p = patch(trigx, trigy, z, 'parent', ax2); axis([-1 ,6, -1, 4]); thetax = 180 - atand(2./xx) - atand(5./(3 - xx)); p2 = plot(ss, theta, 'parent', ax1); xlabel(ax1, 'x'); ylabel(ax1, '\theta'); hold on; p3 = line([xx xx], [0 thetax], 'linewidth', 4, 'parent', ax1); tt = text(xx+.1,thetax-3,['\theta = ', num2str(thetax)],'parent', ax1 ... , 'fontsize', 9); tt2 = text(0.8,3-xx,['\leftarrow \theta = ', num2str(thetax), '^o'],'parent', ax2 ... , 'fontsize', 12); % ini hanya untuk mengakali karena step slider dan step linspace pada % MATLAB tidak sama :) if floor(thetax) == floor(maksimum) set(p3, 'color', 'r'); set(p, 'facecolor', 'y'); end drawnow; if ishandle(p), delete(p);end if ishandle(p2), delete(p2);end if ishandle(p3), delete(p3);end if ishandle(tt), delete(tt);end if ishandle(tt2), delete(tt2);end endadapaun hasil runningnya adalah:
Wednesday, November 13, 2013
Memahami garis singgung dengan MATLAB
Berikut ini saya berikan contoh program untuk memahami makna filosofis dari garis singgung.
function garis_singgung % author: mohammad fajar :) clc; f = figure('menubar', 'none', 'resize', 'off'); axes('units', 'pix', 'position', [50 50 450 300]... , 'xlim', [0 2*pi], 'ylim', [-1.5, 1.5]); slider = uicontrol('style', 'slider', 'position', [50 380 90 20]); text = uicontrol('style', 'text', 'position', [150 380 40 20 ]); t = 0:.1:2*pi; y1 = sin(t); y2 = cos(t); plot(t, y1 , t, y2); hold on ; line([0 2*pi], [0 0]); hold on ; while ishandle(f) value = get(slider , 'value'); value = value * 2 * pi; set(text, 'string', num2str(value)); hasil = cos(value); yy = (t - value ).* hasil + sin(value) ; p = plot(t, yy, 'r' , 'linewidth', 2); p1 = line([value value ] , [0 cos(value)], 'linewidth', 4); p2 = plot(value, sin(value),'r.' , 'markersize', 23); % method drawnow tidak mengenali settingan di atas axis([0 , 2*pi, -1.5, 1.5 ]); drawnow; if ishandle(p), delete(p); end if ishandle(p1), delete(p1); end if ishandle(p2), delete(p2); end end endAdapun hasilnya adalah pada gambar berikut:
Friday, November 1, 2013
Belajar monte carlo dengan MATLAB untuk menghitung luas kurva
Berikut ini contoh program yang saya buat pake MATLAB untuk menghitung luas kurva "apa saja" dengan menggunakan metode Monte Carlo.
Yang source codenya
function test_monte_carlo clear all ; clc; f = figure('menubar', 'none', 'resize', 'off' ); ax = axes('units', 'pix', 'position', [40 50 340 340]); uicontrol('units', 'pix', 'position', [400 360 60 25],... 'style', 'text','string','f(x) :' , 'fontsize', 12, 'horizontalAlignment', 'left', ... 'fontsize', 12, 'fontweight', 'bold', 'backgroundcolor', get(f, 'color')); % input fungsi inputFungsi = uicontrol('units', 'pix', 'position', [450 360 100 25],... 'style', 'edit', 'fontsize', 12); uicontrol('units', 'pix', 'position', [400 330 60 25],... 'style', 'text','string','N :' , 'fontsize', 12, 'horizontalAlignment', 'left', ... 'fontsize', 12, 'fontweight', 'bold', 'backgroundcolor', get(f, 'color')); inputN = uicontrol('units', 'pix', 'position', [450 330 100 25],... 'style', 'edit', 'fontsize', 12, 'fontweight', 'bold'); % keterangan hasil ket_hasil = uicontrol('units', 'pix', 'position', [400 280 100 30],... 'style', 'text', 'fontsize', 12, 'fontweight', 'bold', ... 'string', '0' , 'backgroundcolor', get(f, 'color')); % hitung button uicontrol('units', 'pix', 'position', [400 250 100 30],... 'style', 'pushbutton', 'fontsize', 12, 'fontweight', 'bold', ... 'string', 'HITUNG', 'Callback', @fungsi_hitung); % reset button uicontrol('units', 'pix', 'position', [400 210 100 30],... 'style', 'pushbutton', 'fontsize', 12, 'fontweight', 'bold', ... 'string', 'RESET', 'Callback', @reset_fungsi); function fungsi_hitung(varargin) N = get(inputN , 'string'); N = str2double(N); x = 0:.01:2*pi; yy = get(inputFungsi, 'string'); y = eval(yy, x); plot(x,y, 'parent', ax, 'linewidth', 3); hold on; miny = min(y); maxy = max(y); deltax = linspace( 0 , 2*pi ,10000); deltay = linspace( miny,maxy, 10000); a = 0; for i=1:N, m = randi(length(deltax),1); n = randi(length(deltay),1); x = deltax(m); y = deltay(n); if y >= 0 if y <= eval(yy, x) a = a + 1; plot(x,y, 'g*', 'parent', ax); hold on ; else plot(x,y, 'r*', 'parent', ax); hold on ; end else if y >= eval(yy, x) a = a + 1; plot(x,y, 'g*', 'parent', ax); hold on ; else plot(x,y, 'r*', 'parent', ax); hold on ; end end end axis tight; luas = (a/N) * ( (maxy- miny) * (2*pi - 0)); set(ket_hasil, 'string', num2str(luas)); end function reset_fungsi(varargin) cla reset; set(ket_hasil, 'string', '0'); end end
Subscribe to:
Posts (Atom)