Anda di halaman 1dari 33

UJIAN FISIKA KOMPUTASI

Program Dev C++


Dosen Pengampu: Wipsar Sunu Brams Dwandaru S.Si., M.Sc., Ph.D

Oleh:
FEBRINA RAHAYU WIDYA A.S
15726251013

PENDIDIKAN FISIKA
PROGRAM PASCASARJANA
UNIVERSITAS NEGERI YOGYAKARTA
2017

A. METODE BISECTION

Metode bisection adalah algoritma pencarian akar pada sebuah interval.


Interval tersebut membagi dua bagian, lalu memilih dari dua bagian ini dipilih
mana yang mengandung akar dan bagian yang tidak mengandung akar
dibuang. hal ini dilakukan berulang-ulang hingga diperoleh akar persamaan
yang mendekati akar persamaan. Metode ini akan berlaku ketika ingin
memecahkan persamaan f(x) = 0 dengan f merupakan fungsi kontinue. Metode
Bisection merupakan salah satu metode tertutup untuk menentukan solusi akar
dari persamaan non linier dengan prinsip utama sebagai berikut:
1. Menggunakan dua buah nilai awal untuk mengurung salah satu atau lebih
akar persamaan non linear.
2. Nilai akarnya diduga melalui nilai tengah antara dua nilai awal yang ada.
Kelemahan metode ini adalah :
1. Jika akar persamaan lebih dari satu, maka nilai tersebut hanya bisa
ditemukan satu per satu/tidak bisa sekaligus.
2. Tidak dapat mencari akar kompleks (imajiner).
3. Proses iterasi tergolong lambat.
1.

Program Untuk Mencari Solusi Persamaan


f =x 3+ 4 x +2
include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float r)
{
float d;
d=(r*r*r)-(4*r)+2;
return d;
}
main()
{
float r1,r2,rr,error,tol;
int i=1;
printf("\n\t\t\t\t METODE BISECTION\n");
printf("\t\t\t\t METODE BAGI DUA \n");
printf("\t\t\t\t ****************\n\n");

printf("\t\t\t\t r^3-4r+2=0\n\n");
printf("\tMasukkan batas atas persamaan(r1): ");scanf("%f",&r1);
printf("\tMasukkan batas bawah persamaan (rr): ");scanf("%f",&r2);
printf("\tMasukkan nilai toleransi: ");scanf("%f",&tol);
printf("\tTidak ada akar di antara kedua batas persamaan\n");
{
printf("\n \ti \tr1 \tr2 \trr \tf(r1) \tf(r2) \tf(rr) \terror \n");
do
{
rr=(r1+r2)/2;
error=fabs(r2-r1);
printf("\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t
%.3f\n",i,r1,r2,rr,f(r1),f(r2),f(rr),error);
if(f(r1)*f(r2)<tol)
r2=rr;
else
r1=rr;
i++;
}
while(error>tol);
printf("\n \tnilai rr terakhir : %.3f\n",rr);
printf("\tBanyaknya iterasi : %d \n",i-3);
printf("\n\t\t\t\t\t\t\tTERIMA KASIH");
printf("\n\t\t\t\t\t\t\t*************");
printf("\n\t\t\t\t\t\t\tfebrinarahayu");
}
getch();
return 0;
}
Outputnya :

2.

Program Untuk Mencari Solusi Persamaan

f =x 3+4 x 210
Coding
#include<stdio.h>
#include<conio.h>
#include<math.h>
float f(float x)
{
float d;
d=(x*x*x)+(4*x*x)-10;
return d;
}
main()
{
float d,x1,x2,xr,error,tol;
int i=1;
printf(\n\t\t\t\t METODE BISECTION\n);
printf(\t\t\t\t METODE BAGI DUA \n);
printf(\t\t\t\t ****************\n\n);
printf(\t\t\t\t x^3+4x^2-10=0\n\n);
printf(\tMasukkan batas atas persamaan(x1): );scanf(%f,&x1);
printf(\tMasukkan batas bawah persamaan (x2): );scanf(%f,&x2);
printf(\tMasukkan nilai toleransi: );scanf(%f,&tol);
printf(\tTidak ada akar di antara kedua batas persamaan\n);
{
printf(\n \ti \tx1 \tx2 \txr \tf(x1) \tf(x2) \tf(xr) \terror \n);
do
{
xr=(x1+x2)/2;
error=fabs(x2-x1);
printf(\t%d\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t%.3f\t
%.3f\n,i,x1,x2,xr,f(x1),f(x2),f(xr),error);
if(f(x1)*f(x2)<tol)
x2=xr;
else
x1=xr;

i++;
}
while(error>tol);
printf(\n \tnilai xr terakhir : %.3f\n,xr);
printf(\tBanyaknya iterasi : %d \n,i-1);
}
getch();
return 0;
}
Outputnya :

B. Metode Newton-Rhapson
Metode Newton-Rhapson adalah metode pencarian akar suatu fungsi f(x)
dengan pendekatak satu titik, dimana fungsi f (x) mempunyai turunan. metode ini
dianggap lebih mudah dari metode bisection karena metode ini menggunakan
pendekatan satu titik sebagai titik awal. semakin dekat titik awal yang kita pilih
dengan akar sebenarnya, maka semakin cepat konvergen ke nilai akarnya. Metode
Newton-Rhapson merupakan salah satu metode terbuka untuk menentukan soluai
akar dari persamaan non linear, dengan prinsip utama sebagai berikut:
1. Metode ini melakukan pendekatan terhadap kurva f(x) dengan garis
singgung (gradien) pada suatu titik niali awal.

2. Nilai taksiran selanjutnya adalah titik potong antara garis singgung (gradien)
kurva dengan sumbu x.
Metode Newton Rapshon adalah metode yang digunakan untuk mencari solusi
sebuh persamaan menggunakan metode numerik.

dengan
dari fungsi

adalah fungsi yang ingin kita cari solusinya,

adalah turunan

, dan n adalah bilangan asli mulai dari 1. Rumus di atas cukup

menggambarkan secara sederhana apa itu metode Newton-Raphson.


Contoh sederhana, kita ingin mencari solusi persamaan:
Fungsi di atas kita ubah menjadi fungsi:
Maka turunan dari fungsi di atas adalah

untuk n = 0, maka
akan menghasilkan nilai

dengan nilai awal

dan

untuk n = 1, maka
Demikian seterusnya cara di atas kita ulangi hingga mendapatkan nilai

yang

konstan. Biasanya dengan 5 kali perulangan, sudah bisa mendapatkan nilai


yang konstan. Nilai akhir

ini adalah solusi dari persamaan

kita tadi.

Program menghitung nilai x dari persamaan f(x) : x 2 + 3x 10 dengan


menggunakan metode Newton Rapshon.
Deksripsi :
Metode Newton Rapshon menggunakan formula atau algoritma untuk
mendapatkan nilai x maka :

x[n+1] = x[n] f(x)/f`(x)

Parameter awal x diinput dan nilai e = 0.0005

f(x) = fungsi persamaan x2 + 3x 10 = 0, maka x = 2 atau x = -5, jadi kita


menginputkan bilangan x awal apabila mendekati 2 maka hasil x akhir = 3,
dan apabila mendekati = -5 maka hasil x akhir = 5

f`(x) = fungsi turunan pertama f(x) 2x + 3

nilai e = 0.0005

kondisi dimana perulangan berhenti nilai mutlak (Absolute) |x[n+1] x[n]|


< e, dimana hasil x[n] = x.

a. Listing Program
#include <stdio.h>
#include <math.h>
#include <conio.h>
float Fungsi(float x);
float FungsiTurunan(float x);
main()
{
int n=0;
float x[100];
float e = 0.0005;
printf( Program Newton Rapshon \n);
printf( ====================== \n\n);
printf(Persamaan Fungsi f(x) : \n);

printf( x*x + 3x 10 \n\n);


printf(x(n+1) : \n);
printf( x(n)-(f(xn)/f'(xn)) \n\n);
printf(Nilai e = 0.0005\n\n);
printf(Masukkan nilai x Awal : ); scanf(%f,&x[0]);
printf(=====================================================
=============\n);
printf(! n ! xn ! f(xn) ! f'(xn) ! f(xn)/f'(xn) ! x(n+1) !\n);
printf(=====================================================
=============\n);
do
{
x[n+1] = x[n] (Fungsi(x[n])/FungsiTurunan(x[n]));
printf(! %d ! %2.4f ! %2.4f ! %2.4f ! %2.4f ! %2.4f !\n, n, x[n],Fungsi(x[n]),
FungsiTurunan(x[n]),Fungsi(x[n])/FungsiTurunan(x[n]),x[n+1]);
n++;
}while(abs(x[n-1]-x[n-2])>e);
printf(! %d ! %2.4f ! %2.4f ! %2.4f ! %2.4f ! %2.4f !\n, n, x[n],Fungsi(x[n]),
FungsiTurunan(x[n]),Fungsi(x[n])/FungsiTurunan(x[n]),x[n+1]);
printf(=====================================================
=============\n\n);
printf(Jadi, Hasil yang memenuhi dari persamaan tersebut x = %2.4f, x[n]);
getch();
}
float Fungsi(float x)
{
return pow(x,2)+(3*x)-10;
}
float FungsiTurunan(float x)
{

return 2*x+3;
}

Output Program

C. INTEGRASI NUMERIK
Integrasi numerik mengambil peranan penting dalam masalah sains dan
teknik. Hal ini menginat di dalam bidang sains sering ditemukan ungkapanungkapam integral matematis yang tidak mudah atau bahkan tidak dapat
diselesaikan secara analitis. Disamping itu, kadang-kadang fungsi yang
integralkan tidak berbentuk analitis melainkan berupa titik-titik data. Hal ini
sering muncul dalam banyak aplikasi teknik. Oleh sebab itu, kehadiran analisis
numerik menjadi penting manakala pendekatan analitis mengalami kebuntuan.
Dalam bab ini kita akan membahas beberapa teknik integrasi numerik yang
sangat umum digunakan untuk memperoleh pendekatan integral fungsi y(x) pada
batas interval [a,b] . Secara umum, integral fungsi y(x) pada interval tersebut
dapat dinyatakan

I= f ( x ) dx
x=a

Ungkapan diatas dapat diartikan sebagai integral dari fungsi

y (x )

terhadap peubah bebas x yang dievaluasi mulai dari x = a hingga x= b.


Pendekatan numerik terhadap ungkapan integral (3-1) dapat dinyatakan sebagai
berikut:
N

I ( x )= w 1 y ( x i )
i=1

dengan N menyatakan jumlah segmen,

y ( x1 ) = y ( a ) dan

y ( xn ) = y ( b )

Perhatikan bahwa pendekatan numerik terhadap bentuk integral merupakan


jumlahan dari deret suku-suku dengan titik-titik
hingga

x=b dan di setiap titik

x i terbentang dari

x i dievaluasi fungsi

y ( x ) . Faktor

x=a
x i ini

sering disebut sebagai titik simpul (node). Sedangkan, faktor pengali wi disebut
faktor bobot.
Code Program
#include <cstdlib>
#include <iostream>
#include <math.h>
#include<conio.h>
#include <stdlib.h>
#include <Windows.h>
#include<iomanip>
using namespace std;
void head(){
cout<<"\n =============================";
cout<<"\n QUIZ METODE NUMERIK";
cout<<"\n =============================";
cout<<"\n ";
cout<<"\n =============================\n";

}
void RegresiLinier(int n);
void RegresiNonLinier(int n);
void AnalisisRegresiPolinomial(int n);
void SistemPersLinier(int n);
int main()
{
char pil,plh;
int n;
system("cls");
head();
cout<<"\n Masukkan Jumlah Data yang akan diinputkan : ";cin>>n;
cout<<"\n [ 1 ] Metode Regresi Linier\n"
" [ 2 ] Metode Regresi Non Linier\n"
" [ 3 ] Analisis Regresi Polinomial\n"
" [ 4 ] Sistem Persamaan Linier\n"
" [ 0 ] Exit\n"
"\n Silahkan Pilih Metode Yang digunakan : ";cin>>pil;
switch(pil){
case '1':
system("cls");
RegresiLinier(n);
break;
case '2':system("cls");RegresiNonLinier(n);
break;
case '3':AnalisisRegresiPolinomial(n);
break;
case '4':SistemPersLinier(n);
break;
case '0':
exit(0);
break;
}
system("pause");
return 0;
}
void RegresiLinier(int q){
system("cls");
long jumx=0,jumy=0,jumxy=0,jumxx=0,xy=0,xx=0,X,Y;
int n=q;
long ratx,raty,a,b;

float x[100],y[100];
cout<<"\n -------------";
cout<<"\n Input Data";
cout<<"\n -------------";
for (int h=1;h<=n;h++){
cout<<"\nNilai x"<<h<<" = ";cin>>x[h];
}cout<<"\n\n -------------";
for(int k=1;k<=n;k++){
cout<<"\nNilai y"<<k<<" = ";cin>>y[k];
}
system("cls");
cout<<"\n
========================================================
===========";
cout<<"\n | Data ke | X |
Y |
XY |
X^2
|";
cout<<"\n
========================================================
===========\n";
for(int i=1;i<=n;i++){
jumx=jumx+x[i];
jumy=jumy+y[i];
xy=(x[i]*y[i]);
xx=(x[i]*x[i]);
jumxy=jumxy+xy;
jumxx=jumxx+xx;
cout<<" "<<setiosflags(ios::left)<<setw(13)<<i;
cout<<setiosflags(ios::left)<<setw(11)<<x[i];
cout<<setiosflags(ios::left)<<setw(16)<<y[i];
cout<<setiosflags(ios::left)<<setw(16)<<xy;
cout<<setiosflags(ios::left)<<setw(11)<<xx;
cout<<"\n\n";
}
cout<<" -------------------------------------------------------------------\n";
cout<<" "<<setiosflags(ios::left)<<setw(13)<<"JUMLAH";
cout<<setiosflags(ios::left)<<setw(11)<<jumx;
cout<<setiosflags(ios::left)<<setw(16)<<jumy;
cout<<setiosflags(ios::left)<<setw(16)<<jumxy;
cout<<setiosflags(ios::left)<<setw(11)<<jumxx;
cout<<"\n
========================================================
===========";
ratx=jumx/n;
raty=jumy/n;

b=((jumxy*n)-(jumx*jumy))/((jumxx*n)-(jumx*jumx));
a=raty-(b*ratx);
cout<<"\n Nilai Rata - Rata x = "<<ratx;
cout<<"\n Nilai Rata - Rata y = "<<raty;
cout<<"\n Nilai b = "<<b;
cout<<"\n Nilai a = "<<a;
cout<<"\n\n Jadi Persamaanya adalah Y = "<<a<<" + "<<b<<" X";
cout<<"\n\n Masukkan Nilai taksiran untuk X = ";cin>>X;
Y=a+(b*X);
cout<<"\n untuk Taksiran x="<<X<<", maka nilai Y = "<<Y;
getch();main();
}
void RegresiNonLinier(int q){
system("cls");
int n=q;
float x[100],y[100];
float qi=0,pi=0,qipi=0,qi2=0,jumpi=0,jumqi=0,jumqipi=0,jumqiqi=0;
float ratqi,ratpi,B,A,P,a,b;
/* ---------------Tranformasi Dengan log --------------------------*/
cout<<"\n -------------";
cout<<"\n Input Data";
cout<<"\n -------------";
for (int h=1;h<=n;h++){
cout<<"\nNilai x"<<h<<" = ";cin>>x[h];
}cout<<"\n\n -------------";
for(int k=1;k<=n;k++){
cout<<"\nNilai y"<<k<<" = ";cin>>y[k];
}
system("cls");
cout<<"\n =====================Tabel Penolong Dengan Log
=====================";
cout<<"\n
========================================================
===========\n";
cout<<" "<<setiosflags(ios::left)<<setw(9)<<" No."<<setw(7)<<" xi
"<<setw(7)<<" yi";
cout<<setiosflags(ios::left)<<setw(12)<<"qi=log xi"<<setw(12)<<"pi=log
yi"<<setw(12)<<"qi.pi";
cout<<setiosflags(ios::left)<<setw(12)<<"qi^2";
cout<<"\n
========================================================
===========\n";
for(int i=1;i<=n;i++){

qi=log10(x[i]);
pi=log10(y[i]);
qipi=(qi*pi);
qi2=(qi*qi);
jumpi=jumpi+pi;
jumqi=jumqi+qi;
jumqipi=jumqipi+qipi;
jumqiqi=jumqiqi+qi2;
cout<<" "<<setiosflags(ios::left)<<setw(9)<<i;
cout<<setiosflags(ios::left)<<setw(7)<<x[i];
cout<<setiosflags(ios::left)<<setw(7)<<y[i];
cout<<setiosflags(ios::left)<<setw(12)<<qi;
cout<<setiosflags(ios::left)<<setw(12)<<pi;
cout<<setiosflags(ios::left)<<setw(12)<<qipi;
cout<<setiosflags(ios::left)<<setw(12)<<qi2;
cout<<"\n\n";
}
cout<<" -------------------------------------------------------------------\n";
cout<<" "<<setiosflags(ios::left)<<setw(22)<<"JUMLAH";
cout<<setiosflags(ios::left)<<setw(12)<<jumqi;
cout<<setiosflags(ios::left)<<setw(12)<<jumpi;
cout<<setiosflags(ios::left)<<setw(12)<<jumqipi;
cout<<setiosflags(ios::left)<<setw(12)<<jumqiqi;
cout<<"\n
========================================================
===========";
ratqi=jumqi/n;
ratpi=jumpi/n;
B=((n*jumqipi)-(jumqi*jumpi))/((n*jumqiqi)-(jumqi*jumqi));
A=ratpi-(B*ratqi);
cout<<"\n\n Nilai Rata-rata qi : "<<ratqi;
cout<<"\n Nilai Rata-rata pi : "<<ratpi;
cout<<"\n Nilai B : "<<B;
cout<<"\n Nilai A : "<<A;
cout<<"\n Jadi Persamaan Transformasi Log-nya adalah : ";
cout<<A<<" + "<<B<<" q\n";
cout<<"\n Karena A log a ----> "<<A<<" = log a\n";
a=pow(10,A);
b=B;
cout<<"\n Maka Nilai a : "<<a;
cout<<"\n Maka Persamaan yang dicari adalah : \n";
cout<<"\n y = "<<a<<" X^"<<b<<endl;
/* ---------------Tranformasi Dengan ln --------------------------*/

float fqi=0,fpi=0,fqipi=0,fqi2=0,fjumpi=0,fjumqi=0,fjumqipi=0,fjumqiqi=0;
float fratqi,fratpi,fB,fA,fP,fa,fb;
cout<<"\n\n";
cout<<"\n =====================Tabel Penolong Dengan Ln
=====================";
cout<<"\n
========================================================
===========\n";
cout<<" "<<setiosflags(ios::left)<<setw(9)<<" No."<<setw(7)<<" xi
"<<setw(7)<<" yi";
cout<<setiosflags(ios::left)<<setw(12)<<"qi=xi"<<setw(12)<<"pi=ln
yi"<<setw(12)<<"qi.pi";
cout<<setiosflags(ios::left)<<setw(12)<<"qi^2";
cout<<"\n
========================================================
===========\n";
for(int i=1;i<=n;i++){
fqi=(x[i]);
fpi=logf(y[i]);
fqipi=(fqi*fpi);
fqi2=(fqi*fqi);
fjumpi=fjumpi+fpi;
fjumqi=fjumqi+fqi;
fjumqipi=fjumqipi+fqipi;
fjumqiqi=fjumqiqi+fqi2;
cout<<" "<<setiosflags(ios::left)<<setw(9)<<i;
cout<<setiosflags(ios::left)<<setw(7)<<x[i];
cout<<setiosflags(ios::left)<<setw(7)<<y[i];
cout<<setiosflags(ios::left)<<setw(12)<<fqi;
cout<<setiosflags(ios::left)<<setw(12)<<fpi;
cout<<setiosflags(ios::left)<<setw(12)<<fqipi;
cout<<setiosflags(ios::left)<<setw(12)<<fqi2;
cout<<"\n\n";
}
cout<<" -------------------------------------------------------------------\n";
cout<<" "<<setiosflags(ios::left)<<setw(22)<<"JUMLAH";
cout<<setiosflags(ios::left)<<setw(12)<<fjumqi;
cout<<setiosflags(ios::left)<<setw(12)<<fjumpi;
cout<<setiosflags(ios::left)<<setw(12)<<fjumqipi;
cout<<setiosflags(ios::left)<<setw(12)<<fjumqiqi;
cout<<"\n
========================================================
===========";

fratqi=fjumqi/n;
fratpi=fjumpi/n;
B=((n*fjumqipi)-(fjumqi*fjumpi))/((n*fjumqiqi)-(fjumqi*fjumqi));
fA=fratpi-(fB*fratqi);
cout<<"\n\n Nilai Rata-rata qi : "<<fratqi;
cout<<"\n Nilai Rata-rata pi : "<<fratpi;
cout<<"\n Nilai B : "<<fB;
cout<<"\n Nilai A : "<<fA;
cout<<"\n Jadi Persamaan Transformasi Log-nya adalah : ";
cout<<fA<<" + "<<fB<<" q\n";
cout<<"\n Karena A= ln a ----> "<<fA<<" = ln a\n";
fa=pow(10,A);
fb=fB;
cout<<"\n Maka Nilai a : "<<fa;
cout<<"\n Maka Persamaan yang dicari adalah : \n";
cout<<"\n y = "<<fa<<" X^"<<fb<<endl;
getch();main();
}
void AnalisisRegresiPolinomial(int q){
system("cls");
float
jumx=0,jumy=0,jumxy=0,jumxx=0,jumxxx=0,jumxxxx=0,jumx2y=0,xy=0,xx
=0,X,Y,xxx=0,xxxx=0,x2y=0;
float ratx,raty,a,b;float L[3][3],U[3][3];float A[3][3];float B[3][3];
float y0=0,y1=0,y2=0,a0=0,a1=0,a2=0;
int n=q;
float x[100],y[100];
cout<<"\n -------------";
cout<<"\n Input Data";
cout<<"\n -------------";
for (int h=1;h<=n;h++){
cout<<"\nNilai x"<<h<<" = ";cin>>x[h];
}cout<<"\n\n -------------";
for(int k=1;k<=n;k++){
cout<<"\nNilai y"<<k<<" = ";cin>>y[k];
}
system("cls");
cout<<"\n
========================================================
==========="
"===========================\n";
cout<<" "<<setiosflags(ios::left)<<setw(13)<<" Data ke-"<<setw(12)<<" x
"<<setw(12)<<" y";

cout<<setiosflags(ios::left)<<setw(12)<<"xi^2"<<setw(12)<<" xi^3
"<<setw(12)<<"xi^4";
cout<<setiosflags(ios::left)<<setw(12)<<"xiyi"<<setw(12)<<" xi^2yi ";
cout<<"\n
========================================================
==========="
"===========================\n";
for(int i=1;i<=n;i++){
jumx=jumx+x[i];
jumy=jumy+y[i];
xy=(x[i]*y[i]);
xx=(x[i]*x[i]);
xxx=(x[i]*x[i]*x[i]);
xxxx=(x[i]*x[i]*x[i]*x[i]);
x2y=(xx*y[i]);
jumxy=jumxy+xy;
jumxx=jumxx+xx;
jumxxx=jumxxx+xxx;
jumxxxx=jumxxxx+xxxx;
jumx2y=jumx2y+x2y;
cout<<" "<<setiosflags(ios::left)<<setw(13)<<i;
cout<<setiosflags(ios::left)<<setw(12)<<x[i];
cout<<setiosflags(ios::left)<<setw(12)<<y[i];
cout<<setiosflags(ios::left)<<setw(12)<<xx;
cout<<setiosflags(ios::left)<<setw(12)<<xxx;
cout<<setiosflags(ios::left)<<setw(12)<<xxxx;
cout<<setiosflags(ios::left)<<setw(12)<<xy;
cout<<setiosflags(ios::left)<<setw(12)<<x2y;
cout<<"\n\n";
}
cout<<" ---------------------------------------------------------------------"
"-------------------------\n";
cout<<" "<<setiosflags(ios::left)<<setw(13)<<"Jumlah";
cout<<setiosflags(ios::left)<<setw(12)<<jumx;
cout<<setiosflags(ios::left)<<setw(12)<<jumy;
cout<<setiosflags(ios::left)<<setw(12)<<jumxx;
cout<<setiosflags(ios::left)<<setw(12)<<jumxxx;
cout<<setiosflags(ios::left)<<setw(12)<<jumxxxx;
cout<<setiosflags(ios::left)<<setw(12)<<jumxy;
cout<<setiosflags(ios::left)<<setw(12)<<jumx2y;
cout<<"\n=============================================="
"===========================\n";

cout<<"\n\n Sistem Persamaan Sebagai berikut : \n";


cout<<"a0 + "<<jumx<<"a1 + "<<jumxx<<"a2 = "<<jumy<<endl;
cout<<jumx<<"a0 + "<<jumxx<<"a1 + "<<jumxxx<<"a2 = "<<jumxy<<endl;
cout<<jumxx<<"a0 + "<<jumxxxx<<"a1 + "<<jumxxxx<<"a2 =
"<<jumx2y<<endl;
cout<<"\n
========================================================
==========="
"===========================\n";
cout<<"\n ==========METODE LU============";
cout<<"\n
========================================================
==========="
"===========================\n";
//-------Metode LU----------//
A[1][1]=n;A[1][2]=jumx;A[1][3]=jumxx;
A[2][1]=jumx;A[2][2]=jumxx;A[2][3]=jumxxx;
A[3][1]=jumxx;A[3][2]=jumxxx;A[3][3]=jumxxxx;
// mencari nilai Lii=Aii untuk i=1,2,3
L[1][1]=A[1][1];
L[2][1]=A[2][1];
L[3][1]=A[3][1];
U[1][2]=A[1][2]/L[1][1];
U[1][3]=A[1][3]/L[1][1];
L[2][2]=A[2][2]-(L[2][1]*U[1][2]);
L[3][2]=A[3][2]-(L[3][1]*U[1][2]);
U[2][3]=(A[2][3]-(L[2][1]*U[1][3]))/L[2][2];
L[3][3]=A[3][3]-((L[3][1]*U[1][3])-(L[3][2]*U[2][3]));
L[1][2]=0;L[1][3]=0;L[2][3]=0;
U[1][1]=1;U[2][2]=1;U[3][3]=U[2][2];
U[2][1]=0;U[3][1]=0;U[3][2]=0;
B[1][1]=jumx;B[1][2]=0;B[1][3]=0;
B[2][1]=jumxy;B[2][2]=0;B[2][3]=0;
B[3][1]=jumx2y;B[3][2]=0;B[3][3]=B[1][2];

cout<<"\n\n Matrik A : \n";


for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<A[i][j];}
cout<<endl;}
cout<<"\n\n Matrik L : \n";
for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<L[i][j];}
cout<<endl;}
cout<<"\n\n Matrik U : \n";
for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<U[i][j];}
cout<<endl;}
cout<<"\n\n A=LU\n"
" Ax = b\n"
" LUx = b\n";
cout<<"\n\n Jadi Diadapat Persamaan.\n";
cout<<" "<<L[1][1]<<" y0 = "<<B[1][1];
cout<<"\n "<<L[2][1]<<" y0 + "<<L[2][2]<<" y1 = "<<B[2][1];
cout<<"\n "<<L[3][1]<<" y0 + "<<L[3][2]<<" y1 + "<<L[3][3]<<" = "<<B[3]
[1]<<endl;
y0=B[1][1]/L[1][1];
y1=(B[2][1]-(L[2][1]*y0))/L[2][2];
y2=(B[3][1]-((L[3][1]*y0)+(L[3][2]*y1)))/L[3][3];
cout<<"\n\n Jadi Diadapat Persamaan.\n";
cout<<"\n "<<U[1][1]<<" a0 + "<<U[1][2]<<" a1 + "<<U[1][3]<<" a2 =
"<<y0;
cout<<"\n "<<U[2][2]<<" a1 + "<<U[2][3]<<" a2 = "<<y1;
cout<<"\n "<<U[3][3]<<" a2 = "<<y2<<endl;
a2=y2;
a1=(y1-(U[2][3]*a2))/U[2][2];
a0=(y0-(U[1][2]*a1)+(U[1][3]*a2))/U[1][1];
cout<<"\n\n Semua nilai a0,a1,a2 ke persamaan garis kurva.\n";
cout<<"\n E(i)^2 = (y-a0 -a1xi -a2xi^2)\n";
cout<<"\n = Y - "<<a0<<"- "<<a1<<"xi - "<<a2<<"xi^2"<<endl;
cout<<"\n Y = "<<a0<<" + "<<a1<<"x + "<<a2<<"x^2"<<endl;

cout<<"\n
========================================================
==========="
"===========================\n";
cout<<"\n ==========ELIMINASI============";
cout<<"\n
========================================================
==========="
"===========================\n";
///metode Eliminasi--cout<<"\n\n\n";
cout<<n<<"a0 + "<<jumx<<"a1 + "<<jumxx<<"a2 = "<<jumy<<" -----------(1)\n";
cout<<jumx<<"a0 + "<<jumxx<<"a1 + "<<jumxxx<<"a2 = "<<jumxy<<"
------------(2)\n";
cout<<jumxx<<"a0 + "<<jumxxxx<<"a1 + "<<jumxxxx<<"a2 =
"<<jumx2y<<" ------------(3)\n";
cout<<"\n ============================";
cout<<"\n Eliminasi Pers. 1 dan 2\n";
cout<<n<<"a0 + "<<jumx<<"a1 + "<<jumxx<<"a2 = "<<jumy<<endl;
cout<<jumx<<"a0 + "<<jumxx<<"a1 + "<<jumxxx<<"a2 = "<<jumxy<<endl;
cout<<"\n ============================\n";
float fa[10],fb[10],fc[10],fd[10],ha[5],hb[5],hc[5],hd[5];
fa[1]=n;fb[1]=jumx;fc[1]=jumxx;fd[1]=jumy;
fa[2]=jumx;fb[2]=jumxx;fc[2]=jumxxx;fd[2]=jumxy;
fa[3]=jumxx;fb[3]=jumxxx;fc[3]=jumxxxx;fd[3]=jumxy;
///eliminasi pers.1 dan 2
ha[1]=fa[1]*fa[2];
hb[1]=fb[1]*fa[2];
hc[1]=fc[1]*fa[2];
hd[1]=fd[1]*fa[2];
ha[2]=fa[2]*fa[1];
hb[2]=fb[2]*fa[1];
hc[2]=fc[2]*fa[1];
hd[2]=fd[2]*fa[1];

ha[3]=ha[1]-ha[2];//pers.4--->udah nilai 0
hb[3]=hb[1]-hb[2];
hc[3]=hc[1]-hc[2];
hd[3]=hd[1]-hd[2];
cout<<"\n ============================";
cout<<"\n Persamaan 4\n";
cout<<" *"<<ha[3]<<" a0 + "<<hb[3]<<" a1 + "<<hc[3]<<" a2 =
"<<hd[3]<<endl;
cout<<"\n ============================\n";
//eliminasi pers.1.dan pers.3
cout<<"\n ============================";
cout<<"\n Eliminasi Pers. 1 dan 3\n";
cout<<fa[1]<<" a0 + "<<fb[1]<<" a1 + "<<fc[1]<<" a2 = "<<fd[1]<<endl;
cout<<fa[3]<<" a0 + "<<fb[3]<<" a1 + "<<fc[3]<<" a2 = "<<fd[3]<<endl;
cout<<"\n ============================\n";
ha[4]=fa[1]*fa[3];
hb[4]=fb[1]*fa[3];
hc[4]=fc[1]*fa[3];
hd[4]=fd[1]*fa[3];
ha[5]=fa[3]*fa[1];
hb[5]=fb[3]*fa[1];
hc[5]=fc[3]*fa[1];
hd[5]=fd[3]*fa[1];

fa[4]=ha[4]-ha[5];//pers.5---->udah nilai 0
fb[4]=hb[4]-hb[5];
fc[4]=hc[4]-hc[5];
fd[4]=hd[4]-hd[5];
cout<<"\n ============================";
cout<<"\n Persamaan 5\n";
cout<<" *"<<fa[4]<<" a0 + "<<fb[4]<<" a1 + "<<fc[4]<<" a2 =
"<<fd[4]<<endl;
cout<<"\n ============================\n";
//eliminasi pers. 4 dan 5
cout<<"\n ============================";
cout<<"\n Eliminasi Pers. 4 dan 5\n";
cout<<ha[3]<<" a0 + "<<hb[3]<<" a1 + "<<hc[3]<<" a2 = "<<hd[3]<<endl;
cout<<fa[4]<<" a0 + "<<fb[4]<<" a1 + "<<fc[4]<<" a2 = "<<fd[4]<<endl;
cout<<"\n ============================\n";
fb[5]=hb[3]*fb[4];
fc[5]=hc[3]*fb[4];

fd[5]=hd[5]*fb[4];
fb[6]=fb[4]*hb[3];
fc[6]=fc[4]*hb[3];
fd[6]=fd[4]*hb[3];
fb[7]=fb[5]-fb[6];
fc[7]=fc[5]-fc[6];
fd[7]=fd[5]-fd[6];
cout<<"\n ============================";
cout<<"\n Persamaan 6( HASIL)\n";
cout<<fa[7]<<" a0 + "<<fb[7]<<" a1 + "<<fc[7]<<" a2 = "<<fd[7]<<endl;
cout<<"\n ============================\n";
a2=fd[7]/fc[7];
cout<<"\n ----------> Nilai a2 = "<<a2<<endl;
cout<<"\n Masukkan nilai a2 ke pers.4\n";
a1 = (hd[3]-(hc[3]*a2))/hb[3];
cout<<"\n ----------> Nilai a1 = "<<a1<<endl;
cout<<"\n Masukkan Nilai a1 dan a2 ke pers. 1\n";
a0 = (fd[1]- ((fb[1]*a1) + (fc[1]*a2)))/fa[1];
cout<<"\n ----------> Nilai a0 = "<<a0<<endl;
cout<<"\n\n Kemudian masukkan a0,a1,a2 ke Persemaan grais kurva ,yaitu\n";
cout<<"\n E(i)^2 = (y - a0 - a1xi - a2xi^2)\n";
cout<<"\n\n Jadi Persamaan kurva orde duanya adalah \n";
cout<<" y = "<<a0<<" - "<<a1<<" xi - "<<a2<<" xi^2"<<endl;
getch();main();
}
void SistemPersLinier(int q){
system("cls");
int n=q;
float A[3][3],B[3][3],L[3][3],U[3][3];
float y1=0,y2=0,y3=0,x1=0,x2=0,x3=0;
A[1][1]=3;A[1][2]=-1;A[1][3]=2;
A[2][1]=1;A[2][2]=2;A[2][3]=3;
A[3][1]=2;A[3][2]=-2;A[3][3]=-1;
/* --- Metode Lu------*/
B[1][1]=12;B[1][2]=0;B[1][3]=0;

B[2][1]=11;B[2][2]=0;B[2][3]=0;
B[3][1]=2;B[3][2]=0;B[3][3]=B[1][2];
L[1][1]=A[1][1];
L[2][1]=A[2][1];
L[3][1]=A[3][1];
U[1][2]=A[1][2]/L[1][1];
U[1][3]=A[1][3]/L[1][1];
L[2][2]=A[2][2]-(L[2][1]*U[1][2]);
L[3][2]=A[3][2]-(L[3][1]*U[1][2]);
U[2][3]=(A[2][3]-(L[2][1]*U[1][3]))/L[2][2];
L[3][3]=A[3][3]-((L[3][1]*U[1][3])-(L[3][2]*U[2][3]));
L[1][2]=0;L[1][3]=0;L[2][3]=0;
U[1][1]=1;U[2][2]=1;U[3][3]=U[2][2];
U[2][1]=0;U[3][1]=0;U[3][2]=0;

cout<<"\n\n Matrik A : \n";


for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<A[i][j];}
cout<<endl;}
cout<<"\n\n Matrik B : \n";
for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<B[i][j];}
cout<<endl;}
cout<<"\n\n Matrik L : \n";
for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<L[i][j];}
cout<<endl;}
cout<<"\n\n Matrik U : \n";
for (int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
cout<<setiosflags(ios::right)<<setw(12)<<U[i][j];}

cout<<endl;}
cout<<"\n\n Sehingga Didapatkan :\n";
cout<<" "<<L[1][1]<<"y1 = "<<B[1][1];
cout<<"\n "<<L[2][1]<<"y1 + "<<L[2][2]<<" y2 = "<<B[2][1];
cout<<"\n "<<L[3][1]<<"y1 + "<<L[3][2]<<" y2 + "<<L[3][3]<<" y3 =
"<<B[3][1]<<endl;
y1=B[1][1]/L[1][1];
y2=(B[2][1]-(L[2][1]*y1))/L[2][2];
y3=(B[3][1]-(L[3][1]*y1+L[3][2]*y2))/L[3][3];
cout<<"\n hasil : "<<L[3][3];
x3=y3;
x2=(y2-(U[2][3]*x3));
x1=y1-((U[1][2]*x2)+(U[1][3]*x3));
cout<<"\n Jadi Didatakan Nilai-nilainya :\n";
cout<<"\n x1 : "<<x1;
cout<<"\n x2 : "<<x2;
cout<<"\n x3 : "<<x3;
cout<<"\n y1 : "<<y1;
cout<<"\n y2 : "<<y2;
cout<<"\n y3 : "<<y3<<endl;
/*-------Metode Gaus Jordan------*/
getch();main();
}

Hasil output

D. PERSAMAAN DIFFERENSIAL

Persamaan diferensial adalah suatu persamaan yang mengandung turunan


fungsi. Persamaan diferensial dapat dibedakan menjadi 2 macam, yang
tergantung pada jumlah variabel bebas. Apabila persamaan tersebut
mengandung hanya satu variabel bebas, persamaan disebut dangan persamaan
diferensial biasa, dan jika mengandung lebih dari satu variabel bebas disebut
persamaan diferensial parsial. Derajad (order) dari persamaan diferensial
ditentukan ol
eh derajad tertinggi dari turunannya.
1. Metode Eurel
Metode Euler adalah salah satu dari metode satu langkah yang paling
sederhana. Di banding dengan beberapa metode lainnya, metode ini paling
kurang teliti. Namun demikian metode ini perlu dipelajari mengingat
kesederhanaannya dan mudah pemahamannya sehingga memudahkan dalam
mempelajari metode lain yang lebih teliti. Metode euler atau disebut juga
metode orde pertama

karena persamaannya kita hanya mengambil sampai

suku orde pertama saja.


Misalnya diberikan PDB orde satu,
y , = dy/dx = f(x,y) dan nilai awal y(x0) = x0
Misalkan
yr = y(xr)
adalah hampiran nilai di xr yang dihitung dengan metode euler. Dalam hal ini
xr = x0 + rh,
r = 1, 2, 3,n
metode euler diturungkan dengan cara menguraikan y(x r+1) di sekitar xr ke dalam
deret taylor :
2
x r 1 xr
xr 1 xr

2!
1!
y(xr+1)=y(xr)+
y(xr)+
y(xr)+
bila persamaan di atas dipotng samapai suku orde tiga, peroleh

x
y(xr+1) = y(xr) +

r 1

xr

1!

xr 1 xr
y(xr) +

2!

y(t),

xr<t<xr+1

berdasarkan persamanan bentuk baku PDB orde orde satu maka

y(xr ) = f(xr, yr)


dan
xr+1 xr = h
maka persamaan 2 dapat ditulis menjadi
h2

2
y(xr+1)
y(xr)+hf(xr,yr)+ y(t)
dua suku pertama persamaan di atas yaitu :
y(xr+1) = y(xr) + hf(xr, yr) ;
atau dapat ditulis

r = 0, 1, 2,,n

yr+1 = yr + hfr
yang merupakan metode Euler.
Penyelesaian persamaan
dy/dx = x+y
Coding
#include<stdio.h>
float fun(float x,float y)
{
float f;
f=x+y;
return f;
}
main()
{
float a,b,x,y,h,t,k;
printf("\nEnter x0,y0,h,xn: ");
scanf("%f%f%f%f",&a,&b,&h,&t);
x=a;
y=b;
printf("\n x\t y\n");

while(x<=t)
{
k=h*fun(x,y);
y=y+k;
x=x+h;
printf("%0.3f\t%0.3f\n",x,y);
}
}

Input/Output:

2. Diferensial Biasa
Misalkan diketahui sebuah fungsi y = x2
Bila x digeser sejauh

dx , menjadi

x+ dx , maka besarnya nilai y juga

berubah menjadi y +dx ,


Coding
#include<stdio.h>
#include<math.h>
//deklarasi fungsi
float f(float x);
float turunan_y(float x1, float x2,float dx);

//ini adalah fungsi utama


main()
{
//deklarasi variabel
float x;
float delta_x;
float x_awal;
float x_akhir;
float hasil;
//meminta masukan x dan delta x dari pengguna
printf("\n masukan x

:"); scanf("%f",&x);

printf("\n masukan delta x:"); scanf("%f",&delta_x);


//mencari nilai x1 ,dan x2 dari persamaan umum y=x^2
x_akhir =f(x+delta_x);
x_awal =f(x);
//menentukan nilai dy/dx
hasil=turunan_y(x_awal,x_akhir,delta_x);
//menampilkan nilai dy/dx
printf("\n dy/dx :%f",hasil);
}
//inisial dari fungsi d
float f(float x)
{
return pow(x,2);
}

//inisial dari fungsi turunan y


float turunan_y(float x1,float x2,float dx)
{
return (x2-x1)/dx;
}

Input dan Output

3. Diferensial Metode Trapesium


Metode perhitungan integral secara numerik bekerja dengan sejumlah titik
diskrit. Untuk fungsi menerus titik-titik diskrit itu diperoleh dengan
menggunakan persamaan fungsi yang diberikan untuk menghasilkan table
nilai. Titik-titik pada tabel sama dengan membagi selang integrasi [a,b]
menjadi n buah pias (strip) atau segmen.
Titik absis pas dinyatakan sebagai:

Xr = a + rh,

r = 1,2,3 .n

Dan nilai fungsi pada titik absis pias adalah,


Fr f (Xr)
Luas daerah integrasi [a,b] dihampiri sebagai luas n buah pias. Metode
integrasi numerik yang berbasis pias ini disebut metode pias. Kaidah integrasi
numerik yang dapat diturunkan dengan metode pias adalah
1.

Kaidah segiempat (rectangle rule)

2.

Kaidah trapesium (trapezoidal rule)

3.

Kaidah titik tengah (midpoint rule)


Pada sebuah pias berbentuk trapesium dari x = Xo sampai x = Xi
Luas trapesium adalah

Persamaan di atas dikenal dengan kaidah trapesium


Galat kaidah trapezium untuk satu buah pais adalah:

Coding
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;

void trapesium (float atas, float bawah, float h){


int r;
float f, f1, turunan;
r=0;
while (bawah <= atas){
cout << setw (4) << r;
cout << setw (5) << bawah;
f= 1/(1+bawah);
cout << setw (10) << f;
if ((r!=0)&& (bawah!=atas)){
f1=f1+2*f;
}else{
f1=f1+f;
}
r++;
bawah=bawah + h;
cout << endl;
}
cout << endl;
turunan= (h/2) * (f1);
cout << "Harga Turunannya: " << turunan;
}

int main ()
{
double batas_atas, batas_bawah, h;
int r, exit;
r=0;

cout << "Masukkan batas bawah: ";


cin >> batas_bawah;
cout << "Masukkan batas atas: ";
cin >> batas_atas;
cout << "Masukkan h: ";
cin >> h;

cout << "\n\nMetode Trapesium ::: Pias\n";


trapesium (batas_atas, batas_bawah, h);

}
Input/ Output

Anda mungkin juga menyukai