在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
function qiuni =INV_GET(a) 参考的c语言程序和注释 #include<stdio.h> #include<math.h> long int const N=1000; //定义矩阵最大为1000阶 int n; //n表示矩阵的行数和列数。 double juzhen[N][N]; //定义一个1000阶矩阵 double danwei[N][N]; //定义一个单位矩阵 bool zhaozuidazhi(int s)//定义一个布尔型从s行到n行选择最大的元素作为主元的函数。 { int i,j,A; double mas,temp; //temp为中间变量,实现行交换 mas=fabs(juzhen[s][s]); //数学函数:fabs 功能:求浮点数juzhen[s][s]的绝对值 //计算juzhen[s][s], 当juzhen[s][s]不为负时返回juzhen[s][s],否则返回-juzhen[s][s] A=s; for(i=s+1;i<n;i++) { if(mas<fabs(juzhen[i][s])) { mas=fabs(juzhen[i][s]); A=i; } } if(mas==0) return false; //交换两行 for(j=0;j<n;j++) { temp=juzhen[s][j]; juzhen[s][j]=juzhen[A][j]; juzhen[A][j]=temp;
temp=danwei[s][j]; danwei[s][j]=danwei[A][j]; danwei[A][j]=temp; } return true; } void jisuan(int s) //消元计算 { int i,j; double mas=juzhen[s][s],r; for(i=s+1;i<n;i++) { r=juzhen[i][s]/mas; for(j=0;j<n;j++) { //利用消元计算方阵使之成为上三角矩阵,最后使主对角线上的元素相乘就是最终结果 juzhen[i][j]=juzhen[i][j]-juzhen[s][j]*r; danwei[i][j]=danwei[i][j]-danwei[s][j]*r; } } } void HH(int s) { int i,j; double mas; mas=juzhen[s][s]; for(i=s;i<n;i++) juzhen[s][i]=juzhen[s][i]/mas; for(i=0;i<n;i++) danwei[s][i]=danwei[s][i]/mas; for(i=s-1;i>=0;i--) { mas=juzhen[i][s]; juzhen[i][s]=0; for(j=0;j<n;j++) danwei[i][j]=danwei[i][j]-mas*danwei[s][j]; } } int main() { int i,j; zl: printf("第一行输入矩阵的阶数,然后回车输入原始矩阵:\n"); scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) danwei[i][j]=1; else danwei[i][j]=0; scanf("%lf",&juzhen[i][j]);//C语言的函数参数是传值而不是传引用的, //通常函数无法修改和操作参数.scanf可以修改参数的原因是传给scanf的 // 那个参数是一个指针,scanf通过传过来的指针来修改指针指向的内容。所以, //把x取地址再传过去。&是取juzhen[i][j]的地址,%lf是说juzhen[i][j]是一个双精度浮点型. } }
//将原始矩阵转成上三角矩阵 for(i=0;i<n-1;i++) { //每一次选一个绝对值最大的值作为a[i]即主元 if(zhaozuidazhi(i)) //函数调用 { jisuan(i); //函数调用
} else { printf("该矩阵不可逆");//高斯消去法不能将原始矩阵化为三角形的格式, //那就代表原始矩阵是一个不可逆的矩阵, return 0; } } //将原始矩阵转化成单位矩阵 for(i=n-1;i>=0;i--) { HH(i); } printf("\n原始矩阵的逆矩阵为:\n");//输出逆矩阵语句 for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%.2lf ",danwei[i][j]);//%.2lf在printf()里表示按下面格式 // 输出一个long double型数:整数部分输出全部输出小数部分输出2位, //没有小数的输出两个0,不足两位的后面补0,大于两位的截短到两位。 //测试结果会出现两位小数
printf("\n"); } goto zl; } |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论