LAMPIRAN
LAMPIRAN 1 Metode Runge-Kutta orde 4 untuk persamaan tak linier con1p.m tt=t(j-1)+h2; xx=x0+h2*k1; clear k2=feval('diffeq2',tt,xx); closeall k3=feval('diffeq2',tt,x0+h2*k2); %Program untuk membawa model denyut k4=feval('diffeq2',t(j-1)+h,x0+h*k3); jantung dalam fungsi waktu (t) x=x0 +h6*(k1+k4) + h3*(k2 + k3); E=0.2; %parameter epsilon dalam model x0=x; %di update denyut jantung %simpan pada tiap tj T=1; %parameter T dalam model denyut xt(j,:)=x'; jantung end xd=0; %parameter xd dalam model dneyut jantung h=0.002; Xo=[-0.35 0.35]';tn=20; t=(0:h:tn)'; %Vektor kolom untuk t n=length(t); [t,X]=odeRK4s('diffeq2',tn,h,Xo,E,T,xd); figure(1) subplot(2,1,1) plot(t,X(:,1)) ylabel('x1') %x1 adalah panjang serat otot subplot(2,1,2) plot(t,X(:,2)) ylabel('x2') xlabel('t') %x2 adalah variabel aktifitas elektrokimia diffeq2.m function Xaksen = diffeq2(t,x) E=0.2; T=1; xd=0; Xaksen(1)=(-x(1)^3+T*x(1)-x(2))/E; %persamaan 1 pada model denyut jantung Xaksen(2)=x(1)-xd;%persamaan 2 pada model denyut jantung Xaksen = Xaksen(:); % Untuk menjamin bahwa Xaksen vektor kolom odeRK4s.m function [t,xt]=odeRK4s(diffeq2,tn,h,x0,E,T,xd) t=(0:h:tn)'; %Vektor kolom untuk t n=length(t); %banyaknya titik diskrit m=length(x0); h2=h/2;h3=h/3; h6=h/6; xt=zeros(n,m); xt(1,:)=x0'; E=0.25; T=1; xd=0; %mulai RK4 for j=2:n k1=feval('diffeq2',t(j-1),x0); xix
LAMPIRAN 2 Metode Runge-Kutta orde 4 untuk persamaan linier con1t.m xd^2+T*xd)));%persamaan yang sudah dilinierkan pada model denyut jantung %Program untuk membawa model denyut Xaksen(2)=x(1)-xd;%persamaan 2 pada jantung yang sudah dilinierkan dalam fungsi model denyut jantung waktu (t) Xaksen = Xaksen(:); % Untuk menjamin E=0.2; %parameter epsilon dalam model denyut jantung bahwa Xaksen vektor kolom T=1; %parameter T dalam model denyut odeRK4st.m jantung function xd=0; %parameter xd dalam model dneyut [t,xt]=odeRK4st(diffeq2t,tn,h,x0,E,T,xd) jantung t=(0:h:tn)'; %Vektor kolom untuk t h=0.002; n=length(t); %banyaknya titik diskrit Xo=[-0.35 0.35]';tn=20; m=length(x0); t=(0:h:tn)'; %Vektor kolom untuk t h2=h/2;h3=h/3; h6=h/6; n=length(t); xt=zeros(n,m); [t,X]=odeRK4st('diffeq2t',tn,h,Xo,E,T,xd); xt(1,:)=x0'; figure(1) E=0.25; subplot(2,1,1) T=1; plot(t,X(:,1)) xd=0; ylabel('x1') %mulai RK4 %x1 adalah panjang serat otot for j=2:n subplot(2,1,2) k1=feval('diffeq2t',t(j-1),x0); plot(t,X(:,2)) tt=t(j-1)+h2; ylabel('x2') xx=x0+h2*k1; xlabel('t') k2=feval('diffeq2t',tt,xx); %x2 adalah variabel aktifitas elektrokimia k3=feval('diffeq2t',tt,x0+h2*k2); diffeq2t.m k4=feval('diffeq2t',t(j-1)+h,x0+h*k3); x=x0 +h6*(k1+k4) + h3*(k2 + k3); function Xaksen = diffeq2t(t,x) x0=x; %di update E=0.2; %simpan pada tiap tj T=1; xt(j,:)=x'; xd=0; end Xaksen(1)=(((-3*x(1)^2+T)/E)*(x(1)xd))+(1/E)*(x(2)-((1/E)*(-
xx
LAMPIRAN 3 Mencari puncak maksimum dan minimum pada data denyut jantung %Program untuk mencari puncak maksimum dan puncak minimum pada data denyut jantung yang telah diukur clear closeall data = xlsread('ekgku.xlsx'); % data hasil ECG t = data(:,1); %t adalah waktu (detik) y = data(:,2); %y adalah potensial (mV) n=length(t); %panjang data t yb=(y-mean(y)); %mencari y baru delta=0.1*max(yb); [maxtab, mintab] = peakdet(yb, delta); %peakdet adalah program matlab yang dapat digunakan untuk mencari nilai-nilai puncak maksimum dan minimum yang terjadi pada data figure(2); plot(t,yb,t(mintab(:,1)), mintab(:,2), 'g*',t(maxtab(:,1)), maxtab(:,2), 'r*'); A=[maxtab(:,2)]'; A=[A [mintab(:,2)]']; t0=[t(maxtab(:,1))]'; t0=[t0 [t(mintab(:,1))]']; s=ones(size(A))*(t(end)-t(1))/25; %25 adalah dari lebar t dibagi lebah celah
xxi
LAMPIRAN 4 Mencari satu gelombang denyut jantung cariperioderatarata.m %program untuk mencari satu gelombang figure(2) pada denyut jantung ts=t(IPILIH); clear ys=yb(IPILIH); closeall plot(ts,ys); data = xlsread('ekgku.xlsx'); % data hasil t=ts; ECG yb=ys; t = data(:,1); %t adalah waktu (detik) delta=0.1*max(yb); y = data(:,2); %y adalah potensial (mV) [maxtab, mintab] = peakdet(yb, delta); n=length(t); %panjang data t figure(2); yb=(y-mean(y)); %mencari y baru plot(t,yb,t(mintab(:,1)), mintab(:,2), delta=0.4*max(yb); 'g*',t(maxtab(:,1)), maxtab(:,2), 'r*'); [maxtab, mintab] = peakdet(yb, delta); A=[maxtab(:,2)]'; %untuk mencari titik-titik puncak A=[A [mintab(:,2)]']; maksimum dan minimum pada data t0=[t(maxtab(:,1))]'; figure(1); t0=[t0 [t(mintab(:,1))]']; plot(t,yb,t(mintab(:,1)), mintab(:,2), s=ones(size(A))*(t(end)-t(1))/25; %25 adalah 'g*',t(maxtab(:,1)), maxtab(:,2), 'r*'); dari lebar t dibagi lebah celah par=zeros(1,3*length(A)); NPEAKS=length(maxtab(:,1)); %mencari j=1; jumlah titik pada puncak R for i=1:length(A) PERIODE=diff(t(maxtab(:,1))); %jarak % for i=1:2 antara puncak R ke puncak R berikutnya par(j)=A(i); (detik) par(j+1)=t0(i); PERIODERATA=mean(PERIODE) %ratapar(j+2)=s(i); rata jarak antara puncak R j=j+3; NPOINTS_IN_ONE_PERIODE=find(abs(tend PERIODERATA)==min(abs(tpar=jantungku(par,t,yb) PERIODERATA))); jantungku.m NPOINTS_IN_ONE_PERIODE=NPOINTS_ function par=jantungku(par0,tdata,ydata) IN_ONE_PERIODE(1) %mencari satu titik %untuk mnghitung parameter jantung dalam satu periode dengan R dijadikan opsi=optimset('TolX',1.0e-10); sebagai titik tengah figure(1); NPOINT_LEFT=floor(NPOINTS_IN_ONE_ set(1,'backingstore','off','doublebuffer','on'); PERIODE/2) %jumlah titik pada kiri puncak par=fminsearch(@ralat,par0,opsi,tdata,ydata R ); NPOINT_RIGHT=NPOINTS_IN_ONE_PER IODE-1-NPOINT_LEFT %jumlah titik pada return kanan puncak R function E=ralat(par, tdata, ydata) PILIH=input(['Dari ' num2str(NPEAKS-1) ' %untuk menghitung nilai eror pada fungsi sampel, pilih periode ke-' ]) %memilih Gauss periode gelombang denyut jantung mulai ymodel=gausku(tdata,par); dari gelombang ke2 dengan puncak R sebagai E=sqrt(sum((ymodeltitik tengah gelombang ydata).^2)/length(tdata)); ileft=maxtab(PILIH-1,1)-NPOINT_LEFT; plot(tdata,ydata,'.',tdata,ymodel); iright=maxtab(PILIHdrawnow; 1,1)+NPOINT_RIGHT; return IPILIH=[ileft:iright]'; xxii
function y=gausku(t,par) par1=reshape(par,3,length(par)/3); A=par1(1,:); t0=par1(2,:); s=par1(3,:); y=zeros(size(t)); for i=1:length(A) y=y+A(i)*exp(-(t-t0(i)).^2/2/s(i)^2); end return
xxiii