⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c7-2.cpp

📁 数值分析最常用的四十种算法
💻 CPP
字号:
//C7
//Solve a linear system,using Jacobi Iteration

const int N=4;
#include<iostream.h>

int ReachTOL(double x1[],double x2[],double tol,int n)
{
	int i;
	double error=0;
	for (i=0;i<n;i++)
	{
		error+=(x1[i]-x2[i])*(x1[i]-x2[i]);
	}
	if(error<tol) 
		return 1;
	else
		return 0;
}

void JI(double a[][N],double b[],double x0[],double tol,int max,int n)
{
	double x1[N];
	int k,i,j;
	for (i=0;i<n;i++)
	{
		x1[i]=0;
	}
	for (k=0;k<max;k++)
	{
		for (i=0;i<n;i++)
		{
			for (j=0;j<n;j++)
			{
			    if(j!=i)
				{
				    x1[i]+=a[i][j]*x0[j];
				} 
			}
		    x1[i]=((-1)*x1[i]+b[i])/a[i][i];
		}
		if(ReachTOL(x0,x1,tol,n))
		{
			for (i=0;i<n;i++)
			{ 
		        cout<<"x"<<i<<" is: "<<x1[i]<<endl;
			} 
			cout<<endl;
			return;
		}
		for (i=0;i<n;i++)
		{
		    x0[i]=x1[i];
			x1[i]=0;
		}
	}
	cout<<"Exceed the maximium iteration time"<<endl;
	for (i=0;i<n;i++)
	{ 
         cout<<"x"<<i<<" is: "<<x1[i];
	}
	cout<<endl;
}

void main(void)
{
	double a[N][N]={{78,-2,-12,-14},   //为克服C语言中输入浮点数的漏洞,这里采用先输大数后输小数的方式
	{-2,86,-4,6},
	{-12,-4,72,-8},
	{-14,6,-8,74}};
	double b[N]={76,8,112,68};
	double x0[N]={0,0,0,0};
	double tol=1e-2;
	int max=100,i,j;
	for(i=0;i<N;i++)
	{
		for(j=0;j<N;j++)
		{
			a[i][j]/=100;
		}
	}
	for (i=0;i<N;i++)
	{
		b[i]/=100;
	}
    JI(a,b,x0,tol,max,N);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -