📄 作业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 + -