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

📄 jacobi.c

📁 雅克比迭代:线性代数方程组的迭代法与直接方法不同
💻 C
字号:
#define N 3
#define M 100
#include<stdio.h>
#include<math.h>
main()
{
int i,j,k,h;
double a[N][N]={{1,2,-2},{1,1,1},{2,2,1}},b[N]={1,1,1},t[N]={0,0,0},x[N],e=0.01,s;
double f(double t[N],double x[N]);
/*
printf("e=");
scanf("%f",&e);
printf("\n");


for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
	printf("a[%d][%d]=",i,j);
	scanf("%f",&a[i][j]);
}
printf("\n");
}

for(i=0;i<N;i++)
{
	printf("b[%d]=",i);
	scanf("%f",&b[i]);
	printf("\n");
}

for(i=0;i<N;i++)
{
	printf("t[%d]=",i);
	scanf("%f",&t[i]);
	printf("\n");
}
*/
for(i=0;i<N;i++)
x[i]=t[i];

for(k=0;k<M;k++)
{
	for(i=0;i<N;i++)
	{
		for(j=0,s=0;j<N;j++)
		{
			if(j!=i)
				s=s+a[i][j]*x[j];
			else
				continue;
		}
		t[i]=(b[i]-s)/a[i][i];
	}
	if(f(t,x)<e)
	{
		for(i=0;i<N;i++)
			printf("t[%d]=%f\n",i,t[i]);
		h=1;
		break;
		
	}
	else
	{
		h=0;
		for(i=0;i<N;i++)
			x[i]=t[i];
	}
}
printf("k=%d\n",k);
if(h==0)
printf("超过最大迭代次数\n");
}

double f(double t[N],double x[N])
{
	int i;
	float m=fabs(x[0]-t[0]);
	for(i=1;i<N;i++)
	{
		if(m<fabs(x[i]-t[i]))
			m=fabs(x[i]-t[i]);
		else continue;
	}
	return(m);
}

⌨️ 快捷键说明

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