contoh analisa numerik dengan c++

Upload: candra-mecca-sufyana

Post on 09-Oct-2015

179 views

Category:

Documents


17 download

DESCRIPTION

Contoh Implementasi Analisa Numerik dengan menggunakan bahasa pemograman C++

TRANSCRIPT

  • INTEGRASI NUMERIK

    TEORI DASAR

    1. Metode Gauss Quadrature

    Tinjauan Gauss dalam perhitungan integral =b

    a

    dxxfI )( berdasarkan nilai F(x)

    dalam sub-interval yang tidak berjarak sama, melainkan simetris terhadap titik tengah

    interval. Jika =b

    a

    dxxfI )( sebagai fungsi integran, maka dengan mengubah variabeL bebas

    x dengan t dalam hubungan 2

    )()( tabbax

    ++= , batasan integrasi menjadi 1=t dan

    1=t . Nilai )(xf menjadi

    )(2

    )()()( tftabbafxf =

    ++= (1)

    Karena dtabdx2

    )( = , maka I menjadi

    =

    1

    1

    )(2

    )( dttfabI (2)

    Dengan menyatakan

    1

    1

    )( dttf sebagai

    ++++=1

    1332211 )(...)()()()( nn tfwtfwtfwtfwdttf (3)

    Dengan ntttt ,...,, 321 adalah titik dalam interval t=-1 ke t=1 dengan hubungan variabel x

    dengan t :

    11 2)()(

    tabba

    x++

    = , 22 2)()(

    tabba

    x++

    = , dan seterusnya, maka

    +++

    =

    b

    a

    nn tfwtfwtfwabdxxf )](...)()([2)()( 2211 (4)

  • Atau persamaan (4) diatas dapat ditulis sebagai

    =

    =

    b

    a

    n

    iii tfwabdxxf

    1)(

    2)()( (5)

    a) untuk orde 1 = 0.33332

    b) untuk orde 2 =0.495447

    c) untuk orde 3 = 7.819479

    2. Metode Monte Carlo

    Dengan menggunakan metode ini, kita bisa mengatur kehalusan data yang dihasilkan dengan mengubah-ubah jumlah segmentasi yang diinginkan

    n

    xfxf

    xfxf

    xfabdxxfIb

    a

    =

    =

    ==

    )()(

    )()(

    ,)()()(

    HASIL PRAKTIKUM

    Didapatkan hasil integrasi dari fungsi-fungsi berikut :

    Didapatkan hasil integrasi dari fungsi-fungsi berikut : Waktu Komputasi

    Metoda GK (t1) Waktu Komputasi Metoda MC (t2)

    t1 : t2

    dxx1

    0

    2 0.000000 0.016 dengan jumlah

    segmentasi 1 0:0.016

    dydxxy 1

    0

    2

    1

    2 0.000000 55.578 dengan

    jumlah segmentasi 1

    0:55

    Nilai Integral Metoda Gauss

    Waktu Komputasi Metoda MC (t2)

    dxx1

    0

    2 2.3333333 2.4012

    dydxxy 1

    0

    2

    1

    2 13.999999 13.881316

  • // Integrasi Numerik //Metode Gauss Quadrature //Integral lipat 1 untuk fungsi f(x)=x^2 terhadap dx #include #include #include #include #include /* Daftar Variable a,b : batas integral n : orde */ int main() { clock_t awal, akhir; float w[10], t[10], a, b, f; int i,n; printf("Fungsi yang akan diintegrasikan adalah f(x)=x*x\n"); printf("Masukkan batas bawah : "); scanf("%f",&a); printf("Masukkan batas atas : "); scanf("%f",&b); printf("Masukan orde n yang akan dipilih 2 atau 3 \n"); scanf("%i",&n); if (n == 2){ w[1]= 1.; w[2]= 1.; t[1]= -0.577350269; t[2]= 0.577350269; f=0.; awal = clock(); for(i=1;i
  • f=0.; awal = clock(); for(i=1;i
  • awal = clock(); for(i=1;i
  • //Modul 6 Integrasi Numerik Metode Monte Carlo //Integral lipat untuk fungsi f(x)=x*x terhadap dx #include #include #include #include #include int main () { clock_t awal, akhir; printf ("Diketahui Bentuk Fungsi: f(x)=x*x\n\n"); float a,b,Fo,F,dF; int i,n; printf ("Tentukan batas bawah :"); scanf ("%f",&a); printf ("Tentukan batas atas :"); scanf ("%f",&b); printf ("Tentukan jumlah segmentasi awal :"); scanf ("%i",&n); Fo = 0.; awal = clock(); do { F = 0; for (i=1;i1e-3); akhir = clock(); printf ("\n\nHasil Integral = %f", F); printf("\nWaktu : %f detik\n",(akhir-awal)*1./CLK_TCK); getch(); return 0; }

    //Modul 6 Integrasi Numerik Metode Monte Carlo //Integral lipat 2 untuk fungsi f(x)=x*y*y terhadap dxdy #include #include #include #include #include

  • int main () { clock_t awal, akhir; printf ("Diketahui Bentuk Fungsi: f(x,y)=x*y*y\n\n"); double a,b,c,d,Fo,F,dF,x,y; int nx, ny, i, j; printf ("Tentukan batas bawah integrasi x :"); scanf ("%lf",&a); printf ("Tentukan Batas atas integrasi x :"); scanf ("%lf",&b); printf ("Tentukan jumlah segmentasi awal x:"); scanf ("%i",&nx); printf ("Tentukan batas bawah integrasi y :"); scanf ("%lf",&c); printf ("Tentukan batas atas integrasi y :"); scanf ("%lf",&d); printf ("Tentukan jumlah segmentasi awal y:"); scanf ("%i",&ny); Fo = 0.; awal = clock(); do { F = 0.; for (i=1;i
  • METODE DEKOMPOSISI MATRIKS LU

    Contoh aplikasi dari system persamaan linear yaitu sebagai berikut :

    Gambar 1. rangkaian dengan 8R dan 4E

    Dari hukum Kirchoff I dan II diperoleh :

    Loop I :

    ]2....[]1...[

    00

    321

    1443311

    1443311

    iiiERiRiRiERiRiRi

    iRE

    +=

    =++

    =++

    =+

    Loop II :

    ]4...[)3...(

    00

    652

    2335522

    2335522

    iiiERiRiRiERiRiRi

    iRE

    +=

    =+

    =+

    =+

  • Loop III :

    ]6...[)5...(

    00

    741

    3778844

    3778844

    iiiERiRiRiERiRiRi

    iRE

    +=

    =++

    =++

    =+

    Loop IV :

    )8...()7...(

    00

    867

    4668855

    4668855

    iiiERiRiRi

    ERiRiRiiRE

    +=

    =+

    =++

    =+

    Dari 8 persamaan tersebut, kita dapatkan 4 persamaan linear dengan 8 variabel. Untuk dapat

    membentuk sebuah matrik bujur sangkar, maka kita harus mereduksi 4 persamaan dengan 8

    variabel tersebut menjadi 4 persamaan linear dengan 4 variabel. Sehingga persamaan-

    persamaan diatas menjadi :

    Loop I : 1443311 ERiRiRi =++ (9)

    Loop II : 2445322 2 ERiRiRi =+ (10)

    Loop III : 37448322871 )()( ERRiRiRiRRi =++ (11) Loop IV : 4654865386211 )()()( ERRiRRRiRRiRi =+++++++ (12) Persamaan-persamaan tersebut dapat dibuat matrik sebagai berikut :

    =

    ++++

    ++

    4

    3

    2

    1

    4

    3

    2

    1

    65865861

    748287

    452

    431

    )()()()()(

    200

    EEEE

    iiii

    RRRRRRRRRRRRRR

    RRRRRR

    Dan matriks tersebut dapat diselesaikan menggunakan metode dekomposisi LU dengan

    rumusan sebagai berikut :

    ELYYUI

    LURERI

    =

    =

    =

    =

    (13)

    Untuk menghitung besarnya masing-masing arus, digunakan program devC++ yaitu :

  • //Sistem Persamaan Linear //Rangkaian dengan 8 buah sumber tegangan (baterai) dan 4 buah tegangan #include #include #include #include int main() { float R[8], E[4], A[4][4], U[4][4], L[4][4], I[8], Y[4], D, X, F, G; int i, j, k; FILE *coba; if((coba = fopen("candra.txt", "w")) == NULL){ printf("File tidak dapat dibuka\n"); } printf ("C! \n"); for (i=1;i
  • { F = F + L[i][k]*U[k][j]; } U[i][j] = A[i][j] - F; } for (i=j+1;i
  • printf("I=%f",I[4]); for (i=3;i>=1;i--) { X=0.; for (j=i+1;j
  • } printf ("\n"); fprintf (coba,"\n"); } printf ("\nMaka Matriks U: \n"); fprintf (coba,"\nMaka Matriks U: \n"); for (i=1;i
  • PERSOALAN NILAI EIGEN

    Pada pengerjaan ini saya menggunakan nilai dari A adalah 2 sehingga vektornya menjadi:

    =

    /4/3/2/1

    /4/3/2/1

    2/00002/002/00002/

    E

    AAAAA

    A

    =

    /4/3/2/1

    /4/3/2/1

    1000012002100001

    E

    Secara analitik kita mendapatkan nilai eigen dari persamaan di atas adalah dengan cara

    menghitung determinan matriks berikut:

    0

    1000012002100001

    =

    EE

    EE

    Determinan dari matriks ini akan didapat:

    3211

    0)3()1()3()1(

    3

    3

    =

    =

    =+

    +=

    EEsehingga

    EE

    EEDet

    Metode Shifted-Inverse Power Method ini hanya bisa menghitung nilai eigen yang berbeda. Jika nilai eigen ada yang sama maka kita harus menggunakan cara yang lain.

    Secara analitik maka kita akan dapatkan nilai vektor eigen adalah

    Untuk nilai eigen 1:

    Vektor eigen =

    222221212121

    )1()1()1()1(||1||1||1||11

    +++

    >>+>>++>+>+>+>+=

    zzzzzzzzX

  • Untuk nilai eigen 3:

    Vektor eigen =

    222121

    )1()1(||1||11

    +

    >>+>+>=

    zzzzX

    Dengan menggunakan program dan nilai tebakan X mula-mula adalah [1 1 1 1]. Kita dapat memperoleh nilai eigen yang cocok dengan teori asalah kita menebak nilai alfa yang cukup dekat dengan nilai eigen tersebut (jangan tebak sama dengan nilai eigennya, hal ini akan membuat perhitungan error). Misalkan kita tebak alfa= 1.1 maka kita akan dapatkan nilai eigen 1 sedangkan kita tebak alfa =-3.1 maka kita akan dapatkan nilai eigen -3.

    Vektor eigen yang didapat dari perhitungan program adalah sama dengan teori yaitu Untuk nilai eigen 1

    222221212121

    )1()1()1()1(||1||1||1||11

    +++

    >>+>>++>+>+>+>+=

    zzzzzzzzX

    Untuk nilai eigen -3

    222121

    )1()1(||1||11

    +

    >>+>+>=

    zzzzX

    Sebenarnya perhitungan dari computer tidaklah memberikan nilai yang selalu tepat 1. terkadang nilainya adalah 0.99999, namun kita pahami bahwa dalam numeric kita melakukan pendekatan, jadi tidak eksak lagi 100%.

    Dari semua hal ini dapat disimpulakan bahwa perhitungan nilai dan vektor eigen yang dilakukan dengan computer adalah benar karena cocok dengan hasil teori.

    #include #include #include #include

    int main()

  • { int i,j,k,l; float A[5][5],X0[5],Y0[5],X1[5],Y1[5],alfa,B[5][5],L[5][5],U[5][5],Y[5],C1,C0,delta,lamda;

    for(i=1;i

  • U[i][j]= B[i][j];

    for(k=1;k

  • for(j=4;j>=(i+1);j--){

    Y0[i]=Y0[i]-U[i][j]*Y0[j]; } Y0[i]=Y0[i]/U[i][i]; }

    C1=Y0[1]; for(i=2;i

  • Persamaan Differensial Biasa : Shooting Method

    DATA

    Shooting Method merupakan metode numerik untuk menerapkan syarat betas pada

    solusi persamaan differensial biasa.

    Diberikan contoh soal sebagai berikut : Benda bermassa 1 kg diikatkan pada pegas tak bermassa secara horizontal dengan

    konstanta pegas 50 N/m, pegas tersebut diikatkan pada sebuah dinding kemudian system benda pegas disimpangkan sejauh 10 cm, jika tidak ada gesekan antara benda dengan lantai tentukan berapa sajakah kelajuan awal yang mungkin diberikan agar pada saat 10 detik dari simpangan awal tersebut benda berada pada titik kesetimbangan.

    Metode ini memilih harga v1 awal dan v2 awal. Kemudian solusi y1 dan y2 dicari dari persamaan euler. Sehingga secara analitik dapat dianalisis sebagai berikut :

    y = f (x,y,y) dimana y (x1) = y1 dan y(x2) = y2 Persamaan gerak diturunkan 2 kali terhadap waktu t, yaitu :

    vdtdyyvtf ==),,(1 Dan y

    m

    kdt

    ydyvtf == 22

    2 ),,(

    Dengan k = 50 N/m dan m = 1 kg, maka didapatkan persamaan Euler (untuk orde pertama) yaitu,

    tyvtyvtfvv iiii =+=+ 50),,(21 dan,

    tvytyvtfyy iiii +=+=+ ),,(11

  • Simpangan awal pada saat t = 0, adalah y = 0.1 dan saat t = 10, y = 0. kecepatan awal dalam persoalan kali ini ditebak jadi setelah mendapatkan nilainya digunakanlah persamaaan dibawah untuk mengetahui kecepatan awalnya :

    112

    1210 yyy

    vvvv

    =

    Setelah didapatkan kecepatan awalnya, dengan metode euler dihitung simpangannya untuk setiap dx tertentu dengan progam yang telah dibuat. Dari penghitungan komputasi yang dilakukan didapatkan bahwa kecepatan awal yang diperlukan agar pada saat t = 10 simpangan y = 0, yaitu v = Nilai v = 0.052989959717, v = 0.0201873, v = 0.013320922, v = 0.01264953 m/s. Nilai kecepatan awal ini selalu didapatkan untuk setiap tebakan dua kecepatan yang berbeda tanda karena program

    dibuat seperti itu, dengan nilai dt yang berbeda-beda didapatkan nilai kecepatan yang berbeda pula dan terdapat 4 nilai kecepatan yang memenuhi syarat , Dari penghitungan

    secara komputasi menggunakan didapatkan plot grafik simpangan terhadap waktu sebagai berikut:

    Pada percobaan kali ini, diberi suatu permasalahan nilai eigen yang digunakan untuk menyelesaikan persamaan diferensial. Dari grafik ini dapat dilihat bahwa pada saat waktu adalah 10 detik maka simpangannya adalah 0. Ini sesuai dengan syarat batas yang diberikan. Satu hal yang juga membuktikan bahwa metode komputasi yang digunakan

    Grafik t terhadap y dengan v = 0.0529899

    -0.15

    -0.1

    -0.05

    0

    0.05

    0.1

    0.15

    0 2 4 6 8 10 12

    waktu (s)

    Sim

    pan

    gan

    Pe

    gas

    (m)

  • benar adalah dari hasilnya yaitu grafik simpanganya sinusoidal. Hasil ini sesuai dengan teori bahwa persamaan untuk benda adalah persamaan osilasi. // Shooting methode #include #include #include #include double f(double v) { double y,t,dt,k ; //masukan variable yang diketahui //dengan simpangan pegas = 10cm = 0.1 m y = 0.1; t = 0; dt = 0.00001; k = 50; do { v = v - k*y*dt; y = y + v*dt; t = t + dt; } while(t0) { printf ("Maaf anda coba lagi!\n"); goto coba; } do { y1 = f(v1);

  • y2 = f(v2); printf ("y1=%lf\tv1=%lf\ty2=%lf\tv2=%lf\n",y1,v1,y2,v2); if(fabs(y2)>fabs(y1)) { v2 = (v1+v2)/2; } else { v1 = (v1+v2)/2; } } while(fabs(y2)>1e-6&&fabs(y1)>1e-6); printf ("Maka didapat hasil:\ny1=%5.12lf\t\tv1=%5.12lf\ny2=%5.12lf\t\tv2=%5.12lf",y1,v1,y2,v2); getch (); return 0; }

    INTERPOLASI DATA

    Pada percobaan kali ini mengenai Interpolasi yang memiliki pengertian yang lebih luas

    merupakan upaya mendefinisikan suatu fungsi dekatan suatu fungsi analitik yang tidak

    diketahui atau pengganti fungsi rumit yang tak mungkin diperoleh persamaan analitiknya

    dengan masalah umum interpolasi ini yaitu menjabarkan data-data fungsi dalam fungsi

    dekatan.

    Berikut ini adalah tabel data dari hasil eksperimen :

    NO Besaran Fisis X

    Besaran Fisis Y

    1 1 2.5 2 3 2.5 3 4 3.0 4 6 8.0 5 9 12.0 6 12 16.0 7 20 18.0 8 25 17.5 9 30 15.5 10 40 8.5 11 50 1.5

    Maka dari bantuan Microsoft excel didapatkan grafik sebagi berikut :

  • Grafik 1. Grafik data hasil analitik

    Setelah dibuat dari grafik tersebut, Langkah-langkah selanjutnya dalam melakukan

    interpolasi pada data adalah membagi data-data sesuai dengan karakteristiknya untuk didekati

    dengan interpolasi tertentu. Pada praktikum disini kita membagi data-data menjadi empat

    bagian yaitu untuk range x dari 1 sampai 3, dilakukan interpolasi linier. Untuk range x dari 4

    sampai 9, dilakukan interpolasi Lagrange dengan polinomial tingkat 2. Begitu juga dengan

    data x dari 10 sampai 30 menggunakan interpolasi Lagrange polinomial tingkat 2. Kemudian,

    data x dari 30 sampai 50 menggunakan interpolasi Linier. Hal tersebut untuk mendefinisikan

    fungsi dekatan.

    Maka setelah langkah tersebut dilakukan pemograman menggunakan dev C++ yaitu

    sebagai berikut :

    #include

    #include

    #include

    #include

    int main()

    {

    int i ;

    float x1[100], x2[100], y1[100], y2[100], c0, c1, c2, L0, L1, L2;

    Grafik Besaran Fisis X terhadap Y (Analitik)

    0.02.04.06.08.0

    10.012.014.016.018.020.0

    0 5 10 15 20 25 30 35 40 45 50 55Besaran Fisis X

    Be

    sara

    n Fi

    sis

    Y

  • FILE *hasil_candra;

    if((hasil_candra = fopen("hasil.txt", "w")) == NULL){

    printf("file tidak dapat dibuka\n");

    }

    //Dari hasil grafik kita menggunakan 4 range data yaitu sebagai berikut ini :

    //1.grafik linier dengan Range data (1 - 3)

    y1[1] = 2.5; x1[1] = 1.;

    y1[3] = 2.5; x1[3] = 3.;

    c0 = ((y1[1]*x1[3])-(y1[3]*x1[1]))/(x1[3]-x1[1]);

    c1 = (y1[3]-y1[1])/(x1[3]-x1[1]);

    for(i=1; i

  • //Grafik yang Linier dengan Range data (30 - 50)

    y1[30] = 15.5; x1[30] = 30;

    y1[50] = 1.5; x1[50] = 50;

    c0 = ((y1[30]*x1[50])-(y1[50]*x1[30]))/(x1[50]-x1[30]);

    c1 = (y1[50]-y1[30])/(x1[50]-x1[30]);

    for(i=30; i

  • 28 16.606060

    29 16.090910

    30 15.500000

    31 14.800000

    32 14.100000

    33 13.400001

    34 12.700001

    35 12.000000

    36 11.300000

    37 10.600000

    38 9.900001

    39 9.200001

    40 8.500000

    41 7.800001

    42 7.100000

    43 6.400001

    44 5.700001

    45 5.000000

    46 4.300001

    47 3.600001

    48 2.900001

    49 2.200001

    50 1.500001

    Maka kembali dengan bantuan Microsoft excel kita dapat membuat grafik yaitu :

    Grafik 2. Grafik data hasil pemograman

    Grafik Besaran Fisis X terhadap Y (Hasil Program)

    0.02.04.06.08.0

    10.012.014.016.018.020.0

    0 5 10 15 20 25 30 35 40 45 50 55Besaran Fisis X

    Be

    sa

    ran

    Fi

    sis

    Y

  • ANALISIS

    Dari grafik dapat dilihat bahwa grafik data diatas yang didapat dari hasil

    pemrograman mendekati atau hampir sama dengan hasil analitik. Dari praktikum ini dengan

    melakukan pendekatan interpolasi pada data-data diatas, maka kita dapat memperoleh nilai

    dari tiap x yang belum diketahui. Jadi kita dapat melakukan interpolasi pada data dengan

    menggunakan interpolasi linier, dan Interpolasi lagrange, Namun dalam pemograman,

    praktikan tidak menggunakan Interpolasi kuadratik disebabkan menghindari rumitnya

    program eliminasi gauss untuk mencari konstanta c0, c1, dan c2 secara berturut-turut,

    sehingga resolusi dari hasil pemograman mungkin tidak seakurat menggunakan Interpolasi

    kuadratik. Namun dalam hal ini praktikan mengetahui bahwasanya kita dapat menggunakan

    pendekatan dengan Interpolasi Linier dan Interpolasi Lagrange.

    PERSAMAAN DIFFERENSIAL BIASA

    DATA

    Metode Euler merupakan metode numerik yang paling sederhana untuk menyelesaikan

    persamaan differensial. Dengan persamaan rekursifnya :

    dxdyyxf

    xyxfyy iiii=

    ++=+

    ),(

    )(1..........................(1)

    Pada percobaan ini diberikan kasus sebagai berikut :

    Seorang penerjun payung memiliki massa efektif 80 kg, apabila gaya tahanan udara yang

    dialaminya sebanding dengan laju jatuhnya penerjun dengan koefisien gesekan udara b=0.1.

    Hitunglah berapa lama waktu yang diperlukanya untuk mencapai tanah jika ia melompat dari

    ketinggian 1000m.

  • PENGOLAHAN DATA

    Secara analitik :

    = maF

    010

    0

    0

    42

    2

    2

    2

    2

    2

    2

    2

    =+

    =+

    =+

    =

    gdtdy

    tdyd

    gdtdy

    m

    btdyd

    mgdtdyb

    tdyd

    m

    tdyd

    mdtdybmg

    ........................................................................................................(2)

    Dalam bentuk lain menjadi :

    010 4 =+ gvdtdv

    Untuk Menyelesaikan persoalan differensial diatas maka menggunakan metode Euler yang

    secara analitik sebagai berikut :

    ( )yxf ,1 : dtdyf y = (3) dan 2

    2

    dtydf v = (4) ,dan untuk turunan keduanya yaitu

    ( )yxf ,2 : 22

    dtydfff vy == dan

    =

    m

    bvmgm

    bff v ..(5)

    Maka berdasarkan persamaan 1 dan 2 didapatkan nilai ketinggian, waktu dan kecepatan :

    Misalkan kita menggunakan nilai awal dengan i=0

    Ketinggian

    2802.08.91000

    2)(

    2),,(),,(

    2

    1

    2

    1

    2

    1

    tvtvy

    t

    m

    bvmgtvyy

    tvyxfftvyxfyy

    o

    iiyiiiyii

    ++=

    ++=

    ++=+

  • Dengan i=0,1,2,3,

    Kecepatan

    2802.08.9

    802.0

    802.08.9

    2)()(

    2),,(),,(

    2

    1

    2

    1

    2

    1

    tvtvvv

    t

    m

    bvmgm

    bt

    m

    bvmgvv

    tvyxfftvyxfvv

    o

    o

    iiviiivii

    +=

    ++=

    ++=+

    Waktu

    ttt ii +=+1

    ttt += 01

    tt

    tt

    =+=

    1

    1 0

    dengan n

    ttt awalakhir

    =

    n adalah jumalah partisi

    Persamaan-persamaan diatas dapat kita masukkan kedalam sebuah program agar takhir dapat

    diketahui. Programnya adalah sebagai berikut:

    //Nama : Candra Mecca Sufyana

    //NIM : 10204039

    //Praktikum Fiskom Modul07 Persamaan diferensial biasa

    #include

    #include

    #include

    #include

    int main()

    {

    float m,b,g,v0,v,y0,y,dt,t;

  • FILE *hasil_039;

    // biar umum maka h di soal = y aja di pemograman = ketinggian ;makasih mosi-mosi.

    v0=0; y0=1000; g=9.8; m=80; t=0;

    hasil_039=fopen("hasil_039.csv","w");

    printf("Masukkan selang waktu yang anda inginkan!");

    scanf("%f", &dt);

    printf("Masukkan koefisien gesekan kinetik udara!");

    scanf("%f", &b);

    do{

    fprintf(hasil_039,"%f,%f,%f\n", t,v0,y0);

    // ngitungnya disini ah...

    v = v0-(g+b*v0/m)*dt;

    y = y0 + (v0+v)*dt/2;

    t = t + dt;

    v0 = v;

    y0 = y;

    }while(y0>=0);

    fprintf(hasil_039,"%f,%f,%f\n", t,v0,y0);

    fclose(hasil_039);

    }

    Dari pemograman tersebut maka didapatkan nilai kecepatan, ketinggian dan waktu yang

    dapat dilihat dari microsoft excel dengan dt = 0.01 dan b=0.1, tidak dicantumkan dalam

    laporan karena ga tau jadi ngeheng.

    Maka didapatkan grafik sebagai berikut :

  • Dari hasil grafik yang didapat dapat dianalisa bahwa hasil yang didapatkan dari pemograman sesuai dengan persoalan kasus gerak jatuh bebas yang diberikan dalam artian semakin lama waktu maka semakin rendah pula ketinggian, dan hubungan antara waktu dan kecepatan adalah linear walaupun seharusnya kecepatan bernilai positif, dalam hal ini kita tidak mengabsolutkan nilai kecepatan sehingga grafik kecepatan yang didapat negative.

    Grafik waktu terhadap ketinggian

    -200

    0

    200

    400

    600

    800

    1000

    1200

    0 2 4 6 8 10 12 14 16

    waktu t

    ketin

    ggia

    n y

    Grafik waktu terhadap kecepatan

    -160-140-120-100-80-60-40-20

    00 2 4 6 8 10 12 14 16

    waktu (s)

    kece

    pata

    n

  • AKAR PERSAMAAN

    Metode Newton Rapshon dan Iterasi Langkah langkah : Hal-hal yang diketahui : Benda 1 Benda 2

    Massa : 1 kg

    Mengalami gaya pegas dalam arah sumbu y dengan k =1 N/m

    Kecepatan awal : jiv 5.01 +=

    Massa : 1 kg

    Mengalami gaya konstan sebesar 16 N dalam arah x

    Kecepatan awal : jiv 242 +=

    I. MENCARI PERSAMAAN GERAK BENDA I DAN BENDA II

    Benda 1 :

    022

    2

    2

    2

    2

    2

    =+

    =

    =

    ydt

    yd

    dt

    ydmky

    dt

    ydmF y

    Solusi dari persamaan diferensial tersebut adalah : )sin( tAy =

    dan

    tx

    tvx x

    =

    = ,1

    Dari hukum kekekalan energi didapat :

    22

    2

    1

    2

    1kymv =

    Karena m=k=1, maka y=v1,x Sehingga persamaan gerak untuk benda 1 adalah

    jtits )sin(2

    11 +=v

    Benda 2 :

    1;016

    16

    2

    2

    2

    2

    2

    2

    ==

    =

    =

    mmdt

    xd

    dt

    xdm

    dt

    xdmFx

  • 162

    2

    =

    dt

    xd

    Maka solusi persamaan tersebut adalah

    ttx 48 2 += Dan

    ty 2=

    Sehingga persamaan gerak untuk benda 2 adalah

    jtitts 2)48( 22 ++=v

    Dengan mengeliminasi t didapatkan

    xy

    xy

    212

    1

    2

    1

    )sin(2

    1

    2

    1

    ++=

    =

    Karena benda tersebut bertemu disatu titik, berarti y1=y2, didapat

    xxxxf 2)sin(2)(sin)( 2 +=

    II. PROGRAM :

    //MELIHAT GRAFIK DARI BENDA 1 DAN 2 dan MENENTUKAN TITIK TEMU KEDUA BENDA #include #include #include #include //MENENTUKAN TITIK int main () { float x, c, x0, y, y1, y2, dx, a, b, n, e, eps; int i; FILE *f; printf(" grafik lintasan kedua benda!\n"); printf (" Masukkan nilai x awal = "); scanf ("%f",&a); printf (" Masukkan nilai x akhir = "); scanf ("%f",&b); printf ("Silakan masukkan banyaknya titik yang akan digambar!\n"); printf (" n = "); scanf ("%f",&n); f = fopen ("plot39.xls","w"); for (i=0; i

  • printf (" x = %f y1 = %f y2 = %f \n",x,y1,y2); fprintf (f,"%f %f %f \n",x,y1,y2); }; fclose (f); //MENENTUKAN TITIK PERTEMUAN KEDUA BENDA printf ("\nGrafik dapat dilihat di file : grafik39.xls"); printf ("\n\n\n"); printf ("Saatnya menebak pertemuan kedua benda\n"); printf ("Tebak titik pertemuan kedua benda pada sumbu x!\n"); printf (" x = "); scanf ("%f",&c); e = 0.000001; do { x0 = c; c = c - (0.5*pow(sin(c),2.)+sin(c)-c)/(sin(c)*cos(c)+cos(c)-1.); eps = fabs(c-x0); } while (eps>e); y = 0.5*sin(c); printf ("\nmaka titik temu kedua benda tersebut adalah: \n"); printf (" x = %f y = %f \n\n",c,y); getch (); return 0; }

    III. MENGGAMBAR GRAFIK KEDUA BENDA Untuk melihat r grafik kedua benda, dibutuhkan titik-titik yang melalui

    persamaan garis diatas. Dan untuk menentukan titik-titknya digunakan komputasi dan dalam hal ini digunakan metode Newton Raphson. Dari program tersebut didapat 100 titik untuk membuat grafik. Kemudian 100 titik tersebut membentuk grafik seperti ini.

    Gambar1. Grafik 2 benda

    Grafik 2 benda

    -0.6-0.4-0.2

    00.20.40.60.8

    11.2

    0 1 2 3 4

    x

    f(x) Series1

    Series2

  • IV. MENCARI TITIK TEMU KEDUA BENDA Didapatkan titik temu kedua benda menurut metode Newton Rapshon adalah x = 1.494129, y = 0498531 Sedangkan berdasarkan didapat : x = 1.48 dan y = 0.49