资源简介

利用初等行变换求解矩阵满秩分解,可选择由系统自动生成随机矩阵或自行输入待求解矩阵。

资源截图

代码片段和文件信息

#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

评论

共有 条评论