資源簡介
利用初等行變換求解矩陣滿秩分解,可選擇由系統自動生成隨機矩陣或自行輸入待求解矩陣。
代碼片段和文件信息
#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;//判斷浮點數是否為零用
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本程序基本思想對[A?I]進行初等行變換,當A化為階梯陣C時I就成為B的逆矩陣.\n“);
}
int?choose(void)
{
int?opt;
printf(“\n請選擇是?1:自己輸入矩陣;2:系統隨機生成矩陣.選擇輸入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(“請輸入矩陣的行數:\n“);
scanf(“%d“&n);
fflush(stdin);
if(n<=0)
{
printf(“非法輸入!\n“);
exit(0);
}
return?n;
}
int?input_col(void)
{
int?n;
printf(“請輸入矩陣的列數:\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(“請輸入矩陣元素:\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(“隨機生成的矩陣為:\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
- 上一篇:C++二級考試試題含答案和解析
- 下一篇:MFC實現可拖動的按鈕
評論
共有 條評論