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

📄 fullmainelemdele.cpp

📁 数值计算方法中几个重要的算法用VC++实现
💻 CPP
字号:
/*-完全主元素消去法-*/
#include<stdio.h>
#include<math.h>
#define N 10 /*-未知数最大数目-*/
double max(double a[][N+1],int k,int n,int *ik,int *jk)
{
	/*-用*ik和*jk返回最大值所在的行号和列号-*/
	int i,j;
	double maxValue;
	for(i=k;i<=n;i++)
	   for(j=k;j<=n;j++)
		   if(i==k&&j==k)
		   {
			   maxValue=a[i][j];
		       *ik=i;*jk=j;
		   }
		   else if(fabs(a[i][j])>fabs(maxValue))
		   {
			   maxValue=a[i][j];
			   *ik=i;*jk=j;
		   }
     return maxValue;
}/*-max-*/
int xmap(int origin[],int n,int row)
{ 
    /*-返回与xrow的映射-*/
	int i;
	for(i=1;i<=n;i++)
		if(origin[i]==row) return i;
}/*-xmap-*/
void main()
{
	int i,j,k,ik,n,jk,tcol;
	int origin[N+1];/*-原始未知数的顺序-*/
	double a[N+1][N+1],b[N+1],x[N+1],m,sum,temp;
	
	printf("Input n which is lower 10:");
	scanf("%d",&n);

    /*-对系数矩阵赋值-*/
	printf("Input Matrix of A:\n");
	for(i=1;i<=n;i++)
	   for(j=1;j<=n;j++)
		   scanf("%lf",&a[i][j]);

	/*-矩阵b进行赋值-*/
	printf("Input Matrix of b:\n");
	for(i=1;i<=n;i++)
		scanf("%lf",&b[i]);

    /*-对原始顺序进行记录-*/
	for(i=1;i<=n;i++)
		origin[i]=i;

    for(k=1;k<=n-1;k++)
	{
		max(a,k,n,&ik,&jk);
		if(ik!=k)          /*-交换行ik<-->k-*/
		{
			for(j=1;j<=n;j++)
			{
				temp=a[ik][j];
				a[ik][j]=a[k][j];
				a[k][j]=temp;
			}
			/*-交换b[ik]<-->b[k]-*/
			temp=b[ik];b[ik]=b[k];b[k]=temp;
			
		}
		if(jk!=k)         /*-交换列jk<--->k-*/
		{
			for(i=1;i<=n;i++)
			{ 
				temp=a[i][jk];
				a[i][jk]=a[i][k];
				a[i][k]=temp;
			}
			tcol=origin[jk];   /*-记录未知数的新位置-*/
			origin[jk]=origin[k];
			origin[k]=tcol;
		}
        for(i=k+1;i<=n;i++)   /*-消元计算-*/
		{
			m=a[i][k]/a[k][k];
			for(j=k+1;j<=n;j++)
				a[i][j]-=m*a[k][j];
			b[i]-=m*b[k];
		}
	}
	/*-进行回代-*/
	x[n]=b[n]/a[n][n];
	for(i=n-1;i>=1;i--)
	{
		sum=0;
		for(j=i+1;j<=n;j++)
			sum+=a[i][j]*x[j];
		x[i]=(b[i]-sum)/a[i][i];
	}
	/*-打印输出x1,x2,x3......xn-*/
	for(i=1;i<=n;i++)
	{
		j=xmap(origin,n,i);/*-求映射xi<-->xj-*/
		printf("x%d=%.8lf\n",i,x[j]);
	}
}

⌨️ 快捷键说明

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