Displaying Source Code(s)
|
|
jacobi itterative and gauss seidal method to solve roots
--------------------------------------------------------------------------------
Description : this is a program from numerical to calculate the
root of the given system ,it will check its conditions and then
perform the operation on that system,esle it will tell u that
system is not diagonally dominent ,,,,in this program the
functions used can be used in other program ,,
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
float a1[4],a2[4],a3[4]; /* Array declaration */
void show(); /* function declaration
*/
void getdata(float [],float [],float []); /* // // //
*/
void display(float [],float [],float []); /* // // //
*/
int diagonally();
void swap(float [],float []); /* // // //
*/
void jacobi(float [],float [],float []); /* // // //
*/
void gauss(float [],float [],float []);
void answer();
/*^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*
/
/*....................MAIN FUNCTION OF METHOD............*/
void main() /* main function definition
*/
{
int count=4; /* { main function body}
*/
clrscr();
cout<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^"<<endl;
cout<<"..................THIS IS VALID ONLY FOR JACOBI
ITTERATIVE
METHOD............."<<endl;
cout<<"___________________________________________________________________
___________"<<endl;
show(); /* function calling */
getdata(a1,a2,a3); /* function calling */
clrscr();
cout<<endl<<endl;
display(a1,a2,a3); /* function calling */
count=diagonally(); /* function calling */
switch (count)
{
case 0:
{
answer(); /* function calling */
break;
}
case 2:
{display(a1,a2,a3);
answer(); /* function calling */
break;
}
default:
{
cout<<"SORRY;YOUR SYSTEM IS NOT DIAGONALLY DOMINENT";
break;
}
}
getch();
}
////////////////////////Function To Check
Diagonality////////////////////////
int diagonally()
{
int f=4,g=4 ,h=4;
int count=0;
float temp[4];
if(fabs(a1[0])<(fabs(a1[1])+fabs(a1[2])))
{count++; f=1;}
if(fabs(a2[1])<(fabs(a2[0])+fabs(a2[2])))
{count++; g=2;}
if(fabs(a3[2])<(fabs(a3[0])+fabs(a3[1])))
{count++; h=3;}
if(f==1&&g==2&&h==4)
swap(a1,a2); /* function calling */
if(f==1&&h==3&&g==4)
swap(a1,a3); /* function calling */
if(g==2&&h==3&&f==4)
swap(a2,a3); /* function calling */
return(count);
}
////////////////////////////Function for jacobi itterative
method/////////////////////////
void jacobi(float a[],float b[],float c[]) /*function definition
*/
{
float temp[3];
long float j1,j2,j3;
cout<<endl<<"please enter the initial guess:"<<endl;
cout<<endl<<"X(1) =";
cin>>j1;
cout<<endl<<"X(2) =";
cin>>j2;
cout<<endl<<"X(3) =";
cin>>j3;
cout<<"-------------------------------------------------------------------
----";
cout<<":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::";
cout<<"___________________________________________________________________
____";
cout<<endl<<endl<<"iterrations #"<<" "<<" X(1)"<<"
X(2)"<<" X(3)";
cout<<endl<<" 0"<<setw(17)<<j1<<setw(15)<<j2<<setw(14)<<j3;
cout<<endl;
for(int s=1;s<=20;s++)
{
temp[0]=j1;temp[1]=j2;temp[2]=j3;
j1=(a[3]-a[1]*temp[1]-a[2]*temp[2])/a[0];
j2=(b[3]-b[0]*temp[0]-b[2]*temp[2])/b[1];
j3=(c[3]-c[0]*temp[0]-c[1]*temp[1])/c[2];
cout<<" "<<s<<setw(17)<<j1<<setw(15)<<j2<<setw(14)<<j3<<endl;
if(j1==temp[0]&&j2==temp[1]&&j3==temp[2])
break;
}
}
//////////////////////////Function Of
Swaping////////////////////////////////////
void swap(float a[],float b[]) /* function definition */
{
float temp[4];
cout<<"-------------------------------------------------------------------
-------------"<<endl;
cout<<".....................Your System Is Not Diagonally
Dominent....................."<<endl;
cout<<"___________________Now It Have To Become Diagonally
Dominent
As__________________"<<endl;
for(int i=0;i<4;i++)
{
temp[i]=a[i];
a[i]=b[i];
b[i]=temp[i];
}
}
//////////////////////Function To Show Equations
Form////////////////////////
void show() /* function definition */
{
cout<<endl;
cout<<"__________________Your Equations Will Be Of The Form Like
This_________________"<<endl;
cout<<endl<<endl<<endl;
cout<<" a(11)X1 + a(12)X2 + a(13)X3=
b(1)"<<endl
<<" a(21)X1 + a(22)X2 + a(23)X3= b(2)"<<endl
<<" a(31)X1 + a(32)X2 + a(33)X3= b(3)"<<endl;
}
//////////////////////Function To Get Data From
User/////////////////////////
void getdata(float a[],float b[],float c[]) /* function
definition
*/
{
for(int i=0;i<3;i++)
{
cout<<"a(1"<<i+1<<")=";
cin>>a[i];
cout<<endl;
}
cout<<"b(1) =";
cin>>a[3];
cout<<endl;
for(int j=0;j<3;j++)
{
cout<<"a(2"<<j+1<<")=";
cin>>b[j];
cout<<endl;
}
cout<<"b(2) =";
cin>>b[3];
cout<<endl;
for(int k=0;k<3;k++)
{
cout<<"a(3"<<k+1<<")=";
cin>>c[k];
cout<<endl;
}
cout<<"b(3) =";
cin>>c[3];
cout<<endl;
}
///////////////////////////Function To display
Equations/////////////////////
void display(float a[],float b[],float c[]) /* function
definition
*/
{
cout<<"-------------------------------------------------------------------
-------";
cout<<" ::::::::::::::::Your Given System Is Like
This:::::::::::::::: "<<endl<<endl;
cout<<" "<<a[0]<<"X(1) + "<<a[1]<<"X(2) +<BR><<a[2]<<"X(3) =
"<<a[3]<<endl
<<" "<<b[0]<<"X(1) + "<<b[1]<<"X(2) + "<<b[2]<<"X(3)
=<BR><<b[3]<<endl
<<" "<<c[0]<<"X(1) + "<<c[1]<<"X(2) + "<<c[2]<<"X(3)
=<BR><<c[3];
cout<<endl<<endl;
}
///////////////////////////Function of Gauss Seidal
Method////////////////////
void gauss(float a[],float b[],float c[]) /*function
definition
*/
{
float temp[3];
long float j1,j2,j3;
cout<<endl<<"please enter the initial guess:"<<endl;
cout<<endl<<"X(1) =";
cin>>j1;
cout<<endl<<"X(2) =";
cin>>j2;
cout<<endl<<"X(3) =";
cin>>j3;
cout<<"-------------------------------------------------------------------
----";
cout<<":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::";
cout<<"___________________________________________________________________
____";
cout<<endl<<endl<<"iterrations #"<<" "<<" X(1)"<<"
X(2)"<<" X(3)";
cout<<endl<<" 0"<<setw(17)<<j1<<setw(15)<<j2<<setw(14)<<j3;
cout<<endl;
for(int s=1;s<=20;s++)
{
temp[0]=j1;temp[1]=j2;temp[2]=j3;
j1=(a[3]-a[1]*j2-a[2]*j3)/a[0];
j2=(b[3]-b[0]*j1-b[2]*j3)/b[1];
j3=(c[3]-c[0]*j1-c[1]*j2)/c[2];
cout<<" "<<s<<setw(17)<<j1<<setw(15)<<j2<<setw(14)<<j3<<endl;
if(j1==temp[0]&&j2==temp[1]&&j3==temp[2])
break;
}
}
///////////////// FUNCTION OF TAKING GAUSS OR JACOBI
//////////////////
void answer()
{
char option;
do
{
cout<<"PRESS [G] FOR GAUSS SEIDAL METHOD: "<<endl
<<"AND"<<endl<<"PRESS [J] FOR JACOBI ITTERATIVE METHOD:"<<endl;
option=getche();
switch (option)
{
case 'j':
{
cout<<setw(25)<<"----------BY JACOBI ITTERATIVE
METHOD----------"<<endl;
jacobi(a1,a2,a3); /* function calling */
break;
}
case 'g':
{
cout<<setw(25)<<"----------BY GAUSS SEIDAL
METHOD----------"<<endl;
gauss(a1,a2,a3); /* function calling
*/
break;
}
default:
{
cout<<"-------------YOUR OPTION IS NOT CORRECT TRY
AGAIN-------------"<<endl;
break;
}
}
}while(getche()!='
');
}
|
|
|