收藏 分销(赏)

C++求矩阵的逆程序代码.doc

上传人:w****g 文档编号:10506796 上传时间:2025-05-31 格式:DOC 页数:3 大小:28.01KB
下载 相关 举报
C++求矩阵的逆程序代码.doc_第1页
第1页 / 共3页
C++求矩阵的逆程序代码.doc_第2页
第2页 / 共3页
点击查看更多>>
资源描述
求解逆矩阵源代码: #include <stdio.h> #include <stdlib.h> #include <math.h> #define TINY 1.0e-20 void inverse(double**,int); void ludcmp(double**, int, int*, double*); void lubksb(double**, int, int*, double*); double **matrix(int,int,int,int); double *vector(int,int); void free_matrix(double**,int,int,int,int); void free_vector(double*,int,int); void inverse(double **mat, int dim) { int i,j,*indx; double **y,d,*col; y = matrix(0,dim-1,0,dim-1); indx = (int *)malloc((unsigned)(dim*sizeof(int))); col = vector(0,dim-1); ludcmp(mat,dim,indx,&d); for (j=0;j<dim;j++) { for (i=0;i<dim;i++) col[i] = 0.0; col[j] = 1.0; lubksb(mat,dim,indx,col); for (i=0;i<dim;i++) y[i][j] = col[i]; } for (i=0;i<dim;i++) for (j=0;j<dim;j++) mat[i][j] = y[i][j]; free_matrix(y,0,dim-1,0,dim-1); free_vector(col,0,dim-1); free(indx); } void ludcmp(double **a, int n, int *indx, double *d) { int i,imax,j,k; double big,dum,sum,temp; double *vv; vv = (double*)malloc((unsigned)(n*sizeof(double))); if (!vv) { fprintf(stderr,"Error Allocating Vector Memory\n"); exit(1); } *d = 1.0; for (i=0;i<n;i++) { big = 0.0; for (j=0;j<n;j++) { if ((temp=fabs(a[i][j])) > big) big = temp; } if (big == 0.0) { fprintf(stderr,"Singular Matrix in Routine LUDCMP\n"); for (j=0;j<n;j++) printf(" %f ",a[i][j]); printf("/n"); exit(1); } vv[i] = 1.0/big; } for (j=0;j<n;j++) { for (i=0;i<j;i++) { sum = a[i][j]; for (k=0;k<i;k++) sum -= a[i][k] * a[k][j]; a[i][j] = sum; } big = 0.0; for (i=j;i<n;i++) { sum = a[i][j]; for (k=0;k<j;k++) sum -= a[i][k] * a[k][j]; a[i][j] = sum; if ((dum=vv[i]*fabs(sum)) >= big) { big = dum; imax = i; } } if (j != imax) { for (k=0;k<n;k++) { dum = a[imax][k]; a[imax][k] = a[j][k]; a[j][k] = dum; } *d = -(*d); vv[imax] = vv[j]; } indx[j] = imax; if (a[j][j] == 0.0) a[j][j] = TINY; if (j != n-1) { dum = 1.0 / a[j][j]; for (i=j+1;i<n;i++) a[i][j] *= dum; } } free(vv); } void lubksb(double **a, int n, int *indx, double *b) { int i,ip,j,ii=-1; double sum; for (i=0;i<n;i++) { ip = indx[i]; sum = b[ip]; b[ip] = b[i]; if (ii>=0) for (j=ii;j<i;j++) sum -= a[i][j] * b[j]; else if (sum) ii = i; b[i] = sum; } for (i=n-1;i>=0;i--) { sum = b[i]; for (j=i+1;j<n;j++) sum -= a[i][j] * b[j]; b[i] = sum / a[i][i]; } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服