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

📄 作业linear.cpp

📁 LINEAR求解
💻 CPP
字号:
//*计011李林宏2001041143--用linear求线形方程的解*//
#include"stdio.h"
#include"iostream.h"
#include"math.h"
typedef  float ELEMTYPE;
#define N 4
void FindSolution(ELEMTYPE a[][N+1])
{
    int i,p,j;
	ELEMTYPE value;
	ELEMTYPE x[N];
	int n;
	int NROW[N];
	for(i=0;i<N;i++)
		NROW[i]=i;
	for(i=0;i<N;i++)
	{
	    p=i;
	    do
		{
		   if(a[p][i]!=0)
		      break;
		   p++;
		}while(p<N);
	    if(p==N)
	    {
	      printf("No Unique solution exists!\n");
	      return ;
	    }
	    if(p!=i)
		{
		  int temp;
	      temp=NROW[i];
	      NROW[i]=NROW[p];
	      NROW[p]=temp;
	    }
	    for(j=i+1;j<N;j++)
	    {
	        value=a[NROW[j]][i]/a[NROW[i]][i];
	   
	        for(n=0;n<=N;n++)
			{
		        a[NROW[j]][n]=a[NROW[j]][n]-value*a[NROW[i]][n];
			}
	    }
	}
	if(a[NROW[N-1]][N-1]==0)
	{
		printf("No Unique solution exists!\n");
			return ;
	}
	for(i=0;i<N;i++)
	   for(j=0;j<=N;j++)
	   {
		   cout<<a[NROW[i]][j]<<"\t";
	       if(j==N)
	       cout<<endl;
	   }
	x[N-1]=a[NROW[N-1]][N]/a[NROW[N-1]][N-1];

	for(i=N-2;i>=0;i--)  //n=4 i=2
	{
	 	value=0;             //i=1;j=2....3;value
		for(j=i+1;j<N;j++)  //j=3
		{
			value+=a[NROW[i]][j]*x[j];//a[2][3]
			
		}
		x[i]=(a[NROW[i]][N]-value)/a[NROW[i]][i];//x[2]=(a[2][4]-value)/a[2][2]
	}
	cout<<"the solution is:[";
	for(i=0;i<N;i++)
	{
        if(i==N-1)
		{
			cout<<x[i]<<"]"<<endl;
			break;
		}
		cout<<x[i]<<",";
	}
}

void FindSolutionChange(ELEMTYPE a[][N+1])
{

	int i,p,j,m;
	ELEMTYPE value;
	int n;
	for(i=0;i<N;i++)
	{
	    p=i;
	    do
		{
		   if(a[p][i]!=0)
		      break;
		   p++;
		}while(p<N);
	    if(p==N)
	    {
	      printf("No Unique solution exists!\n");
	      return ;
	    }
	    if(p!=i)
	    for(m=0;m<=N;m++)
	    {
		  ELEMTYPE temp;
	      temp=a[i][m];
	      a[i][m]=a[p][m];
	      a[p][m]=temp;
	    }
	    for(j=i+1;j<N;j++)
	    {
	        value=a[j][i]/a[i][i];
			if(a[j][i]==0)
				continue;
	        for(n=0;n<=N;n++)
			{
		        a[j][n]=a[j][n]-value*a[i][n];
			}
	    }
	}
    for(i=N-1;i>=0;i--)
	{
	    for(j=i-1;j>=0;j--)
	    {
	        value=a[j][i]/a[i][i];
			if(a[j][i]==0)
			{
				printf("continue");
				break;
			}
	        for(n=0;n<=N;n++)
			{
		        a[j][n]=a[j][n]-value*a[i][n];
			}
	    }
	}
	if(a[N-1][N-1]==0)
	{
		printf("No Unique solution exists!\n");
			return ;
	}
	for(i=0;i<N;i++)
	   for(j=0;j<=N;j++)
	   {
	       printf("%4.0f",a[i][j]);
	       if(j==N)
	       printf("\n");
	   } 
	printf("the solution is :x=[");
	for(i=0;i<N;i++)
	{
        if(i==N-1)
		{
			cout<<a[i][N]/a[i][i]<<"]"<<endl;
			break;
		}
		cout<<a[i][N]/a[i][i]<<",";
		
	}
	
}
void FindSolutionPri(ELEMTYPE a[N][N+1])
{
	 
	int i,j,k,p;
	ELEMTYPE Max=0;
	ELEMTYPE value;
    ELEMTYPE temp;	
	for(i=0;i<N;i++)
	{
		for(j=i;j<N;j++)
		{
			if(Max<(float)fabs(a[j][i]))
			{
				Max=(float)fabs(a[j][i]);//printf("max--->%0.0f\t%d\n",Max,j);
				p=j;
			} 
		}
		if(Max==0)
		{
			printf("Max=0 No Unique solution exists!\n");
			return ;
		}
		if(i!=p)
		{
		  for(j=i;j<=N;j++)
		  {
				temp=a[i][j];
                a[i][j]=a[p][j];
			    a[p][j]=temp;
		  }
		}
	    for(j=i+1;j<N;j++)
	    {
		   value=a[j][i]/a[i][i];
		   for(k=0;k<=N;k++)
		      a[j][k]=a[j][k]-value*a[i][k];
		}
	}
    for(i=0;i<N;i++)
	    for(j=0;j<=N;j++)
		{
	       printf("%0.0f\t",a[i][j]);
	       if(j==N)
	       printf("\n");
		}
	 
	if(a[N-1][N-1]==0)
    {
		printf("No Unique solution exists!\n");
		return ;
	}
	ELEMTYPE x[N];
	x[N-1]=a[N-1][N]/a[N-1][N-1];
	for(i=N-2;i>=0;i--)  //n=4 i=2
	{
	 	value=0;             //i=1;j=2....3;value
		for(j=i+1;j<N;j++)  //j=3
		{
			value+=a[i][j]*x[j];//a[2][3]
			
		}
		x[i]=(a[i][N]-value)/a[i][i];//x[2]=(a[2][4]-value)/a[2][2]
	}
    printf("the solution is :x=[");
	for(i=0;i<N;i++)
	{
        if(i==N-1)
		{
			printf("%0.0f]",x[i]);
			break;
		}
		cout<<x[i]<<",";
	}
}
void FindSolutionPriPro()
{
	 ELEMTYPE  a[4][5]={1,1,0,1,2,
		             2,1,-1,1,1,
		            -1,2,3,-1,4,
		            3,-1,-1,2,-3};
	int NROW[N];
	int i,j,k,p;
	ELEMTYPE Max=0;
	ELEMTYPE value;
	for(i=0;i<N;i++)
		NROW[i]=i;
	for(i=0;i<N;i++)
	{
		for(j=i;j<N;j++)
		{
			if(Max<fabs(a[NROW[j]][i])&&j<N)
			{
				Max=(float)fabs(a[NROW[j]][i]);
				p=j;
			} 
		}
		if(a[NROW[p]][i]==0)
		{
			printf("No Unique solution exists!\n");
			return ;
		}
		if(NROW[i]!=NROW[p])
		{
			int temp;
			temp=NROW[i];
            NROW[i]=NROW[p];
			NROW[p]=temp;
		}
	
	    for(j=i+1;j<N;j++)
	    {
		   ELEMTYPE value=a[NROW[j]][i]/a[NROW[i]][i];
		   for(k=0;k<=N;k++)
		      a[NROW[j]][k]=a[NROW[j]][k]-value*a[NROW[i]][k];
		 }
		
       }
      
	if(a[NROW[N-1]][N-1]==0)
    {
		printf("No Unique solution exists!\n");
		return ;
	}
	ELEMTYPE x[N];
	x[N-1]=a[NROW[N-1]][N]/a[NROW[N-1]][N-1];
	for(i=N-2;i>=0;i--)
	{
		value=0;
		for(j=i+1;j<N;j++)
			value+=a[NROW[i]][j]*x[j];
		x[i]=(a[NROW[i]][N]-value)/a[NROW[i]][i];
	}
    printf("the solution is :x=[");
	for(i=0;i<N;i++)
	{
        if(i==N-1)
		{
			printf("%0.0f]\n",x[i]);
			break;
		}
		printf("%0.0f,",x[i]);
	}
}
void FindPri()
{
	 ELEMTYPE  a[4][5]={1,1,0,1,2,
		             2,1,-1,1,1,
		            -1,2,3,-1,4,
		            3,-1,-1,2,-3};
	int NROW[N];
	int i,j,k,p;
	ELEMTYPE Max=0;
	ELEMTYPE value;
	ELEMTYPE s[N];
	for(i=0;i<N;i++)
	{
		Max=0;
		for(j=0;j<N;j++)
			if(Max<fabs(a[i][j]))
				Max=(ELEMTYPE)fabs(a[i][j]);
		s[i]=Max;
		if(Max==0)
		{
			printf("No Unique solution exists!\n");
			return ;
		}
		NROW[i]=i;
	}
	for(i=0;i<N;i++)
	{
		Max=0;
		for(j=i;j<N;j++)
		{
			if(Max<fabs(a[NROW[j]][i]/s[NROW[j]]))
			{
				Max=(ELEMTYPE)fabs(a[NROW[j]][i]/s[NROW[j]]);
				p=j;
			}
		}
	    if(NROW[i]!=NROW[p])
		{
			int temp;
			temp=NROW[i];
            NROW[i]=NROW[p];
			NROW[p]=temp;
		}
	
	    for(j=i+1;j<N;j++)
	    {
		   ELEMTYPE value=a[NROW[j]][i]/a[NROW[i]][i];
		   for(k=0;k<=N;k++)
		      a[NROW[j]][k]=a[NROW[j]][k]-value*a[NROW[i]][k];
		 }
		
	}
	 
	if(a[NROW[N-1]][N-1]==0)
    {
		printf("No Unique solution exists!\n");
		return ;
	}
	ELEMTYPE x[N];
	x[N-1]=a[NROW[N-1]][N]/a[NROW[N-1]][N-1];
	for(i=N-2;i>=0;i--)
	{
		value=0;
		for(j=i+1;j<N;j++)
			value+=a[NROW[i]][j]*x[j];
		x[i]=(a[NROW[i]][N]-value)/a[NROW[i]][i];
	}
    printf("the solution is :x=[");
	for(i=0;i<N;i++)
	{
        if(i==N-1)
		{
			cout<<x[i]<<"]"<<endl;
			break;
		}
		cout<<x[i]<<",";
	}
}
main()
{   
    float  a[4][5]={1,1,0,1,2,
		             2,1,-1,1,1,
		            -1,2,3,-1,4,
		            3,-1,-1,2,-3};
	float b[4][5]={1,-0.5,1,0,4,
		           2,-1,-1,1,5,
				   1,1,0,0,2,
				   1,-0.5,1,1,5};
	float c[3][4]={2,-3,2,5,
		         -4,2,-6,14,
				 2,2,4,8};
	float d[3][4]={0,1,1,6,
		           1,-2,-1,4,
				   1,-1,1,5};
	FindSolution(a);
	cout<<endl;
    FindSolutionChange(a);
   printf("\n");
   FindPri();
   cout<<endl;
   FindSolutionPri(a);
   cout<<endl;
   FindSolutionPriPro();
   return 1;
}




⌨️ 快捷键说明

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