資源簡(jiǎn)介
利用初等行變換求解矩陣滿秩分解,可選擇由系統(tǒng)自動(dòng)生成隨機(jī)矩陣或自行輸入待求解矩陣。
代碼片段和文件信息
#include?
#include?
#include?
#include?
void?info(void);
int?choose(void);
int?input_row(void);
int?input_col(void);
double**?input_matrix(int?rowint?col);
double**?rand_matrix(int?rowint?col);
double**?init_mat(double**?aint?rowint?col);
void?disp_aug_mat(double**?matint?rowint?col);
double**?elem_trans(double**?matint?rowint?col);
int?detect_zero(double**?aint?row);
double**?reg(double**?aint?rowint?col);
void?disp_trans_mat(double**?matint?rowint?col);
int?get_rank(double**?matint?rowint?col);
double**?get_c(double**?matint?rowint?colint?rank);
void?disp_c(double**?bint?rankint?col);
double**?init_b(double**?matint?rowint?col);
double**?get_inv(double**?matint?nint?rank);//n=rowb=mat
double?th=0.00000001;//判斷浮點(diǎn)數(shù)是否為零用
int?main(int?argcchar**?argv)
{
int?rowcoloptrank;
double**?a**mat**b**c;
info();
opt=choose();
row=input_row();
col=input_col();
switch(opt)
{
case?1:
a=input_matrix(rowcol);
break;
case?2:
a=rand_matrix(rowcol);
break;
}
mat=init_mat(arowcol);
????disp_aug_mat(matrowcol);
mat=elem_trans(matrowcol);
disp_trans_mat(matrowcol);
rank=get_rank(matrowcol);
c=get_c(matrowcolrank);
disp_c(crankcol);
b=init_b(?matrowcol);
b=get_inv(browrank);
system(“pause“);
return?0;
}
void?info(void)
{
printf(“\n本程序基本思想對(duì)[A?I]進(jìn)行初等行變換,當(dāng)A化為階梯陣C時(shí)I就成為B的逆矩陣.\n“);
}
int?choose(void)
{
int?opt;
printf(“\n請(qǐng)選擇是?1:自己輸入矩陣;2:系統(tǒng)隨機(jī)生成矩陣.選擇輸入1或2.\n“);
scanf(“%d“&opt);
fflush(stdin);
if(opt!=1&&opt!=2)
{
printf(“非法輸入!\n“);
exit(0);
}
return?opt;
}
int?input_row(void)
{
int?n;
printf(“請(qǐng)輸入矩陣的行數(shù):\n“);
scanf(“%d“&n);
fflush(stdin);
if(n<=0)
{
printf(“非法輸入!\n“);
exit(0);
}
return?n;
}
int?input_col(void)
{
int?n;
printf(“請(qǐng)輸入矩陣的列數(shù):\n“);
scanf(“%d“&n);
fflush(stdin);
if(n<=0)
{
printf(“非法輸入!\n“);
exit(0);
}
return?n;
}
double**?input_matrix(int?rowint?col)
{
int?ij;
double**?a;
a=new?double*[row];
for(i=0;i
a[i]=new?double[col];
printf(“請(qǐng)輸入矩陣元素:\n“);
for(i=0;i
for(j=0;j scanf(“%lf“&a[i][j]);
printf(“輸入的矩陣為:\n“);
for(i=0;i
for(j=0;j {
printf(“%10lf“a[i][j]);
if(j==col-1)
printf(“\n“);
}
return?a;
}
double**?rand_matrix(int?rowint?col)
{
int?ij;
double**?a;
a=new?double*[row];
for(i=0;i
a[i]=new?double[col];
srand(int(time(0)));
for(i=0;i
for(j=0;j {
a[i][j]=rand()%100;
}
printf(“隨機(jī)生成的矩陣為:\n“);
for(i=0;i
for(j=0;j {
printf(“%10lf“a[i][j]);
if(j==col-1)
printf(“\n“);
}
return?a;
}
double**?init_mat(double**?aint?rowint?col)
{
double**?mat;
int?ij;
mat=new?double*[row];
for(i=0;i
mat[i]=new?double[row+col];
for(i=0;i
for(j=0;j mat[i][j]=a[i][j
評(píng)論
共有 條評(píng)論