刚学 Jacobi算法和Gauss_Siedel算法不久,觉的对以后学习会有帮助,所以记下来,希望感兴趣的朋友共勉!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<iostream>
#include"math.h"
using namespace std;
#define n 3
double a[n][n]={{5,2,1},{-1,4,2},{2,-3,10}}, x[n]={-3,2,1}, b[n]={-12,20,3}, c[n];
int i=0,j,k=0,counter=15;
int main()
{
int k=0,i=0;
double num1,E;
float y[n];
do
{
E=0;
for(j=0;j<n;j++)
{
c[j]=x[j];
}
num1=0;
for(j=0;j<n;j++)
{
if(j!=i)
num1=num1+a[i][j]*x[j];
}
for(j=0;j<n;j++)
{
c[j]=x[j];
}
y[i]=(b[i]-num1)/a[i][i];
if(i<n)
{ i++; }
else
{
for(j=0;j<n;j++)
{ x[j]=y[j]; }
for(j=0;j<n;j++)
{
if(E<(float)fabs(c[j]-y[j])) E=(float)fabs(c[j]-y[j]);
}
if(k>=7)
{ cout<<"Iterations is "<<k+1<<","<<"Iterative precision is " ;
printf("%.6lf\n",E);
for(j=0;j<n;j++)
printf("x[%d]=%.5lf\t",j,x[j]);
cout<<endl<<endl;
}
i=0;
k++;
if(E<0.001) break;
}
}while(k<=counter);
cout<<"Iterations is "<<k<<endl;
cout<<"Iterative terminating condition ";
printf("x[%d]-x[%d]oo<%.6lf\n",k,k-1,E);
cout<<"\t\t---------Solution-----------"<<endl;
for(i=0;i<n;i++)
{
printf("x[%d]=%.5lf\n",i,x[i]);
}
}
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double a[3][3]={{1,2,-2},{3,1,-1},{2,4,1}},b[3]={10,12,-20};
double x[3]={0,0,0},sum1,sum2;
int i,j,k,n=3;
for (k=0;k<5;k++)
{ for(i=0;i<n;i++)
{ sum1=0;sum2=0;
for(j=0;j<i-1;j++)
{ sum1=sum1+a[i][j]*x[j];
}
for(j=i+1;j<n;j++)
{sum2=sum2+a[i][j]*x[j];}
x[i]=(b[i]-sum1-sum2)/a[i][i];
}
for(i=0;i<n;i++)
{ printf("x%d=%-15f",i+1,x[i]);}
printf("\n");
}
}