c语言求基本关联矩阵.docx_第1页
c语言求基本关联矩阵.docx_第2页
c语言求基本关联矩阵.docx_第3页
c语言求基本关联矩阵.docx_第4页
c语言求基本关联矩阵.docx_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

矿井通风网络论程序作业学 院: 矿业学院 专 业: 安全工程 姓 名: 雷斌 学 号: 1208010028 年 级: 2012 级 任课教师: 袁梅 2015年5 月 6 日这是个5,7图,以树T=e2,e4,e6,e7在前余树弦在后的顺序,求B1,Cf , Sf下面是我所写程序,(是用C语言写的)#include #include #include #include int m,n;double *a,*b11,*b12,*zb11,*zb12,*nzb12,*c12,*C,*AA,*B,*sf,*s11,*cf,*B1;double *Q,*Z;void Create_Omr(int m,int n);/创建原始矩阵变量函数void Free_mr();int brinv(double *a,int n);void brmul(double a, double b,int m,int n,int k,double c);void main()int i,j,M,k;int t=0;printf(输入m );scanf(%d,&m);printf(输入n );scanf(%d,&n);M=m-1;Create_Omr(m,n);/调用创建动态数组函数printf(输入起点Qn);for (i=0;in;i+)scanf(%lf,&Qi);printf(输入终点Zn);for (i=0;in;i+)scanf(%lf,&Zi);printf(n);for (i=0;im;i+)for (j=0;jn;j+)aij=0.0;/初始化a的值 全部置0 for(j=0;jn;j+) /求关联矩阵的过程 i=(int)Qj-1; aij=1; for(j=0;jn;j+) i=(int)Zj-1; aij=-1; printf(输出关联矩阵Bn); for(i=0;im;i+)for(j=0;jn;j+) printf(%3d,(int)aij);printf(n);printf(输入基本关联矩阵B); scanf(%d,&k);for(i=0;im-1;i+)/求基本关联矩阵Bk if(i=(k-1) for(j=0;jn;j+) B1ij=akj; t+; else for(j=0;jn;j+) B1ij=ai+tj;printf(输出基本关联矩阵B%dn,k);for(i=0;im-1;i+)for(j=0;jn;j+) printf(%3d,(int)B1ij);printf(n); for(i=0;im-1;i+)/求B11 for(j=0;jn-m+1;j+)b11ij=B1ij; for(i=0;im-1;i+)/求B12 for(j=n-m+1;jn;j+) b12ij-n+m-1=B1ij; for(i=0;im-1;i+)/求-ZB11 for(j=0;jn-m+1;j+) zb11ji=-(int)b11ij; for(i=0;im-1;i+)/求ZB12 for(j=0;jm-1;j+) zb12ji=b12ij; /*从这里开始把二维数组接入一位数组,(因为动态二维数组分配的内存空间不是连续的, 所以用 一个一维数组记录他的数据好传给逆矩阵的调用函数)*/for (i=0; im-1; i+)for(j=0;jm-1;j+)AAi*(m-1)+j=zb12ij;/这里必须给AA 和B赋值 我把zb12赋值给它们 不然是随机数Bi*(m-1)+j=zb12ij; i=brinv(AA,M);/求逆矩阵调用函数 k=0; for(i=0;im-1;i+)/把所求得逆矩阵,从新变成二维数组,方便C12的计算 for(j=0;jm-1;j+) nzb12ij=AAk; k+; for (i=0;in-m+1;i+)/这里必须给c12赋0,不然求不出c12 for (j=0;jm-1;j+) c12ij=0.0;for (i=0;in-m+1;i+)/求c12的过程,用循环语句来计算矩阵的乘法for (j=0;jm-1;j+)for (k=0;km-1;k+)c12ij=c12ij+zb11ik*nzb12kj;/矩阵的乘法 for(i=0;in-m+1;i+)/*求cf矩阵的过程*/ for(j=0;jn-m+1;j+) if(i=j)cfij=1.0;else cfij=0.0; for(i=0;in-m+1;i+) for(j=0;jm-1;j+) cfij+n-m+1=c12ij; printf(独立回路矩阵cf:n);/输出cf矩阵 for(i=0;in-m+1;i+) for(j=0;jn;j+) printf(%3d,(int)cfij); printf(n); for(i=0;in-m+1;i+)/求s11矩阵的过程 for(j=0;jm-1;j+) s11ji=-c12ij; for(i=0;im-1;i+)/求sf矩阵的过程 sfii+n-m+1=1; for(i=0;im-1;i+) for(j=0;jn-m+1;j+) sfij=s11ij; printf(独立割集矩阵sf:n); for(i=0;im-1;i+)/输出sf矩阵 for(j=0;jn;j+) printf(%3d,(int)sfij); printf(n); void Create_Omr(int m,int n)/创建各个矩阵 int i; printf(你输的是一个%d,%d图n,m,n); a=(double *)malloc(m*sizeof(double); b11=(double *)malloc(m-1)*sizeof(double); b12=(double *)malloc(m-1)*sizeof(double); zb11=(double *)malloc(n-m+1)*sizeof(double); zb12=(double *)malloc(m-1)*sizeof(double); C=(double *)malloc(m-1)*(m-1)*sizeof(double); B=(double *)malloc(m-1)*(m-1)*sizeof(double); AA=(double *)malloc(m-1)*(m-1)*sizeof(double); cf=(double *)malloc(n-m+1)*sizeof(double); sf=(double *)malloc(m-1)*sizeof(double); s11=(double *)malloc(m-1)*sizeof(double); B1=(double *)malloc(m-1)*sizeof(double); nzb12=(double *)malloc(m-1)*sizeof(double); c12=(double *)malloc(n-m+1)*sizeof(double); Q=(double *)malloc(n*sizeof(double); Z=(double *)malloc(n*sizeof(double);for(i = 0; i m; i+)ai = (double *)malloc(n * sizeof(double);/动态分配矩阵列数组for(i = 0; i m-1; i+)b11i = (double *)malloc(n-m+1) * sizeof(double);/动态分配矩阵列数组for (i=0;im-1;i+)b12i=(double *)malloc(m-1) * sizeof(double);/动态分配矩阵列数组zb12i=(double *)malloc(m-1) * sizeof(double);/动态分配矩阵列数组 nzb12i=(double *)malloc(m-1) * sizeof(double);/动态分配矩阵列数组 s11i= (double *)malloc(n-m+1) * sizeof(double);/动态分配矩阵列数组sfi=(double *)malloc(n * sizeof(double);/动态分配矩阵列数组B1i=(double *)malloc(n * sizeof(double);/动态分配矩阵列数组for (i=0;in-m+1;i+)zb11i=(double *)malloc(m-1) * sizeof(double);/动态分配矩阵列数组c12i=(double *)malloc(m-1) * sizeof(double);/动态分配矩阵列数组 cfi=(double *)malloc(n * sizeof(double);/动态分配矩阵列数组int brinv(double *a, int n)/求逆矩阵的函数 int *is,*js,i,j,k,l,u,v; double d,p; is=malloc(n*sizeof(double); js=malloc(n*sizeof(double); for (k=0; k=n-1; k+) d=0.0; for (i=k; i=n-1; i+) for (j=k; jd) d=p; isk=i; jsk=j; if (d+1.0=1.0) free(is); free(js); printf(err*not invn); return(0); if (isk!=k) for (j=0; j=n-1; j+) u=k*n+j; v=isk*n+j; p=au; au=av; av=p; if (jsk!=k) for (i=0; i=n-1; i+) u=i*n+k; v=i*n+jsk; p=au; au=av; av=p; l=k*n+k; al=1.0/al; for (j=0; j=n-1; j+) if (j!=k) u=k*n+j; au=au*al; for (i=0; i=n-1; i+) if (i!=k) for (j=0; j=n-1; j+) if (j!=k) u=i*n+j; au=au-ai*n+k*ak*n+j; for (i=0; i=0; k-) if (jsk!=k) for (j=0; j=n-1; j+) u=k*n+j; v=jsk*n+j; p=au; au=av; av=p; if (isk!=k) for (i=0; i=n-1; i+) u=i*n+k; v=i*n+isk; p=au; au=av; av=p; free(is); free(js); return(1); /注意,用malloc动态分配数组,本应该释放的,但为了程序短一点,所以就不释放了。不释放也不会影响程序的 我是用动态分配储存空间的方法分配二维数组的(也就是矩阵),所以写程序是通用的。可以求所有m,n 图(全过程不用改程序,求Bk也不用改),不只是5,7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论