Algoritma Persamaan Keadaan Gas Nyata Soave
-
Upload
romi-ramadhan -
Category
Documents
-
view
14 -
download
8
description
Transcript of Algoritma Persamaan Keadaan Gas Nyata Soave
1. ALGORITMA PENYELESAIAN PERSAMAAN KEADAAN GAS NYATA SOAVE-REDLICH KWONG MENGGUNAKAN METODE NEWTON-RAPHSON
#include "iostream"#include "math.h"
using std::cout;using std::cin;
int main(){
int n,i;double V[1000];double P,T,fungsi,turunan,galat,alfa,delta,toleransi,R,Pc,Tc,omega,a,b,Tr;
//judulcout
<<"*******************************************************************************\n";
cout <<"\n Penyelesaian Persamaan Keadaan Soave-Redlich Kwong\n";cout <<"\n Menggunakan Metode Newton-Raphson Pada Microsoft Visual
Studio 2010 C++\n\n";cout
<<"*******************************************************************************\n";
cout <<"\n\nBentuk umum Persamaan Keadaan Gas Nyata : Soave-Redlich Kwong \n\n";
cout <<"P = RT/(V-b) - a*alfa/(V*(V+b))\n\n";cout <<"\nPersamaan Keadaan Soave-Redlich Kwong dalam fungsi V\n";cout <<"\nf(V) = P*V^3 + (P*b-P*b-R*T)*V^2 - (P*b*b+b*R*T-a*alfa)*V -
a*alfa*b = 0\n\n";cout <<"\nPersamaan Keadaan Soave-Redlich Kwong dalam fungsi turunan V\n";cout <<"\nf'(V) = 3*P*V^2 + 2*(P*b-P*b-R*T)*V - (P*b*b+b*R*T-a*alfa)\n\
n";cout <<"\
n*******************************************************************************\n\n";
//looping input konstantacout << "Masukkan nilai P (bar) : ";cin >> P;cout << "Masukkan nilai T (K) : ";cin >> T;cout << "Masukkan nilai R (cm^3 bar mol^(-1) K^(-1)) : ";cin >> R;cout << "Masukkan nilai Pc (bar) : ";cin >> Pc;cout << "Masukkan nilai Tc (K) : ";cin >> Tc;cout << "Masukkan nilai omega : ";cin >> omega;
a=0.42747*pow(R,2)*pow(Tc,2)/Pc;b=0.08664*R*Tc/Pc;Tr=T/Tc;
alfa=pow(1+(0.48+1.574*omega-0.176*pow(omega,2))*(1-pow(Tr,0.5)),2);i=0;
//looping mencari Volum Molar toleransi=0.0000001;galat=0.1;i=1;V[i]=R*T/P;
while (galat>=toleransi){
// mencari nilai fungsi turunanfungsi=P*pow(V[i],3)+(P*b-P*b-R*T)*pow(V[i],2)-(P*b*b+b*R*T-
a*alfa)*V[i]-a*alfa*b ;turunan=3*P*pow(V[i],2)+2*(P*b-P*b-R*T)*V[i]-(P*b*b+b*R*T-a*alfa);V[i+1]=V[i]-fungsi/turunan;delta=V[i+1]-V[i];galat=abs(delta);V[i]=V[i+1];i=i+1;
};
//hasil iterasicout <<"\nfungsi = "<<fungsi<<"\n \n";cout <<"\nturunan = "<<turunan<<"\n \n";cout <<"\ndelta = "<<delta<<"\n \n";cout <<"\ngalat = "<<galat<<"\n \n";cout <<"\nVolum Molar = "<<V[i]<<"\n";char wait;cin >> wait;return 0;
}
2. ALGORITMA PERHITUNGAN PERKALIAN MATRIX
#include "iostream"#include "conio.h"
using std::cout;using std::cin;using std::endl;
int main(){
int m,n,p,i,j,k;double A[100][100],B[100][100],C[100][100];double sumC;
// JUDULcout << "PERKALIAN MATRIK A dan B";cout << "Ukuran Matrik A mxn dan Matrik B nxp \n \n";
//INPUT DATA MATRIK A dan Bcout <<"Masukan Jumlah Baris Matrik A = ";cin >>m;
cout <<"Masukan Jumlah Kolom Matrik A = ";cin >>n;cout <<"Masukan Jumlah Kolom Matrik B = ";cin >>p;
i=1;while (i<=m)
{j=1;while (j<=n)
{cout <<"Masukkan nilai A["<<i<<"]["<<j<<"] = ";cin >> A[i][j];j=j++;};
i=i++;};
i=1;while (i<=n)
{j=1;while (j<=p)
{cout <<"Masukkan nilai B["<<i<<"]["<<j<<"] = ";cin >> B[i][j];j=j++;};
i=i++;};
// PERHITUNGAN KALI MATRIKi=1;while (i<=m)
{sumC=0;k=1;while (k<=p){
j=1;while (j<=n)
{sumC=A[i][j]*B[j][k]+sumC;j=j++;};
C[i][k]=sumC;k=k++;
};i=i++;};
//OUTPUT cout <<"Matriks A" << endl;i=1;while (i<=m)
{j=1;while (j<=n){
cout <<A[i][j]<<" ";j=j++;
};cout <<endl;i=i++;
};
cout <<"Matriks B" << endl;i=1;while (i<=n){
j=1;while (j<=p){
cout <<B[i][j]<<" ";j=j++;
};cout <<endl;i=i++;
};
cout <<"Hasil kali adalah Matrik C" << endl;i=1;while (i<=n){
j=1;while (j<=p){
cout <<C[i][j]<<" ";j=j++;
};cout <<endl;i=i++;
};
char wait;cin >> wait;return 0;
}
3. ALGORITMA PENYELESAIAN NATURAL CUBIC SPLINE
#include "iostream"
using std::cin;using std::cout;
int main(){
int n,i;double f[1000],t[1000],p[1000],q[1000],r[1000],s[1000],h[1000];
double a[1000],b[1000],c[1000],d[1000],x[1000],y[1000],alfa[1000],beta[1000];
cout <<"NATURAL CUBIC SPLINE \n \n";cout <<"aturan persamaan output yang digunakan \n";cout <<"g(t[i]) = p + q*(t[i+1]-t[i]) + r*(t[i+1]-t[i])^2 + s*(t[i+1]-
t[i])^3 \n \n";
cout <<"-------------------------------------------------------------------------------- \n \n";
cout <<"masukan jumlah data = ";cin >> n;
//input datai=1;while (i<=n){
cout <<"masukan f["<<i<<"] =";cin >> f[i];cout <<"masukan t["<<i<<"] =";cin >> t[i];cout << "\n \n";i=i++;
};
//PROSEDURE CUBIC SPLINEi=1;while (i<=n){
p[i]=f[i];h[i]=t[i-1]-t[i];i=i++;
};a[1]=1;b[n+1]=0;c[n+1]=0;
i=2;while (i<=n){
a[i]=2*(h[i-1]+h[i]);b[i]=h[i-1];c[i]=h[i];i=i++;
};
d[1]=0;d[n]=0;
i=2;while (i<=n){
d[i]=3*(p[i+1]-p[i])/h[i] - 3*(p[i]-p[i-1])/h[i-1];i=i++;
};
// PROSEDURE THOMASalfa[1]=a[1];i=2;
while (i<=n){
beta[i]=b[i]/alfa[i-1];alfa[i]=a[i]-beta[i]*c[i-1];i=i+1;
};
y[1]=d[1];i=2;
while (i<=n){
y[i]=d[i]-beta[i]*y[i-1];i=i+1;
};
x[n]=y[n]/alfa[n-1];i=n-1;
while (i>=1){
x[i]=(y[i]-c[i]*x[i+1])/alfa[i];i=i-1;
};
//PROSEDURE CUBIC SPLINE LANJUTAN
i=1;while (i<=n){
r[i]=x[i];i=i++;
};
i=1;while (i<=n){
q[i]=(p[i+1]-p[i])/h[i] - h[i]*(2*r[i]+r[i+1])/3;s[i]=(r[i+1]-r[i])/(3*h[i]);i=i++;
};
//OUTPUT DATAi=1;while (i<=n){
cout << " untuk t["<<t[i-1]<<"] ke t["<<t[i]<<"] maka p = "<<p[i]<<" q = "<<q[i]<<" r = "<<r[i]<<" s = "<<s[i]<<" \n";
i=i++;};
char wait;cin >> wait;return 0;
}
4. ALGORITMA PERHITUNGAN RATA-RATA
#include "iostream"
using std::cout;using std::cin;
int main(){
char wait;double d[100];int i,n;double rata2;cout <<"Masukan jumlah n data = ";cin >> n;i=1;do{
cout <<"masukan data ke"<< i <<" = \n";cin >> d[i];i=i++;
}while (i<=n);i=1;double sum;sum=0;do{
sum=sum+d[i];i=i++;
}while (i<=n);rata2=sum/n;cout <<"hasil rata-rata adalah \n" <<rata2<<" ";cin >> wait;return 0;
}
5. ALGORITMA PENYELESAIAN METODE RUNGE-KUTTA ORDE 3
#include "iostream"#include "conio.h"#include "math.h"#include "string"
using std::cout;using std::cin;
int main()
{int i,n;double a,b,p,q,r,s,alfa,h,d,c,k1,k2,k3,fungsi;double y[1000],t[1000];cout <<"PROGRAM PENYELESAIAN DEFERENSIAL \n";cout <<"METODE RUNGE KUTTA 3 \n \n";cout <<"Persamaan yang digunakan adalah dy/dt = p*y + q*t^s + r \n";cout <<"a, b, dan r merupakan konstanta \n \n";
//INPUTcout <<"masukan nilai p = ";cin >> p;cout <<"masukan nilai q = ";cin >> q;cout <<"masukan nilai r = ";cin >> r;cout <<"masukan nilai s = ";cin >> s;
cout <<"masukan batas a = ";cin >> a;cout <<"masukan batas b = ";cin >> b;cout <<"masukan jumlah partisi n = ";cin >> n;cout <<"nilai awal y = ";cin >> alfa;
//RK3h=(b-a)/n;y[1]=alfa;i=1;while(i<=n+1){
t[i]=a+(i-1)*h;
d=y[i];c=t[i];fungsi=p*d + q*pow(c,s) + r;k1=h*fungsi;
d=y[i]+k1*3/4;c=t[i]+h/2;fungsi=p*d + q*pow(c,s) + r;k2=h*fungsi;
d=y[i]-k1+2*k2;c=t[i]+h;fungsi=p*d + q*pow(c,s) + r;k3=h*fungsi;
y[i+1]=y[i]+(k1+4*k2+k3)/6;
i=i++;};
//OUTPUTi=1;
while (i<=n){
cout <<"y = "<<y[i]<<" pada saat x = "<<t[i]<< " \n";i=i++;
};
char wait;cin >> wait;return 0;
}
6. ALGORITMA PENYELESAIAN METODE RUNGE-KUTTA ORDE 4
#include "iostream"#include "math.h"
using std::cout;using std::cin;
int main(){
int i,n;double a,b,p,q,r,s,alfa,h,d,c,k1,k2,k3,k4,fungsi;double y[1000],t[1000];
cout <<"PROGRAM PENYELESAIAN DEFERENSIAL \n";cout <<"METODE RUNGE KUTTA 4 \n \n";cout <<"Persamaan yang digunakan adalah dy/dt = p*y + q*t^s + r \n";cout <<"a, b, dan r merupakan konstanta \n \n";
//INPUTcout <<"masukan nilai p = ";cin >> p;cout <<"masukan nilai q = ";cin >> q;cout <<"masukan nilai r = ";cin >> r;cout <<"masukan nilai s = ";cin >> s;
cout <<"masukan batas a = ";cin >> a;cout <<"masukan batas b = ";cin >> b;cout <<"masukan jumlah partisi n = ";cin >> n;cout <<"nilai awal y = ";cin >> alfa;
//RK4h=(b-a)/n;y[1]=alfa;t[1]=a;i=2;while(i<=n+1){
t[i-1]=a+(i-2)*h;
d=y[i-1];c=t[i-1];fungsi=p*d + q*pow(c,s) + r;k1=h*fungsi;
d=y[i-1]+k1/2;c=t[i-1]+h/2;fungsi=p*d + q*pow(c,s) + r;k2=h*fungsi;
d=y[i-1]+k2/2;c=t[i-1]+h/2;fungsi=p*d + q*pow(c,s) + r;k3=h*fungsi;
d=y[i-1]+k3;c=t[i-1]+h;fungsi=p*d + q*pow(c,s) + r;k4=h*fungsi;
y[i]=y[i-1]+(k1+2*k2+2*k3+k4)/6;
i=i++;};
//OUTPUTi=1;while (i<=n){
cout <<"y = "<<y[i]<<" pada saat x = "<<t[i]<< " \n";i=i++;
};
char wait;cin >> wait;return 0;
}
7. ALGORITMA PENYELESAIAN METODE INTEGRASI SIMPSON
#include "iostream"#include "math.h"
using std::cin;using std::cout;
int main(){
int n,i,m;double
p,q,b,h,fungsi1,fungsi2,fungsi3,sigma1,sigma2,sigma3,Integrasi,fungsip,fungsiq;double a[10000],x[10000];
cout <<"PROGRAM PENYELESAIAN INTEGRAL POLINOMIAL PANGKAT 5\n";
cout <<"METODE SIMPSON38 \n \n";cout <<"Persamaan yang digunakan adalah \n \n";cout <<"a1*x^5 + a2*x^4 + a3*x^3 + a4*x^2 + a5*x + a6 \n \n";cout <<"a merupakan konstanta \n \n";cout <<"dengan integrasi p sampai q dan jumlah partisi adalah m \n \n";
n=5;
cout <<"masukan jumlah partisi m = ";cin >> m;
//input datai=1;while (i<=n){
cout <<"masukan konstanta a["<<i<<"] = ";cin >> a[i];i=i++;
};cout <<"masukan konstanta a["<<n+1<<"] = ";cin >> a[n+1];cout <<"masukan batas p =";cin >> p;cout <<"masukan batas q =";cin >> q;
//perhitungan fungsi
h = (q - p)/m;x[1] = p;x[n+1] = q;sigma1 = 0;sigma2 = 0;sigma3 = 0;
i = 4;while (i <= m){
x[i] = p + (i-1)*h;
fungsi1=a[1]*pow(x[i],5)+a[2]*pow(x[i],4)+a[3]*pow(x[i],3)+a[4]*pow(x[i],2)+a[5]*pow(x[i],1)+a[6];
sigma1 =sigma1 +fungsi1;i = i + 3;
};
i = 2;while (i <= m-1){
x[i] = p + (i-1)*h;
fungsi2=a[1]*pow(x[i],5)+a[2]*pow(x[i],4)+a[3]*pow(x[i],3)+a[4]*pow(x[i],2)+a[5]*pow(x[i],1)+a[6];
sigma2 =sigma2 + fungsi2;i = i + 3;
};
i = 3;while (i <= m-2){
x[i] = p + (i-1)*h;
fungsi3=a[1]*pow(x[i],5)+a[2]*pow(x[i],4)+a[3]*pow(x[i],3)+a[4]*pow(x[i],2)+a[5]*pow(x[i],1)+a[6];
sigma3 =sigma3 + fungsi3;i = i + 3;
};
fungsip=a[1]*pow(p,5)+a[2]*pow(p,4)+a[3]*pow(p,3)+a[4]*pow(p,2)+a[5]*pow(p,1)+a[6];
fungsiq=a[1]*pow(q,5)+a[2]*pow(q,4)+a[3]*pow(q,3)+a[4]*pow(q,2)+a[5]*pow(q,1)+a[6];
Integrasi = 3*h*(fungsip + 2*sigma1 + 3*sigma2 + 3*sigma3 + fungsiq)/8;
cout <<"Hasil integrasi = "<<Integrasi<<" ";
char wait;cin >> wait;return 0;
}
8. ALGORITMA PENYELESAIAN METODE THOMAS
#include "iostream"
using std::cout;using std::cin;
int main(){
int i,j,n;double
a[1000],b[1000],c[1000],alfa[1000],beta[1000],d[1000],y[1000],x[1000];
cout <<"Thomas \n \n";
cout <<"masukan jumlah data vektor = ";cin >> n;
//input ai=1;while (i<=n){
cout <<"Masukan a["<<i<<"] = ";cin >> a[i];i=i+1;
};cout <<"\n";
//input bi=1;while (i<=n){
cout <<"Masukan b["<<i<<"] = ";cin >> b[i];i=i+1;
};cout <<"\n";
//input ci=1;while (i<=n){
cout <<"Masukan c["<<i<<"] = ";cin >> c[i];i=i+1;
};cout <<"\n";
//input di=1;while (i<=n){
cout <<"Masukan d["<<i<<"] = ";cin >> d[i];i=i+1;
};cout <<"\n";
//thomasalfa[1]=a[1];i=2;
while (i<=n){
beta[i]=b[i]/alfa[i-1];alfa[i]=a[i]-beta[i]*c[i-1];i=i+1;
};
y[1]=d[1];i=2;
while (i<=n){
y[i]=d[i]-beta[i]*y[i-1];i=i+1;
};
x[n]=y[n]/alfa[n-1];i=n-1;
while (i>=1){
x[i]=(y[i]-c[i]*x[i+1])/alfa[i];i=i-1;
};
//output
i=1;while (i<=n){
cout << "Hasil x["<<i<<"] = "<<x[i]<< " \n";j=j+1;
};
char wait;cin >> wait;return 0;
}
9. ALGORITMA PENYELESAIAN PERSAMAAN KEADAAN GAS NYATA SOAVE-REDLICH KWONG
#include "iostream"#include "math.h"
using std::cout;using std::cin;
int main(){
int i,n;double T[1000],P[1000];double Tc,Pc,R,b,a,Tr,omega,alfa,V,Ta,Tb,Temp,h;
cout << "PERSAMAAN KEADAAN SOAVE-REDLICH KWONG\n \n";cout << "Hubungan Temperature dan Tekanan Gas pada Volume Reaktor Konstan \
n \n";
cout << "Volume Reaktor (m^3) = ";cin >> V;cout <<"\n \n";
cout <<"critical temperature and pressure and acentric factor \n";cout << " Tc (Kelvin) = ";cin >> Tc;cout << " Pc (Pa) = ";cin >> Pc;cout << " Omega = ";cin >> omega;cout <<"\n \n";
cout << "Input Range Temperature \n";cout << "T awal (Kelvin) = ";cin >> Ta;
cout << "T akhir (Kelvin)= ";cin >> Tb;cout << "Jumlah partisi = ";cin >> n;
R=8.314;a=0.42747*pow(R,2)*pow(Tc,2)/Pc;b=0.08664*R*Tc/Pc;
i=1;h=(Tb-Ta)/n;Temp=Ta-h;
i=1;while (i<=n+1){
T[i]=Temp+h;Tr=T[i]/Tc;alfa=pow((1+(0.480 + 1.574*omega - 0.176*pow(omega,2))*(1-
pow(Tr,0.5))),2);P[i]=R*T[i]/(V-b) - a*alfa/(V*(V+b));Temp=T[i];i=i++;
};
cout << "Pada Reaktor dengan Fluida ..... , V reaktor = "<<V<<"\n";i=1;while (i<=n+1){
cout << "T operasi = "<<T[i]<<" ; P operasi = "<<P[i]<<"\n";i=i++;
};
char wait;cin >> wait;return 0;
}
10.ALGORITMA PERSAMAAN KEADAAN REDLICH KWONG MENGGUNAKAN NEWTON RAPHSON
#include "iostream"#include "math.h"
using std::cout;using std::cin;
int main(){
int n,i;double V[1000];double P,T,fungsi,turunan,galat,delta,toleransi,R,Pc,Tc,a,b,Tr;
//judulcout
<
<"*******************************************************************************\n";
cout <<"\n Penyelesaian Persamaan Keadaan Redlich Kwong\n";cout <<"\n Menggunakan Metode Newton-Raphson Pada Microsoft Visual
Studio 2010 C++\n\n";cout
<<"*******************************************************************************\n";
cout <<"\n\nBentuk umum Persamaan Keadaan Gas Nyata : Redlich Kwong \n\n";cout <<"P = RT/(V-b) - a*/(T^1/2*V*(V-b))\n\n";cout <<"\nPersamaan Keadaan Redlich Kwong dalam fungsi V\n";cout <<"\nf(V) = P*V^2*T^1/2 - (P*T^1/2*b + R*T^3/2)*V + a = 0\n\n";cout <<"\nPersamaan Keadaan Redlich Kwong dalam fungsi turunan V\n";cout <<"\nf'(V) = 2*P*V*T^1/2 - (P*T^1/2*b + R*T^3/2) \n\n";cout <<"\
n*******************************************************************************\n\n";
//looping input konstantacout << "Masukkan nilai P (bar) : ";cin >> P;cout << "Masukkan nilai T (K) : ";cin >> T;cout << "Masukkan nilai R (cm^3 bar mol^(-1) K^(-1)) : ";cin >> R;cout << "Masukkan nilai Pc (bar) : ";cin >> Pc;cout << "Masukkan nilai Tc (K) : ";cin >> Tc;
a=0.42747*pow(R,2)*pow(Tc,2)/Pc;b=0.08664*R*Tc/Pc;Tr=T/Tc;i=0;
//looping mencari Volum Molar toleransi=0.0000001;galat=0.1;i=1;V[i]=R*T/P;
while (galat>=toleransi){
// mencari nilai fungsi turunanfungsi=P*pow(V[i],2)*pow(T,0.5)-(P*pow(T,0.5)*b+R*pow(T,1.5))*V[i]+a;turunan=2*P*V[i]*pow(T,0.5)-(P*pow(T,0.5)*b+R*pow(T,1.5));V[i+1]=V[i]-fungsi/turunan;delta=V[i+1]-V[i];galat=abs(delta);V[i]=V[i+1];i=i+1;
};
//hasil iterasicout <<"\nfungsi = "<<fungsi<<"\n \n";
cout <<"\nturunan = "<<turunan<<"\n \n";cout <<"\ndelta = "<<delta<<"\n \n";cout <<"\ngalat = "<<galat<<"\n \n";cout <<"\nVolum Molar = "<<V[i]<<"\n";char wait;cin >> wait;return 0;
}
11. ALGORITMA PENYELESAIAN RUNGE-KUTTA BUTCHER
#include "iostream"#include "conio.h"#include "math.h"#include "string"
using std::cout;using std::cin;
int main(){
int i,n;double a,b,p,q,r,s,alfa,h,d,c,k1,k2,k3,k4,k5,k6,fungsi;double y[1000],t[1000];cout <<"PROGRAM PENYELESAIAN DEFERENSIAL \n";cout <<"METODE RUNGE KUTTA BUTCHER \n \n";cout <<"Persamaan yang digunakan adalah dy/dt = p*y + q*t^s + r \n";cout <<"a, b, dan r merupakan konstanta \n \n";
//INPUTcout <<"masukan nilai p = ";cin >> p;cout <<"masukan nilai q = ";cin >> q;cout <<"masukan nilai r = ";cin >> r;cout <<"masukan nilai s = ";cin >> s;
cout <<"masukan batas a = ";cin >> a;cout <<"masukan batas b = ";
cin >> b;cout <<"masukan jumlah partisi n = ";cin >> n;cout <<"nilai awal y = ";cin >> alfa;
//RK BUTCHERh=(b-a)/n;y[1]=alfa;i=1;while(i<=n+1){
t[i]=a+(i-1)*h;
d=y[i];c=t[i];fungsi=p*d + q*pow(c,s) + r;k1=h*fungsi;
d=y[i]+k1*1/4;c=t[i]+h*1/4;fungsi=p*d + q*pow(c,s) + r;k2=h*fungsi;
d=y[i]+k1*1/8+k2*1/8;c=t[i]+h*1/4;fungsi=p*d + q*pow(c,s) + r;k3=h*fungsi;
d=y[i]-k2*h*1/2+k3;c=t[i]+h*1/2;fungsi=p*d + q*pow(c,s) + r;k4=h*fungsi;
d=y[i]+k1*3/16+k4*9/16;c=t[i]+h*3/4;fungsi=p*d + q*pow(c,s) + r;k5=h*fungsi;
d=y[i]-k1*3/7+k2*2/7+k3*12/7-k4*12/7+k5*8/7;c=t[i]+h;fungsi=p*d + q*pow(c,s) + r;k6=h*fungsi;
y[i+1]=y[i]+(7*k1+32*k3+12*k4+32*k5+7*k6)/90;
i=i++;};
//OUTPUTi=1;while (i<=n){
cout <<"y = "<<y[i]<<" pada saat t = "<<t[i]<< " \n";i=i++;
};
char wait;
cin >> wait;return 0;
}