Tugas Kuliah Komnum SPANL Pascal

Embed Size (px)

DESCRIPTION

Komputasi Numerik

Citation preview

  • Tugas Kuliah

    KOMPUTASI NUMERIK

    Dosen :

    Dr. rer. nat. Ir. Yuswan Muharam, MT

    Disusun Oleh :

    Kelompok 4

    1. Imas Mega Pratiwi (1306370524)

    2. Mega Puspitasari (1306370713)

    3. Ryan Andriant (1306409356)

    DEPARTEMEN TEKNIK KIMIA

    FAKULTAS TEKNIK

    UNIVERSITAS INDONESIA

    DEPOK, NOVEMBER 2014

  • Tugas

    Buatlah program Pascal untuk menyelesaikan SPANL di bawah ini dengan menggunakan

    Metode Newton.

    663.3

    12

    919,3

    828.12432

    22

    23

    zyxw

    xwxw

    yzxywx

    www

    Pembahasan

    SPANL di atas dapat diselesaikan dengan menggunakan metode Newton. Dalam

    menyelesaiakan SPANL di atas diperlukan fungsi turunan pertama. Dimana dalam hal ini kami

    menggunakan metode diferensial selisih maju dari ketiga metode diferensial yang ada untuk

    mendapatkan persamaan turunan pertamanya.

    h

    xfhxfxf

    )()()('

    Di dalam menyelesaikan SPANL juga dikenal matriks Jacobian, dimana matriks yang

    telah terbentuk kemudian dapat digunakan sebagai SPAL sehingga untuk mendapatkan solusi

    x1 hingga xn dapat digunakan metode eliminasi Gauss. Bila x yang dihasilkan belum

    memenuhi kriteria konvergensi yang diitetapkan, maka nilai x yang diperoleh ditambahkan

    pada nilai x taksiran awal untuk kemudian digunakan sebagai nilai x baru. Perhitungan

    dihentikan hingga konvergensi tercapai. Berikut listing program pascal yang digunakan untuk

    menyelesaikan program pascal di atas :

    program SPANL_Kelompok_4;

    v

    ar

    a,b,c,it,i : integer;

    y : real;

    x : array [1..4] of real;

    f : array [1..4] of real;

    nf : array[1..4,1..5] of real;

    xh : array [1..4] of real;

    fxh : array [1..4] of real;

    df : array [1..4] of real;

    d : array [1..4] of real;

    p : array[1..5] of real;

    dx : array [1..4] of real;

    begin

    writeln('input taksiran awal : ');

    for a:=1 to 4 do

  • readln(x[a]);

    write('input jumlah iterasi : ');

    readln(i);

    for it:=1 to i do

    begin

    f[1]:=x[1]*x[1]*x[1]+2*x[1]*x[1]+3*x[1] ;

    f[2]:=x[1]*x[2]+x[2]*x[3]+x[3]*x[4];

    f[3]:=x[1]*x[1]+2*x[1]*x[2]+x[2]*x[2];

    f[4]:=x[1]+x[2]+x[3]-x[4];

    nf[1,5]:=12.828-4-f[1];

    nf[2,5]:=-3.919-f[2];

    nf[3,5]:=1-f[3];

    nf[4,5]:=-3.663-f[4];

    for a:=1 to 4 do

    begin

    for b:=1 to 4 do

    begin

    {diferensial selisih maju}

    xh[b]:=x[b]+0.00001;

    fxh[1]:=xh[1]*xh[1]*xh[1] + 2*xh[1]*xh[1] + 3*xh[1];

    fxh[2]:=xh[1]*xh[2] + xh[2]*xh[3] + xh[3]*xh[4];

    fxh[3]:=xh[1]*xh[1] + 2*xh[1]*xh[2] + xh[2]*xh[2];

    fxh[4]:=xh[1] + xh[2] + xh[3] - xh[4];

    df[a]:=(fxh[a]-f[a])/0.00001;

    xh[b]:=x[b];

    nf[a,b]:=df[a];

    end;

    end;

    {eliminasi gauss}

    {a. substitusi dan eliminasi}

    for c:=1 to 3 do

    begin

    for a:=c to 4 do

    begin

    p[a]:= nf[a,c]/nf[c,c];

    p[c]:=0;

    for b:=1 to 5 do

    nf[a,b]:=nf[a,b]-p[a]*nf[c,b] ;

    end;

    end;

    {b. substitusi balik}

    y:=0;

    for a:=4 downto 1 do

    begin

    d[a]:=(nf[a,5]-y)/nf[a,a];

    y:=0;

    for b:=4 downto a do

    y:= y+nf[a,b]*d[b];

    end;

    for a:=1 to 4 do

    x[a]:=x[a]+d[a];

  • clrscr;

    for a:=1 to 4 do

    writeln('x',a,' = ',x[a]:9:4,' d',a,' = ',d[a]:5:2);

    end;

    end.

    Adapun bagian-bagian program dari penyelesaian SPANL di atas adalah sebagai berikut :

    program SPANL_Kelompok_4;

    uses wincrt;

    var

    a,b,c,it,i : integer;

    y : real;

    x : array [1..4] of real;

    f : array [1..4] of real;

    nf : array[1..4,1..5] of real;

    xh : array [1..4] of real;

    fxh : array [1..4] of real;

    df : array [1..4] of real;

    d : array [1..4] of real;

    p : array[1..5] of real;

    dx : array [1..4] of real;

    begin

    end.

    Bagian main program

    writeln('input taksiran awal : ');

    for a:=1 to 4 do

    readln(x[a]);

    write('input jumlah iterasi : ');

    readln(i);

    for it:=1 to i do

    begin

    f[1]:=x[1]*x[1]*x[1]+2*x[1]*x[1]+3*x[1] ;

    f[2]:=x[1]*x[2]+x[2]*x[3]+x[3]*x[4];

    f[3]:=x[1]*x[1]+2*x[1]*x[2]+x[2]*x[2];

    f[4]:=x[1]+x[2]+x[3]-x[4];

    nf[1,5]:=12.828-4-f[1];

    nf[2,5]:=-3.919-f[2];

    nf[3,5]:=1-f[3];

    nf[4,5]:=-3.663-f[4];

    Deklarasi Variabel

    Main Program

    Deklarasi

    Fungsi

  • Bagian metode diferensiasi selisih maju pada proses menentukan turunan pertama

    for a:=1 to 4 do

    begin

    for b:=1 to 4 do

    begin

    {diferensial selisih maju}

    xh[b]:=x[b]+0.00001;

    fxh[1]:=xh[1]*xh[1]*xh[1] + 2*xh[1]*xh[1] +

    3*xh[1];

    fxh[2]:=xh[1]*xh[2] + xh[2]*xh[3] + xh[3]*xh[4];

    fxh[3]:=xh[1]*xh[1] + 2*xh[1]*xh[2] + xh[2]*xh[2];

    fxh[4]:=xh[1] + xh[2] + xh[3] - xh[4];

    df[a]:=(fxh[a]-f[a])/0.00001;

    xh[b]:=x[b];

    nf[a,b]:=df[a];

    end;

    end;

    Bagian program eliminasi gauss

    {eliminasi gauss}

    {a. substitusi dan eliminasi}

    for c:=1 to 3 do

    begin

    for a:=c to 4 do

    begin

    p[a]:= nf[a,c]/nf[c,c];

    p[c]:=0;

    for b:=1 to 5 do

    nf[a,b]:=nf[a,b]-p[a]*nf[c,b] ;

    end;

    end;

    {b. substitusi balik}

    y:=0;

    for a:=4 downto 1 do

    begin

    d[a]:=(nf[a,5]-y)/nf[a,a];

    y:=0;

    for b:=4 downto a do

    y:= y+nf[a,b]*d[b];

    end;

    for a:=1 to 4 do

    x[a]:=x[a]+d[a];

  • Berikut hasil eksekusi program dengan taksiran awal

    w = x1 = 23,

    x = x2 = 34

    y = x3 = 56

    z = x4 = 67

    dengan jumlah iterasi 10.

    Jadi, dapat disimpulkan dengan menggunakan program SPANL di atas, diperoleh hasil :

    w = 26,5991

    x = -142,5809

    y = 11,1483

    z = 51,6612