Free source codes for several numerical methods problems are available at http://www.sourcecodesworld.com/. please visit and download subjected to copyrights of distribution.
2006-11-03 23:47:43
·
answer #1
·
answered by Anonymous
·
0⤊
0⤋
The subscipts are denoted within {}
Algorithm for Jacobi method:
Chose an initial guess Ï0 to the solution
for k := 1 step 1 until convergence do
for i := 1 step until n do
Ï = 0
for j := 1 step until n do
if j != i then
Ï = Ï + a{ij} * Ï{j} ^ (k-1)
end if
end (j-loop)
Ï{i}^k = (bi – Ï) / a{ii}
end (i-loop)
check if convergence is reached
end (k-loop)
Algorithm for Gauss-Seidel method
Chose an initial guess Ï0
for k := 1 step 1 until convergence do
for i := 1 step until n do
Ï = 0
for j := 1 step until i-1 do
Ï = Ï + a{ij} * Ï{j} ^ k
end (j-loop)
for j := i+1 step until n do
Ï = Ï + a{ij} * Ï{j} ^ (k-1)
end (j-loop)
Ï{i}^k = (bi – Ï) / a{ii}
end (i-loop)
check if convergence is reached
end (k-loop)
The C++ Source code will be:
#include
#include
#include
#include
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<<"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^"<
cout<<"..................THIS IS VALID ONLY FOR JACOBI ITTERATIVE
METHOD............."<
cout<<"___________________________________________________________________
___________"<
show(); /* function calling */
getdata(a1,a2,a3); /* function calling */
clrscr();
cout<
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<
cout<
cin>>j1;
cout<
cin>>j2;
cout<
cin>>j3;
cout<<"-------------------------------------------------------------------
----";
cout<<":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::";
cout<<"___________________________________________________________________
____";
cout<
X(2)"<<" X(3)";
cout<
cout<
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<<" "<
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<<"-------------------------------------------------------------------
-------------"<
cout<<".....................Your System Is Not Diagonally
Dominent....................."<
cout<<"___________________Now It Have To Become Diagonally Dominent
As__________________"<
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<
cout<<"__________________Your Equations Will Be Of The Form Like
This_________________"<
cout<
cout<<" a(11)X1 + a(12)X2 + a(13)X3=
b(1)"<
<<" a(21)X1 + a(22)X2 + a(23)X3= b(2)"<
<<" a(31)X1 + a(32)X2 + a(33)X3= b(3)"<
}
//////////////////////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"<
cin>>a[i];
cout<
}
cout<<"b(1) =";
cin>>a[3];
cout<
for(int j=0;j<3;j++)
{
cout<<"a(2"<
cin>>b[j];
cout<
}
cout<<"b(2) =";
cin>>b[3];
cout<
for(int k=0;k<3;k++)
{
cout<<"a(3"<
cin>>c[k];
cout<
}
cout<<"b(3) =";
cin>>c[3];
cout<
}
///////////////////////////Function To display
Equations/////////////////////
void display(float a[],float b[],float c[]) /* function
definition
*/
{
cout<<"-------------------------------------------------------------------
-------";
cout<<" ::::::::::::::::Your Given System Is Like
This:::::::::::::::: "<
cout<<" "<
"<
<<" "<
"<
<<" "<
"<
cout<
}
///////////////////////////Function of Gauss Seidal
Method////////////////////
void gauss(float a[],float b[],float c[]) /*function
definition
*/
{
float temp[3];
long float j1,j2,j3;
cout<
cout<
cin>>j1;
cout<
cin>>j2;
cout<
cin>>j3;
cout<<"-------------------------------------------------------------------
----";
cout<<":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
::::";
cout<<"___________________________________________________________________
____";
cout<
X(2)"<<" X(3)";
cout<
cout<
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<<" "<
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: "<
<<"AND"<
option=getche();
switch (option)
{
case 'j':
{
cout<
METHOD----------"<
jacobi(a1,a2,a3); /* function calling */
break;
}
case 'g':
{
cout<
METHOD----------"<
gauss(a1,a2,a3); /* function calling
*/
break;
}
default:
{
cout<<"-------------YOUR OPTION IS NOT CORRECT TRY
AGAIN-------------"<
break;
}
}
}while(getche()!='
');
}
2006-11-04 06:24:51
·
answer #2
·
answered by The Potter Boy 3
·
0⤊
1⤋