Anda di halaman 1dari 20

LAPORAN TUGAS TEKNIK KOMPUTASI

PROGRAM BERBAGAI METODE KOMPUTASI


OLEH:
MUHAMMAD WYNDHAM HARYATA PERMANA (15/379174/TK/43116)
WISANG JATI ANGGORO (15/380044/TK/43309)
Berikut ini adalah hasil percobaan kami untuk membuat program
berdasarkan teknik-teknik komputasi yang diajarkan selama Mata
Kuliah Teknik Komputasi, dimana sebagian besar dari program tersebut
kami buat menggunakan bahasa C++ kecuali untuk Dekomposisi LU yang
kebetulan bersamaan dengan Tugas Akhir Praktikum Teknik Komputasi
maka kami gunakan program yang sama tetapi Berbasis Scilab.
A. BISECTION
1. Source code
#include<bits/stdc++.h>
using namespace std;
float bisection(float a,float b,float c,float d,float x)
{
float e;
e=a*pow(x,3)+b*pow(x,2)+c*x+d;
return e;
}
main()
{
float a,b,c,d,i,atas,bawah;
cout<<"masukkan nilai untuk persamaan ax^3 + bx^2 + cx +
d = 0"<<endl;
cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;
cout<<"c = ";cin>>c;
cout<<"d = ";cin>>d;
cout<<"batas interval bawah : ";cin>>bawah;
cout<<"batas interval atas : ";cin>>atas;

for(i=1;i<=20;i++)
{

if(bisection(a,b,c,d,(bawah+atas)/2)>0){atas=(bawah+atas)
/2;} else
if(bisection(a,b,c,d,(bawah+atas)/2)<0){bawah=(bawah+atas
)/2;} else{}
}
cout<<"x = ";printf("%f\n",(bawah+atas)/2);
}
2. Input / Output

B. NEWTON RHAPSON
1. Source code
#include<bits/stdc++.h>
using namespace std;
float persamaan(float a,float b,float c,float d,float x)
{
float e;
e=a*pow(x,3)+b*pow(x,2)+c*x+d;
return e;
}
float turunan(float a,float b,float c,float d,float x)
{

float e;
e=a*3*pow(x,2)+b*2*x+c;
return e;
}
main()
{
float a,b,c,d,i,x;
cout<<"masukkan nilai untuk persamaan ax^3 + bx^2 + cx +
d = 0"<<endl;
cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;
cout<<"c = ";cin>>c;
cout<<"d = ";cin>>d;
cout<<"input nilai awal x : ";cin>>x;
for(i=1;i<=20;i++)
{
x=x-(persamaan(a,b,c,d,x)/turunan(a,b,c,d,x));
}
cout<<"x = ";printf("%f\n",x);
}

2. Input / Output

C. SECANT METHOD
1. Source code
#include<bits/stdc++.h>
using namespace std;
float a,b,c,d,i,x,x0,x1;
float persamaan(float a,float b,float c,float d,float x)
{
float e;
e=a*pow(x,3)+b*pow(x,2)+c*x+d;
return e;
}
main()
{
cout<<"masukkan nilai untuk persamaan ax^3 + bx^2 + cx +
d = 0"<<endl;
cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;
cout<<"c = ";cin>>c;
cout<<"d = ";cin>>d;
cout<<"input nilai awal x0 : ";cin>>x0;
cout<<"input nilai awal x1 : ";cin>>x1;
for(i=1;i<=20;i++)
{
x=x1-((persamaan(a,b,c,d,x1)*(x1x0))/(persamaan(a,b,c,d,x1)-(persamaan(a,b,c,d,x0))));
x0=x1;
x1=x;
if(x1==x0)break;else{}
}
cout<<"x = ";printf("%f\n",x);
}

2. Input / Output

D. GAUSS ELIMINATION
1. Souce code
#include <iostream>
using namespace std;
int p,q,r,n;
float A[20][20],c,x[10],total=0.0;
int main(void)
{
cout<<"\nMasukan Orde matriks : ";
cin>>n;
cout<<"\nMasukkan elemen matriks A (A[baris][kolom]) dan
B (B[baris])\n\n";
for(p=1; p<=n; p++)
{
for(q=1; q<=(n+1); q++)
{
if (q<=n)
{
cout<<"A["<<p<<"]["<<q<<"] : ";
cin>>A[p][q];
}

else
{
cout<<"\nB["<<p<<"] : ";
cin>>A[p][q];
cout<<endl<<endl;
}}}
for(q=1; q<=n; q++) //mengurutkan segitiga atas
{
for(p=1; p<=n; p++)
{
if(p>q)
{
c=A[p][q]/A[q][q];
for(r=1; r<=n+1; r++)
{
A[p][r]=A[p][r]-c*A[q][r];
}}}}
x[n]=A[n][n+1]/A[n][n];
//untuk substitusi terbalik (backward substitution)
for(p=n-1; p>=1; p--)
{
total=0;
for(q=p+1; q<=n; q++)
{
total=total+A[p][q]*x[q];
}
x[p]=(A[p][n+1]-total)/A[p][p];
}
cout<<"\nHasilnya adalah : \n";
for(p=1; p<=n; p++)
{
cout<<"\nx"<<p<<"= "<<x[p]; //output hasil (x1, x2,
x3)
}
}

2. Input / Output

E. GAUSS-JORDAN METHOD
1. Source code
#include <iostream>
using namespace std;
int p,q,r,n;
float A[20][20],c,x[10];
int main(void)
{
cout<<"\nMasukkan Orde Matriks : ";
cin>>n;
cout<<"\nMasukkan elemen matriks A (A[baris][kolom]) dan
B (B[baris])\n\n";
for(p=1; p<=n; p++)
{
for(q=1; q<=(n+1); q++)
{

if (q<=n)
{
cout<<"A["<<p<<"]["<<q<<"] : ";
cin>>A[p][q];
}
else
{
cout<<"\nB["<<p<<"] : ";
cin>>A[p][q];
cout<<endl<<endl;
}
}
}
//Mencari elemen diagonal dari matriks Asal
for(q=1; q<=n; q++)
{
for(p=1; p<=n; p++)
{
if(p!=q)
{
c=A[p][q]/A[q][q];
for(r=1; r<=n+1; r++)
{
A[p][r]=A[p][r]-c*A[q][r];
}
}
}
}
cout<<"\nHasilnya adalah : \n";
for(p=1; p<=n; p++)
{
x[p]=A[p][n+1]/A[p][p];
cout<<"\nx"<<p<<"= "<<x[p]; //output hasil (x1, x2,
x3)
}
}

2. Input / Output

F. LU DECOMPOSITION
1. Souce code
function [x]=mylittle(A, B)
disp('Program Faktorisasi Doolittle);
disp('M. Wyndham H P(15/379174/TK/43116)');
//dimana [l,u]=lu(A), fungsi standar scilab buat
dekomposisi LU
//i =
//j =
//o,p
//v ,
//L =
//U =

size matriks A;
iterator;
= kolom dan baris;
w = pembagi;
segitiga bawah;
segitiga atas;

i=size(A, 1);
A(2:i,1) = A(2:i,1)/A(1,1) //ngisi baris teratas (elemen
U11 hingga U1n)

//dari sini kebawah fungsi untuk ngurutin elemen A agar


bisa dengan
//gampang memisah komponen L dan U
//segitiga atas A adalah U
//segitiga bawah A adalah L
for o=2:i-1, //kenapa o=2? karena dimulai dari baris 2
:v baris 1 sudah isi
v=A(o,1:o-1);
for p=o:i, //ngisi bagian U secara horizontal
w=A(1:o-1,p);
A(o,p)=A(o,p)-v*w;
end
w=A(1:o-1,o);
for j=o+1:i, //ngisi bagian L secara vertikal
v=A(j,1:o-1);
A(j,o)=(A(j,o)-v*w)/A(o,o);
end
end
A(i,i)=A(i,i)-A(i,1:i-1)*A(1:i-1,i); //ngisi elemen Unn
//dari sini kebawah misahin A yg sudah diurut jadi L dan
U
L = tril(A, -1)+ eye(i,i); //ngambil segitiga bawah
untuk L
U = triu(A); //ngambil segitiga atas untuk U
y=L\B; // karena y=[L]^-1 *[B]
x=U\y; // karena x = [U]^-1 *y
endfunction

2. Input / Output

G. GAUSS-SEIDEL METHOD
1. Source code
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int main(void)
{
int X;
cout<<"Masukkan Orde Matriks\n";
cin>>X;
float x[X][X+1],A[X], ae, max,t,s,errormax;
int p,q,r,mxit;
for(p=0;p<X;p++) A[p]=0;
cout<<"\nMasukkan elemen matriks A (A[baris][kolom]) dan B
(B[baris])\n\n";

for(p=0;p<X;p++)
{
for(q=0;q<X+1;q++)
{
if (q<X)
{
cout<<"A["<<p<<"]["<<q<<"] : ";
cin>>x[p][q];
}
else
{
cout<<"\nB["<<p<<"] : ";
cin>>x[p][q];
cout<<endl<<endl;
}}}
cout<<"Masukkan Nilai Toleransi Error\n";
cin>>ae;
cout<<"Masukkan banyak iterasi\n";
cin>>mxit;
for(r=1;r<=mxit;r++)
{
max=0;
for(p=0;p<X;p++)
{
s=0;
for(q=0;q<X;q++)
if(q!=p) s+=x[p][q]*A[q];
t=(x[p][X]-s)/x[p][p];
errormax=fabs(A[p]-t);
A[p]=t;
}
cout<<"\nIterasi Ke : "<<r<<endl;
for(p=0;p<X;p++)
std::cout<<"Nilai x"<<p<<" : "<<A[p]<<endl;
if(max<ae)
{
cout<<"\nKonvergen pada"<<" iterasi "<<r<<endl;
for(p=0;p<X;p++)
std::cout<<"\nx"<<p<<"= "<<A[p]<<endl;
}}}

2. Input / Output

H. JACOBI METHOD
1. Source code
#include<iostream>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

float A[20][20],x[20],errormax,gede,temp,pinerror,total;
int n,p,q,itrmaks,itr;
char ch;
int main(void)
{
cout<<"Masukkan Orde Matriks :"<<endl;
scanf("%d",&n);
cout<<"\nMasukkan elemen matriks A (A[baris][kolom]) dan
B (B[baris])\n\n";
for(p=1; p<=n; p++)
{
for(q=1; q<=(n+1); q++)
{
if (q<=n)
{
cout<<"A["<<p<<"]["<<q<<"] : ";
cin>>A[p][q];
}
else
{
cout<<"\nB["<<p<<"] : ";
cin>>A[p][q];
cout<<endl<<endl;
}
}
}
cout<<"Masukkan nilai toleransi error dan banyak iterasi
(Pisahkan dengan spasi)"<<endl;
cin>>errormax>>itrmaks;
for(p=1;p<=n;p++)
x[p]=0;

for(itr=1;itr<=itrmaks;itr++)
{
gede=0;
for(p=1;p<=n;p++)
{
total=0;
for(q=1;q<=n;q++)
{
if(p!=q
)
total=total+A[p][q]*x[q];
}
temp=(A[p][n+1]-total)/A[p][p];
pinerror=fabs((x[p]-temp)/temp);
if(pinerror>gede)
gede=pinerror;
x[p]=temp;
}
if(gede<=errormax)
{
cout<<"Konvergen pada iterasi "<<itr<<endl;
for(p=1;p<=n;p++)
cout<<"\nx"<<p<<"= "<<x[p];
getch();
exit(1);
}
}
cout<<"Tidak Konvergen pada iterasi yang diminta"<<endl;
}

2. Input / Output

I. LINEAR REGRESSION
1. Source code
#include<bits/stdc++.h>
using namespace std;
main()
{
float
a,b,c,i,x,y,totalx,totaly,totalxy,totalxkuadrat,totalykuadra
t;
int n;
cout<<"Regresi Linear dengan persamaan awal Y = aX
+b"<<endl;
cout<<"masukkan jumlah data awal : ";cin>>n;
totalx=0;
totaly=0;
totalxkuadrat=0;
totalykuadrat=0;

totalxy=0;
for(a=1;a<=n; a++)
{
cout<<"data ke "<<a<<": "<<endl<<"x = ";cin>>x;
cout<<"y = ";cin>>y;
totalx+=x;
totaly+=y;
totalxkuadrat+=pow(x,2);
totalykuadrat+=pow(y,2);
totalxy+=(x*y);
}
a=((n*totalxy)-(totalx*totaly))/((n*totalxkuadrat)pow(totalx,2));
b=((totalxkuadrat*totaly)(totalx*totalxy))/((n*totalxkuadrat)-pow(totalx,2));
cout<<"persamaan linearnya menjadi Y =
"<<setprecision(6)<<a<<" X + "<<setprecision(6)<<b<<endl;
}
2. Input / Output

J. FALSE POSITION
1. Source code
#include<bits/stdc++.h>
using namespace std;
float persamaan(float a,float b,float c,float d,float x)
{
float e;
e=a*pow(x,3)+b*pow(x,2)+c*x+d;
return e;
}
main()
{
float a,b,c,d,i,x,x0,x1;
cout<<"masukkan nilai untuk persamaan ax^3 + bx^2 + cx +
d = 0"<<endl;
cout<<"a = ";cin>>a;
cout<<"b = ";cin>>b;
cout<<"c = ";cin>>c;
cout<<"d = ";cin>>d;
cout<<"input posisi awal x0 : ";cin>>x0;
cout<<"input posisi awal x1 : ";cin>>x1;
for(i=1;i<=20;i++)
{
x=x1-((persamaan(a,b,c,d,x1)*(x1x0))/(persamaan(a,b,c,d,x1)-(persamaan(a,b,c,d,x0))));
x0=x1;
x1=x;
if(x1==x0)break;else{}
}
cout<<"x = ";printf("%f\n",x);
}

2. Input / Output

K. POLYNOMIAL REGRESSION
1. Source code
#include<bits/stdc++.h>
using namespace std;
main()
{
float *x,*y,n,x1=0,x12=0,y1=0,x1y1=0,a1,a0,e;
int i;
cout<<"Program Regresi Polinomial\nMasukkan jumlah data : ";
cin>>n;
x=(float*)malloc(n*4);
y=(float*)malloc(n*4);
puts("Masukkan nilai X dan Y secara Berurutan");
for(i=0;i<n;i++)
{
cin>>x[i]>>y[i];
x1+=x[i];
y1+=y[i];
x1y1+=(x[i]*y[i]);
x12+=(x[i]*x[i]);
}
a1=(n*x1y1-x1*y1)/(n*x12-x1*x1);
a0=y1/n-a1*x1/n;
e=y[0]-a0-a1*x[0];
printf("Y = %f + %f x + %f x^2",a0,a1,e);
return 0;
}

2. Input / Output

Anda mungkin juga menyukai