% Contoh Program untuk mencari solusi persamaan differensial
% (yang ada di berkas dfungsi.m) dengan Metode Numerik Order Pertama
%
To = input('Masukkan waktu awal To, biasanya 0 saja = ')
Ta = input('Masukkan waktu akhir Ta =')
TOL = input('Masukkan nilai toleransi (dalam %) = ')
N = input('Masukkan maksimum iterasi =')
delta_t = input('Masukkan nilai interval awal delta_t = ')
for I = 1:3 % diberi kesempatan 3 kali mencoba
    if delta_t > (Ta-To)/2
        'delta_t terlalu besar'
        delta_t = input('Masukkan lagi nilai interval awal delta_t = ')
    elseif delta_t < (Ta-To)/N
        'delta_t terlalu kecil'
        delta_t = input('Masukkan lagi nilai interval awal delta_t = ')
    end
end
Xo = input('masukkan kondisi awal x(0) = ')
K = round((Ta-To)/delta_t);
x(1) = Xo;
t(1) = To;
xANA(1) = x_analitik(t(1)); % Solusi analitik
galat(1) = 100*abs((xANA(1)-x(1))/xANA(1)); % Error dalam %
for i = 1:N
    t(i+1)= t(i) + delta_t;
    % Metode Euler Order Pertama:
    x(i+1) = x(i) + (delta_t*dfungsi(t(i),x(i)));
    xANA(i+1) = x_analitik(t(i+1)); % Solusi analitik
    galat(i+1) = 100*abs((xANA(i+1)-x(i+1))/xANA(i+1)); % Error dalam %
    if galat(i+1) > TOL % Jika error masih lebih besar dari toleransi
        t(i+1) = t(i);
        delta_t = delta_t/10; % delta_t dibagi 10
    elseif delta_t <= (Ta-To)/N
        'Toleransi TOL terlalu ketat'
        DELTA_T = delta_t
        Iterasi_ke = i
        time = t(i+1)
        ERROR = galat(i+1)
        break
    elseif t(i+1) > Ta
        'Toleransi TOL terlalu longgar'
        DELTA_T = delta_t
        Iterasi_ke = i
        time = t(i+1)
        ERROR = galat(i+1)
        break
    end
end
subplot(211), plot(t,xANA,'go',t,x,'r*'), grid on, ylabel('xNUM dan xANA')
subplot(212), plot(t,galat,'ro'), grid on, ylabel('ERROR'), xlabel('t')