匆忙之下,帮朋友编了一道解线性代数的小程序,虽然很有局限性,但也倍感骄傲!(Ax=B。使用者自定义输入一个3阶方阵A和3*1的矩阵B,系统求出x。)见下:
#include
#include
int hls(float a[3][3]){
float i;
i=a[0][0]*a[1][1]*a[2][2] a[0][1]*a[2][0]*a[1][2]
a[0][2]*a[1][0]*a[2][1]-(a[0][2]*a[1][1]*a[2][0]
a[0][0]*a[2][1]*a[1][2] a[0][1]*a[1][0]*a[2][2]);
if(i==0.0) printf("无解");
return i;
}
void bsjz(float a[3][3],float A[3][3]){
A[0][0]=pow(-1,2)*(a[1][1]*a[2][2]-a[1][2]*a[2][1]);
A[1][0]=pow(-1,3)*(a[1][0]*a[2][2]-a[1][2]*a[2][0]);
A[2][0]=pow(-1,4)*(a[1][0]*a[2][1]-a[1][1]*a[2][0]);
A[0][1]=pow(-1,3)*(a[0][1]*a[2][2]-a[0][2]*a[2][1]);
A[1][1]=pow(-1,4)*(a[0][0]*a[2][2]-a[0][2]*a[2][0]);
A[2][1]=pow(-1,5)*(a[0][0]*a[2][1]-a[0][1]*a[2][0]);
A[0][2]=pow(-1,4)*(a[0][1]*a[1][2]-a[0][2]*a[1][1]);
A[1][2]=pow(-1,5)*(a[0][0]*a[1][2]-a[0][2]*a[1][0]);
A[2][2]=pow(-1,6)*(a[0][0]*a[1][1]-a[0][1]*a[1][0]);
}
void qj(float A[3][3],float b[3][1],float c[3][1]){
float sum;
int i,j,k;
for(i=0;i<3;i )
for(j=0;j<1;j ){
sum=A[i][0]*b[0][j];
for(k=1;k<3;k )
sum =A[i][k]*b[k][j];
c[i][j]=sum;
}
printf("结果为:(");
for(i=0;i<3;i )
for(j=0;j<1;j )
printf("%f ",c[i][j]);
printf(")T");
}
int main(){
float a[3][3],b[3][1],A[3][3],c[3][1],k;
printf("请输入矩阵A:\n");
int i,j;
for(i=0;i<3;i )
for(j=0;j<3;j )
scanf("%f",&a[i][j]);
printf("请输入矩阵B:\n");
for(i=0;i<3;i )
for(j=0;j<1;j )
scanf("%f",&b[i][j]);
k=hls(a);
bsjz(a,A);
for(i=0;i<3;i )
for(j=0;j<3;j )
A[i][j]=1/k*A[i][j];
qj(A,b,c);
}