Regula Falsi metode numerik C atau C++


Regula Falsi dalam metode numerik.
Code


Pengamatan Awal
a. Kurva fungsi dengan GNU Plot :f(x) = exp(-x) –x
image
b. Perkiraan batas bawah dan batas atas akar :
  • Batas atas = 1
  • Batas bawah = 0
A. Hasil Percobaan
1. Tabel hasil percobaan
image
Pengamatan terhadap parameter
Toleransi error (e) terhadap jumlah iterasi (N)
Toleransi Error (e) Jumlah Iterasi (N)
0.1 1
0.01 2
0.001 3
0.0001 4
Output
image
image
image
image
Pengubahan nilai awal batas bawah (a) dan batas atas (b) terhadap 20 iterasi (N)
Batas Bawah (a) Batas Atas (b) Nilai Error (F(x)=e)
0 1 0.000098
0.25 0.75 0.567182
0.5 0.75 0.567170
0.5 0.6 0.567148
Output Dari Tabel
image
image
image
image

 Keterangan
Bila semakin kecil nilai toleransi eror, maka jumlah iterasi yang didapatkan semakin banyak.
Jika nilai toleransisama yaitu 0.0001 dan nilai batas atas dan bawah yang membedekan maka semakin kecil selisih range batas atas dan bawah semakin kecil pula nilai error dan nilai akarnya mendekati sempurna.
Semakin kecil range yang di masukan semakin kecil nilai toleransinya dan akarnya semakin mendekati.
Kelebihan Metode Regula Falsi :
· Prosesnya lebih cepat daripada proses tabel dan proses proses biseksi.
· Membutuhkan iterasi yang sangat sedikit untuk mendapatkan toleransi error yang kecil.
· Hasil lebih akurat , efektif dan efisien daripada metode sebelumnya biseksi dan tabel.
Kelemahan Metode Regula Falsi :
· Membutuhkan suatu batas atas dan batas bawah agar proses ini dapat dijalankan.
· Proses ini membutuhkan iterasi yang banyak untuk memenuhi toleransi error jika selisih batas atas dan batas bawah besar.
· Terlalu banyak inputan .

METODE TABEL di Metode Numerik C atau C++


METODE TABEL

 LISTING PROGRAM
#include <stdio.h>
#include <math.h>
float b,a,n,h,e,x[100],y[100];
int i,j;
float f(float x)
{
return(exp(-x)-x);
}
void tabel()
{
puts("\tMetode Tabel");
puts("\t==================\n");
printf("\t Fungsi\t= F(x)=exp(-x)-x\n");
printf("Masukkan batas bawah\t= ");
scanf("%f",&b);
printf("Masukkan batas atas\t= ");
scanf("%f",&a);
printf("Banyak iterasi\t\t= ");
scanf("%f", &n);
printf("Toleransi Error\t\t= ");
scanf("%f", &e);
h = (a - b)/n;
printf("i\t\tx\t\t\tfx\n");
for(i=0;i<n+1;i++){
x[i]=b+(i*h);
y[i]=f(x[i]);
printf("%d\t\t%f\t\t%f\n",i,x[i],y[i]);
}
for(j=0;j<n-1;j++){
if((y[j]*y[j+1])<0){
printf("\nAkar diantara %f & %f\n",x[j],x[j+1]);
if(fabs(y[j])<fabs(y[j+1]))
{
printf("Akar lebih dekat ke %f\n", x[j]);
printf("Toleransi error = %f", y[j]);
}
else{
printf("Akar lebih dekat ke %f\n", x[j+1]);
printf("Toleransi error = %f", y[j+1]);
}}}}
main(){
tabel();}









































a. PENGAMATAN AWAL
Gambar kurva fungsi denan GNU Plot fugngsi = exp(-x)-x

image

a. Perkiraan batas bawah dan batas atas akar
  • Batas bawah = 0
  • Batas atas = 1.5
  • Iterasi = 10
HASIL PERCOBAAN
1. Tabel hasil x[i] dan F(x[i])
image
1. Pengamatan terhadap parameter
a. Toleransi error(e) terhadap jumlah iterasi(n)
Toleransi Error(e) Range Jumlah Iterasi(n)
0.1 0 – 2 26
0.01 0 – 2 141
0.001 0 – 2 170
0.0001 0 - 2 200

Percobaan 26 iterasi. Percobaan 40 iterasi
image image









b. Pengubahan nilai awal batas bawah (a) dan batas atas (b)terhadap 20 iterasi(n)
Batas Bawah(a) Batas Atas(b) Nilai error (F(x)=e)
0 1 0.051188
0.25 0.75 0.026950
0.5 0.75 0.012295
0.5 0.6 0.00475

Hasil percobaan diatas
image image
image image




Keterangan gambar diatas

Metode table adalah metode yang lumayan sederhana.
Besarnya jumlah iterasi berbanding terbalik dengan besarnya toleransi error yang didapat. Jadi semakin besar kita menginputkan jumlah iterasi maksimumnya, maka nilai toleransi errornya akan semakin kecil.
Besarnya batas atas dan batas bawah berbanding lurus dengan besarnya toleransi error. Jadi semakin besar selisih batas atas dan bawah, maka nilai toleransi errornya juga semakin besar.
Kelebihan metode table :
  • · Mudah membuat code programnya
  • · Algoritma Sederhana
  • · Mudah di pahami
Kekurangan metode table :
  • · Terlalu banyak data yang diproses jika membutuhkan toleransi error yang kecil
  • · Kurang efisien untuk pendekatan akarnya.
  • · Memerlukan grafik untuk mencari nilai batas atas dan batas bawah
  • · Semakin banyak iterasi yang melebihi batas akan membuat hasil tidak akurat lagi.
2














membuat program gauss naif dengan bahasa pemrograman C atau C++

Didalam metode numerik terdapat suatu metode untuk mengolah data matrik yang bertujuan untuk mencari persamaan linier dari matrik tersebut yang dinamakan dengan gauss naif. gauss naif merupakan salah satu eliminasi sistem linear yang ada sebelum gauss jordan yang disempurnakan. Disini saya tidak bahas detail tentang gauss naiff pada matematikanya namun lebih mengarah ke implementasi program yang menggunakan bahasa C atau C++.

berikut kodenya

dan selamat dicoba semoga dapat bermanfaat ilmunya . ammin
tak lupa komennya

Komputasi Numerik dengan Gauss Jordan

setelah di artikel sebelumnya sudah membahasa gauss seidel sekarang saya bahas gauss jordannya, seperti apa gauss jordan itu, dan bagaimana membuat program gauss jordan? tengan disini di ajari :D . baik sudah tahu fungsinya gauss jordan kan. Kalau sudah sekarang buat programmnya seperti ini

ikuti ya ?

sudah jadi tetapi kelemahan nya ini hanya untuk tipe data integer, nah tetapi bisa di modif ke tipe data float kok silakan modif sendiri ya, semoga bermanfaat artikel ini terima kasih.

Membuat Program Gauss Seidel menggunakan bahasa pemrograman C atau C++

kali ini saya membahas program dari gauss seidel sebenarnya konsepnya hampir sama dengan gauss jordan tapi di modif sedikit dari gauss jordan dan dinamakan metode numerik gauss seidel, biasanya metode ini digunakan untuk menghitung persamaan linier yang tidak bisa kita hitung secara matematik. makanya kita buat programnya. berikut programmnya


selesai seperti itu kode dari gauss seidel yang penting paham konsep dari gauss seidel dulu nanti pasti bisa membuatnya, semoga bermanfaat artikel singkat ini.

membuat program biseksi dengan bahasa c

tema kita kali ini tentang membuat program biseksi di metode numeik menggunakan bahasa c. berikut ini merupakan hasil praktikum di mata kuliah metode numerik, biasanya orang menyebutnya komputasi numerik.

berikut kode nya

nah seperti itu cara membuat program biseksi dengan metode numerik, mungkin masih bingung ?? :D bisa tinggalkan komen.

Membuat Program Metode Iterasi dengan Menggunakan Bahasa Pemrograman C atau C++

Didalam suatu komputasi numerik atau metode numerik sering dikenal dengan istilah mencari komputasi numerik dengan istilah iterasi, untuk apa iterasi numerik.. ?? :D

langsung saja ya ini hasil praktikum ane di mata kuliah metode numerik 

code

jika di run silakan liat di komputer kalian semua, cukup sekian tutorial dari saya :)

CARA MENGHITUNG DIFERENSIASI NUMERIK DENGAN METODE SELISIH TINGKAT TINGGI

Differensiasi tingkat tinggi
Differensiasi tingkat tinggi merupakan proses pendifferensialan secara terus-menerus, hingga tingkatan yang ditentukan. diferensiasi tingkat tinggi merupakan penyempurnaan dari metode metode sebekumnya seperti selisih maju, selisih tengahan. untuk tingakat pendekatan akurasinya sudah dibuktikan hasilnya lebih bagus dengan diferensiasi tingkat tinggi. Tingkat tinggi ada beberapa jenis misal ada tingkat 2 tingkat 3 dan seterusnya untuk rumusnya bisa googling. Saya hanya membahas dengan kode program bagaimana cara mengimplementasikan metode diferensiasi tingkat tinggi di program berikut kodenya :)



nah itu kodenya silakan di ikutkan dan dicoba di komputer anda semoga manfaat.

CARA MENGHITUNG DIFERENSIASI NUMERIK DENGAN METODE SELISIH TENGAHAN

Setelah membahas cara hitung diferensiasi numerik dengan metode selisih maju  . Sekarang kita belajar tentang metode lainnya lanjutan dari metode maju yaitu Metode Selisih Tengahan apa itu ?

„ Metode selisih tengahan merupakan metode pengambilan perubahan dari dua titik sekitar dari titik yang diukur. „

  1. Perhatikan selisih maju pada titik x-h
metode selisih maju
metode selisih maju

„     2. selisih maju pada titik x
 
   
selisih maju titik x
selisih maju titik x

„    3. Metode selisih tengahan merupakan rata-rata dari dua selisih maju :
rumus metode selisih tengahan
rumus metode selisih tengahan

nah untuk komputasi di komputer nya gunakan kode program berikut ini.

CARA MENGHITUNG DIFFERENSIASI NUMERIK DENGAN METODE SELISIH MAJU

Salah satu perhitungan kalkulus yang juga sering digunakan salah satunya adalah diferensiasi.  Differensial digunakan untuk keperluan perhitungan geometrik, yang berhubungan dengan perubahan nilai satuan waktu atau jarak.Secara kalkulus, didefinisikan sebagai perbandingan perubahan tinggi (selisih tinggi) dan perubahan jarak penentuan titik puncak kurva y = f(x) Ædy/dx = 0

Mengapa perlu Metode Numerik ?

  1. „Terkadang terdapat suatu fungsi yang sulit dihitung secara manual
  2. „Untuk mengotomatiskan, tanpa harus  menghitung manualnya
DIFFERENSIASI NUMERIK
„ Hubungan antara nilai fungsi dan perubahan  fungsi untuk setiap titiknya didefinisikan :

„ y = f(X) + f^1(x).h(x)
rumus diferensiasi numerik
rumus diferensiasi numerik


Diferensiasi dengan Metode Numerik 

  1. „Metode Selisih Maju
  2. „Metode Selisih Tengahan
  3. „Metode Selisih Mundur
nah setelah saya sedikit membahas tentang metode apa saja yang ada di diferensiasi sekarang kita belajar langsung komputasi numeriknya yang ada di komputer langsung coding mania :) hehehe.

1. kode program  Diferensiasi Selisih Maju



outputnya nanti hasilnya seperti ini dan coba angkanya untuk mengetahui benar tidak program kita angkanya gunakan dengan contoh output berikut ini .
diferensiasi dengan metode numerik selisih maju
output selisih maju

semoga manfaat untuk 2 metode lainnya akan saya sambung di postingan selanjutnya :D

metode numerik dengan interpolasi lagrange

berikut sintak code dari metode numerik dimana kita mencari interpolasi penaksiran menggunakan interpolasi lagrange untuk coba silakan.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX 1000

int pil, n;
int i, j;
double fx, x[MAX], y[MAX], p[MAX], xcari, ycari=1,penyebut=1,pembilang=1;

void data();
double feksak(double xcari);

void main()
{
char ulang;
puts("");
puts(" polinomial lagrange");
puts("============================================\n");
data();
while ( ulang != 'T' && ulang != 't')
{
printf("\nMasukan Titik x yang Dicari = ");
scanf("%lf", &xcari);
fflush(stdin);
ycari=0;
for(i=0;i<n;i++)
{
j=0;
while(j<n)
{
if(i==j)
j++;
else
{
penyebut=penyebut*(x[i]-x[j]);
pembilang=pembilang*(xcari-x[j]);
j++;
}
}
ycari=ycari+((y[i]/penyebut)*pembilang);
penyebut=1;
pembilang=1;
}

printf("\nDengan x= %g, didapatkan:\n", xcari);
printf("p%d(%g)\t= %g\n", n-1, xcari,ycari);
printf("f(%g)\t= %g\n", xcari, feksak(xcari));
printf("Error\t= %g\n", fabs(feksak(xcari)-ycari));

printf("Apakah Anda Ingin Mengulang Pencarian X ? [Y / y]=");
scanf("%c",&ulang);
}
puts("\n===================================================");

}

double feksak(double xcari)
{
return cos(xcari);
}

void data()
{
printf("Masukan Derajat Interpolasi = ");
scanf("%d", &n);
fflush(stdin);
n=n+1;
for(i=0;i<n;i++)
{
printf("Masukkan x ke-%d = ", i+1);
scanf("%lf", &x[i]);
y[i]=feksak(x[i]);
fflush(stdin);
}
puts("");
for(i=0;i<n;i++)
printf("(x[%d],y[%d])\t= (\t%1g,\t%g)\n",i+1,i+1, x[i], y[i]);
}

metode numerik dengan integrasi reimann,trapezoid,simpson,kuadratur 2 titik,simpson 3/8,dan kuadratur 3 titik

bab metode numerik hal ini akan saya jelaskan dengan integrasi reimann,trapezoid,kuadratur 2 titik,simpson 3/8 dan kuadratur 3 titik. metode numerik ini sangat penting untuk mencari suatu rumus matematika yang tidak dapat dicari secara exact. intinya pendekatan, berikut programnya saya menggunakan c dalam membuatnya.

 ========================================================================
//program metode numerik integrasi numerik DENGAN MENU//
#include"stdio.h"
#include<math.h>
#include<stdlib.h>

double n,a,b,h,x;

double f(double x){
    //return(-cos(x)+1);
    return(x*x);
}

double feksak(double x){
    return pow(x,3)/3;
}

double gu(double u){
    return ( ((b-a)/2) * f( ( ( (b-a)/2)*u) + ( (b+a)/2) ) );
}
void reiman(){
    double luas=0;
    int i=0;
    printf("masukan batas atas(b): ");
    scanf("%lf",&b);
    printf("masukan batas bawah(a): ");
    scanf("%lf",&a);
    printf("masukan jumlah pembagi : ");
    scanf("%lf",&n);
    h=(b-a)/n;
    x=a;
    puts("\n");
    printf(" %4s  |%7s   |%7s   |%7s  \n", "i", "x", "f(x)","feksak(x)");
    while(x<=b){
        printf(" %4d  |%7lf  |%7lf  |%7lf \n", i, x, f(x),feksak(x));
        luas=luas+(h*f(x));
        x=x+h;
        i++;
    }
    printf("\nLUAS TOTAL =%lf\n",luas);
    printf("f eksak = %g\n",feksak(b)-feksak(a));
    printf("error = %g\n",fabs(luas-feksak(b)-feksak(a)));
}

void trapezoid(){
    int i=0;
    double luas=0, eror, sigma=0, total=0.0,f_eksak;

    printf("masukan batas atas(b): ");
    scanf("%lf",&b);
    printf("masukan batas bawah(a): ");
    scanf("%lf",&a);
    printf("masukan jumlah pembagi : ");
    scanf("%lf",&n);

    h = (b-a) / n;
       printf(" %4s  |%8s   |%8s   |%8s  \n\n", "i", "x", "f(x)","feksak(x)");
    x=a;
    for(x=a;x<b;x+=h)
    {
        luas=h/2*(f(x)+f(x+h));
        printf(" %4d  |%8lf  |%8lf  |%8lf \n", i, x, f(x),feksak(x));
        total=total+luas;
        i++;
    }
    puts("\n");
    f_eksak = feksak(b) - feksak(a);
    //luas = ( (h/2) * ( f(a) + (2*sigma) + f(b) ) );
    eror = fabs( fabs(luas) - fabs(f_eksak) );
   
    printf("Luas total = %7.5lf\n", total);
    printf("f_eksak = %7.5lf\n", f_eksak);
    printf("Error = %g\n", eror);
}

void simpson(){
    int i=0;
    double luas=0, eror, sigma1=0,sigma2=0, total=0.0,f_eksak;
    printf("masukan batas atas(b): ");
    scanf("%lf",&b);
    printf("masukan batas bawah(a): ");
    scanf("%lf",&a);
    printf("masukan jumlah pembagi : ");
    scanf("%lf",&n);

    h = (b-a) / n;
       printf(" %4s  |%8s   |%8s   |%8s  \n\n", "i", "x", "f(x)","feksak(x)");
    x=a;//batas bawah
   
    while(x<=b){
        printf(" %4d  |%8lf  |%8lf  |%8lf \n", i, x, f(x),feksak(x));
       
        if(i%2==0){
            sigma2+=2*f(x);//untuk fungsi genap
        }
        else{
            sigma1+=4*f(x);//untuk fungsi ganjil
        }
        x=x+h;
        i++;
    }
    f_eksak=feksak(b)-feksak(a);
    luas=((h/3)*(f(a)+sigma2+sigma1+f(b)));//simpson per dua
    eror = fabs( fabs(luas) - fabs(f_eksak) );//untuk mencari nilai error
   
    printf("Luas total = %7.5lf\n", luas);
    printf("f eksak = %7.5lf\n", f_eksak);
    printf("Error = %g\n", eror);
}

void simpson3per8(){
    int i=0;
    double luas=0, eror, sigma1=0,sigma2=0, total=0.0,f_eksak;
    printf("masukan batas atas(b): ");
    scanf("%lf",&b);
    printf("masukan batas bawah(a): ");
    scanf("%lf",&a);
    printf("masukan jumlah pembagi : ");
    scanf("%lf",&n);

    h = (b-a) / n;
       printf(" %4s  |%8.4s   |%8.4s   |%8s  \n\n", "i", "x", "f(x)","feksak(x)");
    x=a;//batas bawah
   
    while(x<b){
        printf(" %4d  |%8.4lf  |%8.4lf  |%8lf \n", i, x, f(x),feksak(x));
       
        if(i%3==0){
            sigma2+=2*f(x);//untuk fungsi genap
        }
        else{
            sigma1+=3*f(x);//untuk fungsi ganjil
        }
        x=x+h;
        i++;
    }
    f_eksak=feksak(b)-feksak(a);
    luas=((3*h/8)*(f(a)+sigma2+sigma1+f(b)));//simpson per 3/8
    eror = fabs( fabs(luas) - fabs(f_eksak) );//untuk mencari nilai error
   
    printf("Luas total = %7.5lf\n", luas);
    printf("f eksak = %7.5lf\n", f_eksak);
    printf("Error = %g\n", eror);
}

void kuadratur2titik(){
    int i=0;
    double luas=0, eror, sigma1=0,sigma2=0, total=0.0,f_eksak;
    printf("masukan batas atas(b): ");
    scanf("%lf",&b);
    printf("masukan batas bawah(a): ");
    scanf("%lf",&a);
   
    puts("");
    f_eksak = feksak(b) - feksak(a);
    luas = gu((-(1/sqrt(3)))) + gu((1/sqrt(3))) ;//rumus luas kuadratur gauss 2 titik
    eror = fabs( fabs(luas) - fabs(f_eksak) );   
    printf("Luas total = %7.5lf\n", luas);
    printf("f eksak = %7.5lf\n", f_eksak);
    printf("Error = %lg\n", eror);
}

void kuadratur3(){
    int i=0;
    double luas=0, eror, sigma1=0,sigma2=0, total=0.0,f_eksak;
    printf("masukan batas atas(b): ");
    scanf("%lf",&b);
    printf("masukan batas bawah(a): ");
    scanf("%lf",&a);
    puts("");
    f_eksak = feksak(b) - feksak(a);
    luas = (0.8888*gu(0))+(0.5555*gu(-(sqrt(0.6))))+(0.5555*gu(sqrt(0.6)));//rumus luas kuadratur gauss 2 titik
    //luas = ( (8 * gu(0)) / 9 ) + ( (5 * gu( (( -(sqrt(3/5)) )) ) ) / 9 ) + ( (5 * gu(( (sqrt(3/5)) ))) / 9 ) ;
    eror = fabs( fabs(luas) - fabs(f_eksak) );
    printf("Luas total = %7.5lf\n", luas);
    printf("f eksak = %7.5lf\n", f_eksak);
    printf("Error = %lg\n", eror);
}

main(){
    char pil,jawab;
    puts("\t PRGRAM INTEGRASI NUMERIK");
    puts("\t   by achmad sayfudin\n");

    puts("->>MENU<<-\n");
    do{
    printf("1. metode reiman\n2. trapezoid\n3. simpson(1/3)\n4. simpson(3/8)\n5. kuadratur 2 titik\n6. kuadratur 3 titik\n7. keluar");
    printf("\n\nmasukan pilihan anda: ");
    fflush(stdin);
    pil=getchar();

        if(pil=='1'){
            reiman();
        }
        else if(pil=='2'){
            trapezoid();
        }
        else if(pil=='3'){
            simpson();
        }
        else if(pil=='4'){
            simpson3per8();
        }
        else if(pil=='5'){
            kuadratur2titik();
        }
        else if(pil=='6'){
            kuadratur3();
        }
        else if(pil=='7'){
            exit(0);
        }
        fflush(stdin);
        printf("\nkembali ke menu (y/t) : ");
        jawab=getchar();

    }while(jawab=='y'||jawab=='Y');
}

=================================================================
semoga bermanfaat dan jika ada yang tanya silakan komen :).