Rabu, 11 April 2018

Mencari Akar Kuadrat Bilangan Menggunakan Matlab

Seminggu yang lalu, saya mendapatkan tugas Mata Kuliah Metode Numerik untuk membuat suatu program mencari akar kuadrat dari suatu bilangan, mirip-mirip bikin fungsi sqrt() sendiri laah. Biasa, sebagai anak mahasiswa, selagi tugas bisa dikerjakan secara SKS, maka hal itulah yang juga saya lakukan karena kesibukan di kantor serta di keluarga hehehe.

Setelah browsing dan googling, kebanyakan program yang dibuat untuk mencari akar kuadrat menggunakan fungsi sqrt() biasa, tidak melalui suatu algoritma. Ketemu juga sih, tetapi program tersebut untuk mencari akar dari fungsi kuadrat seperti fungsi f(x) = ax^2 + bx + c. Setelah pencarian mendalam, dapat juga suatu program dalam Bahasa Pemrograman C, setelah saya konversi ke Matlab yang terjadi adalah perulangan abadi 😠. Setelah saya pelajari lagi secara mendalam algoritmanya, akhirnya saya dapat menghentikan perulangan tersebut dengan hasil akar kuadrat yang mendekati sama dengan hasil dari kalkulator maupun fungsi sqrt() meskipun memiliki kelemahan, yaitu akurasinya jelek, ketika bilangan yang dimasukkan adalah <= 0.5.

Berikut ini source code-nya:

%-----------------------------------------
% Mencari akar kuadrat dari suatu bilangan
% By @nWaREZ
% Mata Kuliah: Metode Numerik
% S2 Teknik Elektro Polinema
%-----------------------------------------
 


clear all; clc;
x = input('Masukkan angka: ');
if (x > 0)
    akar = 1;
    banyakTebakan = 0;
    batasAtas = x;
    batasBawah = 0;

    while (batasBawah < batasAtas)
        akar = (akar + (batasAtas/akar))/2.0;
        banyakTebakan = banyakTebakan + 1;
        disp(['Tebakan ke-' num2str(banyakTebakan) ': ' num2str(akar)])
        batasBawah = batasBawah + (akar/2);
    end
    disp([char(10) 'Jumlah tebakan: ' num2str(banyakTebakan)])
    disp([num2str(akar) ' mendekati akar dari ' num2str(x)])
elseif (x == 0)
    disp([char(10) 'Akar dari ' num2str(x) ' adalah 0'])
else
    y = abs(x);
    disp([char(10) 'Akar dari ' num2str(x) ' adalah ' num2str(y) 'i'])
end

Tidak ada komentar:

Posting Komentar