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

📄 gauss比例消去法解线性方程组.txt

📁 数值分析程序
💻 TXT
字号:
#include <stdio.h>
#include <malloc.h>
#include <math.h>

int Gausscale(int n,float *matrix,float esp)
{
	float m,p,sum,*temp,*x,*max;            
	int i,j,k,s,add;                  //i,j,k,s为数组坐标和循环变量

	temp=(float *)malloc((n+1)*sizeof(float));      //交换行时使用的中间数组
	x=(float *)malloc(n*sizeof(float));          //存放x值
	max=(float *)malloc(n*sizeof(float));          //存放每行最大值


	for(i=0;i<n;i++)                  //总循环
	{	
		for(j=0;j<n;j++)              //求每行最大元放入max数组
			for(k=1;k<n;k++)
			{
				p=fabs(matrix[j*(n+1)+0]);
				if(p<fabs(matrix[j*(n+1)+k])) p=fabs(matrix[j*(n+1)+k]);
				max[j]=p;
			}
		for(k=0;k<n;k++)              //若max为0,返回
			if(max[k]<=esp)
			{
				free(temp);
				free(x);
				free(max);
				return 1;
			}


		s=i;
		p=fabs(matrix[i*(n+1)+i]/max[i]);
		for(j=i+1;j<n;j++)
		{
			if(p<fabs(matrix[j*(n+1)+i]/max[j])) 
			{
				p=fabs(matrix[j*(n+1)+i]/max[j]);
				s=j;
			}
		}
		if(s!=i)
			for(k=0;k<=n;k++)
			{
				temp[k]=matrix[s*(n+1)+k];
				matrix[s*(n+1)+k]=matrix[i*(n+1)+k];
				matrix[i*(n+1)+k]=temp[k];
			}


		if(fabs(matrix[i*(n+1)+i])<=esp)        //判0
		{
			free(temp);
			free(x);
			free(max);
			if(i==n-1) 	return 0;
				else return 1;
		}

		for(j=i+1;j<n;j++)                    //消去过程
		{
			m=matrix[j*(n+1)+i]/matrix[i*(n+1)+i];
			for(k=0;k<=n;k++)
				matrix[j*(n+1)+k]-=m*matrix[i*(n+1)+k];
		}
	}                                       //总循环结束


	printf("\nThe changed matrix is:\n\n");     //输出经变换后的矩阵
	for(i=0;i<n;i++)
		for(j=0;j<=n;j++)
		{
			printf("%f ",matrix[i*(n+1)+j]);
			if(j==n) printf("\n");
		}
	printf("\n");


	for(k=n-1;k>=0;k--)                        //求未知数x
	{
		sum=matrix[k*(n+1)+n];
		for(add=1;k+add<n;add++)
			sum-=matrix[k*(n+1)+k+add]*x[k+add];
		x[k]=sum/matrix[k*(n+1)+k];
	}


	printf("\nThe results of the equation are:\n\n");     //输出结果
	for(i=0;i<n;i++)
		printf("x%d=%f\n",i,x[i]);


	free(temp);
	free(x);
	free(max);
	return 2;
}        //Gausscale

void main()
{
	float *matrix,esp;
	int	i,n,sign;

	printf("Please input the number of vars of the equation: ");
	scanf("%d",&n);          //输入未知数个数

	matrix=(float *)malloc(n*(n+1)*sizeof(float));     //创建矩阵

	printf("\nPlease input the matrix:\n");
	for(i=0;i<n*(n+1);i++)
		scanf("%f",&matrix[i]);            //输入矩阵

	printf("\nPlease input the precision:\n");
		scanf("%f",&esp);                  //输入精度

	sign=Gausscale(n,matrix,esp);
	switch(sign)                    //根据返回值的不同,输出不同的信息        
	{
		case 0:printf("\nThere is no only result!\n\n");break;
		case 1:printf("\nIt's a invalid equation!\n\n");break;
		case 2:printf("\nThe results are printed!\n\n");
	}

	free(matrix);
}

⌨️ 快捷键说明

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