Tampilkan postingan dengan label fisika komputasi. Tampilkan semua postingan
Tampilkan postingan dengan label fisika komputasi. Tampilkan semua postingan

Rabu, 21 Maret 2012

Listing program Dev C++ UNTUK MENCARI AKAR PERSAMAAN f(x)=cos(x)-x


#include <iostream>
#include <math.h>

using namespace std;

//1. deklarasi persamaan yang akan di cari akar persamaannya
double f(double x)                      
{     return (cos(x)-x); }      
double fdiv(double x)
{    return (-sin(x)-1);  }          
//----------------------------------------------------------------

int max_loop = 10;       /* max_loop, adalah deklarasi maksimum iterasi
atau looping yang akan dilakukan saat penentuan akar persamaan yang dicari*/
double ralat = 1.0e-1;   /*ralat adalah deklarasi ralat atau ketelitian
                        perhitungan akar persamaan yang dicari*/

//2. langkah newton raphson
double newton(double x)
{
    int i;
    double term;
   
    for (int i = 1; i <= max_loop; i++ )
/*syarat perhitungan maksimum iterasi harus sesuai dengan deklarasi maksimum
iterasi (max_loop =10) maka iterasi akan berhenti pada looping kesepuluh*/
                {
        term = f(x)/fdiv(x);
                                x = x - term;      
        if (fabs(term)<ralat)
/*deklarasi syarat hasil perhitungan bahwa nilai term harus kurang dari ralat
maka perhitungan akan berhenti jika nilai term = ralat*/                     
        cout << "\niterasi akar = " << x << "\n";  
    }
       return x;
}
//----------------------------------------------------------------------------//
//pengaturan keluaran
int main()
{
    cout << "\n      Menentukan akar persamaan f(x) = cos x - x "<<endl;
    double x = 1.5;                       
    double root;
    cout << "\nnilai perkiraan akar persamaan: ";   
    cin >> x;      // masukkan nilai perkiraan akar persamaan 
    root = newton(x);                                  
    cout << "\n      akar persamaan f(x) = cos x - x adalah x = " << root<<endl;
    /*keluaran hasil perhitungan akar persamaan merupakan hasil perhitungan
    pada langkah newton raphson*/
                               
    for(;;);
    return 0;
}

Senin, 19 Maret 2012

METODE NEWTON RAPHSON

 Cara kerja:
1. Tentukan turunan pertama dari f(x), yaitu f’(x)
2. Perkirakan sebuah nilai xi = a sebagai tebakan awal (initial guess) akar dari suatu fungsi.
3. Hitung nilai f(xi =a) dan f’(xi=a).
4. Hitung xi+1 dari persamaan di atas.
5. Gunakan xi+1 sebagai tebakan baru, yaitu xi = xi+1
6. Ulangi langkah 2 dan 3 untuk mendapatkan xi+2.
          
Proses di atas disebut sebagai proses iterasi, yakni menebak sebuah nilai dan menggunakannya untuk mendapatkan nilai baru yang (mestinya) semakin dekat dengan nilai yang dicari.

Untuk contoh soal f(x) = cos x – x
    1. f’(x) = -sin x – 1
    2.  Tebakan untuk nilai awal:
        jika x = 0, cos x = 1, maka f(x) = 1 – 0 = 1,
        jika x = pi/2, cos x = 0, maka f(x) = -pi/2.
        Akar dari f(x) di sekitar x0 = pi/4
    3.  gunakan rumus untuk mendapat nilai x yang lebih baik,
        x1 = (pi/4) – ([cos (pi/4)- (pi/4)]/[-sin(pi/4)-1])
              = 0.739536134
    4. Gunakan nilai x1 untuk mendapatkan x2, dst.

RESOURCES: Kuliah Fisika Komputasi

Minggu, 18 Maret 2012

"butterfly" curve

x = cos(u) (ecos(u) - 2 cos(4 u) - sin(u / 12)5.0)


#include "stdlib.h"
#include "stdio.h"
#include "math.h"

#define N 10000

typedef struct {
   double x,y,z;
} XYZ;

int main(int argc,char **argv)
{
   int i;
   double u;
   XYZ p,plast;

   for (i=0;i<N;i++) {
      u = i * 24.0 * PI / N;
      p.x = cos(u) * (exp(cos(u)) - 2 * cos(4 * u) - pow(sin(u / 12),5.0));
      p.y = sin(u) * (exp(cos(u)) - 2 * cos(4 * u) - pow(sin(u / 12),5.0));
      p.z = fabs(p.y) / 2;
      colour = GetColour(u,0.0,24*PI,4);
      if (i > 0) {
         Do something with the line from plast to p
      }
      plast = p;
   }
}
 SOURCE: http://paulbourke.net/geometry/butterfly/

Kamis, 08 Maret 2012

PENGGUNAAN PROGRAM DEV C++ MENGGUNAKAN METODE BISECTION UNTUK MENENTKUANNILAI AKAR PERSAMAAN f(x)=x-cosx

Oleh:
Ayu Rahayu, S.Pd (NIM. 11708251060)
Ulfiana Prisdiansari, S.Pd (NIM. 11708251054)
Heppy Yandri Haning, S.Si (NIM. 11708251042)
Prodi Pendidikan Sains Program Pascasarjana Universitas Negeri Yogyakarta



1. PENDAHULUAN

Permasalahan fisika tidak lepas dari suatu perhitungan matematika. Perhitungan tersebut dapat diselesaikan menggunakan perhitungan manual maupun perhitungan dengan bantuan kalkulator ataupun komputer. Perhitungan menggunakan bantuan komputer berarti perhitungan dilakukan dengan bantuan program komputer. Salah satu program tersebut adalah Dev C++. Program ini dapat digunakan untuk membantu menyelesaikan berbagai macam permasalahan perhitungan. Salah satu permasalahan tersebut adlah penentuan akar-akar persamaan. Penentuan akar-akar persamaan dapat dilakukan menggunakan metode bisection pada Dev C++. Metode bisection adalah metode menemukan akar-akar persamaan matematis dengan membagi dua interval secara berulangkali dan kemudian memilih subinterval di mana akar harus berada untuk diproses lebih lanjut. Akar persamaan yang akan kita cari saat ini adalah akar persamaan f(x)=x-cosx.

2. METODOLOGI
Metode yang digunakan adalah metode bisection menggunakan program Dev C++. Program berikut merupakan program Dev C++ dengan metode bisection yang digunakan untuk menentuan akar-akar persamaan f(x)=x-cosx :


3. HASIL DAN PEMBAHASAN
Hasil
Akar persamaan kuadrat dari persamaan: f(x)=x-cosx adalah 0,739085.

Pembahasan
Akar persamaan dapat ditentukan dengan menggambar persamaan tersebut kemudian mencari titik dimana pada titik tersebut persamaan bernilai 0. Akar persamaan yang akan ditentukan adalah akar persamaan dari f(x)= x-cosx.
Akar persamaan tersebut dapat ditentukan dengan menggambar grafik persamaan f(x)=x dan f(x)=cos⁡x. Akar persamaan f(x)=x-cosx berada pada titik potong kedua grafik tersebut, yaitu seperti pada gambar grafik. Berdasarkan gambar grafik tersebut titik potong f(x)=x dan f(x)=cos⁡x berada di antara 0 sampai π/2 atau 0 sampai 1,5708. Nilai tersebut akan menjadi nilai taksiran awal untuk perhitungan akar persamaan menggunakan metode bisection pada Dev C++.


Langkah-langkah metode bisection adalah: (1)Menentukan interval taksiran wilayah dimana akar tersebut berada. Berdasarkan Grafik 1, akar tersebut berada diantara x = 0 sampai x = π/2. (2) Memperbaiki interval pada langkah 1 dengan membagi dua interval tersebut. Nilai tengah yang diperoleh adalah perkiraan pertama dari akar yang dicari. Berdasarkan interval pertama jika dibagi dua akan perkiraan pertama akar persamaan tersebut adalah π/4. (3) Jika ingin lebih akurat maka taksiran pertama dibuat menjadi interval baru yang memenuhi syarat:
Jika (a,b) adalah interval awal dengan a = batas kiri dan b = batas kanan, maka c = (a + b)/2 = nilai tengah. Nilai tersebut akan menyebabkan interval awal terbagi menjadi dua yakni (a,c) dan (c,b). Nilai c merupakan perkiraan terhadap akar yang dicari.
Jika diasumsikan akar yang sebenarnya berada pada interval (a,c), maka harus memenuhi syarat: f(a).f(c) ≤ 0.
Jika ketaksamaan di atas tidak terpenuhi, maka akar tersebut berada di interval (c,b). Pada permasalahan ini, a = 0, b = π/2 , dan c = π/4, sehingga interval baru adalah 0 sampai π/4 dan π/4 sampai π/2. Dari kedua interval tersebut yang memenuhi syarat persamaan 2 adalah interval pertama yaitu 0 sampai π/4.
Agar hasil akar lebih akurat maka langkah b dan c diulangi terus.
Metode bisection memiliki beberapa kelemahan, antara lain:(1)Harus mengasumsikan adanya suatu interval yang didalamnya terdapat akar yang dicari dari suatu fungsi. (2) Konvergensi lambat sehingga waktu komputasi lama. Hal ini diindikasikan dengan jumlah looping yang dilakukan hingga diperoleh hasil akhir sesuai dengan ralat yang diiinginkan, sehingga kecepatan konvergensi sebanding dengan besar kecinya ralat.

4. KESIMPULAN
Program Dev C++ dengan metode bisection dapat digunakan untuk menentukan nilai akar persamaan f(x)=x-cosx. Hasil akar persamaan f(x)=x-cosx adalah 0,739085.


DAFTAR PUSTAKA

Abdul Kadir. (1995). Pemrograman C++. Yogyakarta: Andi Ofset
M . Fachrurrozi. (2005). Konsep dan Aplikasi Pemrograman Menggunakan Borland C++ Builder 6. Diunduh dari repo.unair.ac.id/data/artikel/DasarCpp.pdf pada tanggal 6 Maret 2012
en.wikipedia.org/wiki/Bisection_method