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

📄 gauss-seidel.txt

📁 用Gauss-Seidel求线性方程组的解向量,并给出迭代次数和误差.
💻 TXT
字号:
#include<stdio.h>
#define MAX 10

double A[MAX][MAX];     //系数矩阵
double b[MAX];          //右端项
double x0[MAX];         //初始迭代向量
double x[MAX];          //迭代向量
double e;               //容许误差
int n;                  //A的阶数
int N;                  //最大迭代次数

double judge(double x[],double x0[])
{
	//计算 ||x-x0||^2
	double temp=0;
	for(int i=1;i<=n;i++)
		temp+=(x[i]-x0[i])*(x[i]-x0[i]);
	return temp;
}

void main()
{
	int i,j,k;
	
	//以下代码输入系数矩阵A,右端项b,初始迭代向量x0,容许误差e,最大迭代次数N
	printf("请输入系数矩阵A的阶数:");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		printf("请输入A的第%d行元素,各元素间以空格间隔:\n",i);
		for(j=1;j<=n;j++)
			scanf("%lf",&A[i][j]);
	}

	printf("输入右端项b,各元素间以空格间隔:\n");
	for(i=1;i<=n;i++)
	{
		scanf("%lf",&b[i]);
	}

	printf("输入初始迭代向量,各元素间以空格间隔:\n");
	for(i=1;i<=n;i++)
	{
		scanf("%lf",&x0[i]);
	}

	printf("输入容许误差:\n");
	scanf("%lf",&e);

	printf("输入最大迭代次数:\n");
	scanf("%d",&N);

	//以下代码为迭代运算
	for(k=1;k<=N;k++)
	{
		//第k次迭代
		for(i=1;i<=n;i++)
		{
			//计算x,这几行代码为程序的关键,也是与Jacobi迭代法不同之处
			x[i]=b[i];
			for(j=1;j<=i-1;j++)
				x[i]-=A[i][j]*x[j];
			for(j=i+1;j<=n;j++)
				x[i]-=A[i][j]*x0[j];
			x[i]=x[i]/A[i][i];
		}
		
		//以下四行代码输出每次迭代的信息,可以省略
		printf("第%d次迭代   ",k);
		for(i=1;i<=n;i++)
				printf("%lf ",x[i]);
		printf("\n");
		
		if(judge(x,x0)<e*e)
		{
			//判断是否满足要求
			printf("\n迭代向量的近似值为:\n");
			for(i=1;i<=n;i++)
				printf("%lf ",x[i]);
			return;
		}

		for(i=1;i<=n;i++)   //不满足要求,此时令x0=x,进行下次迭代
			x0[i]=x[i];
	}

	printf("迭代已超过最大次数!");
}

⌨️ 快捷键说明

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