利用稀疏矩阵的程序(完整版)实用资料

上传人:壹****1 文档编号:558385330 上传时间:2023-05-11 格式:DOC 页数:30 大小:965.04KB
返回 下载 相关 举报
利用稀疏矩阵的程序(完整版)实用资料_第1页
第1页 / 共30页
利用稀疏矩阵的程序(完整版)实用资料_第2页
第2页 / 共30页
利用稀疏矩阵的程序(完整版)实用资料_第3页
第3页 / 共30页
利用稀疏矩阵的程序(完整版)实用资料_第4页
第4页 / 共30页
利用稀疏矩阵的程序(完整版)实用资料_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《利用稀疏矩阵的程序(完整版)实用资料》由会员分享,可在线阅读,更多相关《利用稀疏矩阵的程序(完整版)实用资料(30页珍藏版)》请在金锄头文库上搜索。

1、利用稀疏矩阵的程序(完整版)实用资料(可以直接使用,可编辑 完整版实用资料,欢迎下载)#define R 1#define G 2#define VS 3#define CS 4#define VCCS 5#define VCVS 6#define CCCS 7#define CCVS 8#define OPAMP 9typedef struct tagBranchint number; /支路号char type; /类型号int nfrom; /始节点int nto; /终节点float value; /参数值int ncfrom; /控制始节点/控制终节点;G/R支路的“设置为电压定义支

2、路”标记int ncto; /控制终节点;G/R支路的“控制用电压定义支路”标记 BRANCH;BRANCH Branch0; *BRANCH;Branch = new BRANCHBranchNumber+1;int BranchNumber;int NodeNumber;int vBranchNumber;int NN;double valNN;int rowNN;int colNN;int upNN;int downNN;int leftNN;int rightNN;int rpNN;int cpNN;int delNN;int nza;int n;typedef struct tagL

3、INKED_LISTint nza; /非零元素个数int n; /矩阵阶数int *row; /元素行号int *col; /元素列号int *up; /元素的上邻元素号int *down; /元素的下邻元素号int *left; /元素的左邻元素号int *right; /元素的右邻元素号int *rp; /行链指针int *cp; /列链指针 char *del; /元素删除标志;1=删除 LINKED_LIST;typedef struct tagTRIANGULAR_TABLEint nza; /非零元素个数int n; /矩阵阶数double *val; /矩阵及右端向量/中间解向

4、量元素值int *roco; /对角元素行列号,U元素列号,L元素行号int *urp; /U阵行指针int *lcp; /L阵列指针int lun; /由符号LU分解确定的需修正的元素个数int fen; /由符号前消确定的需修正的向量元素个数int *lup; /由符号LU分解确定的需修正的元素号int *fep; /前消需修正的元素号 TRIANGULAR_TABLE;typedef struct tagTRIANGULAR_TABLE_Cint nza;int n;int lun;int fen;double *vre;double *vim;int *roco;int *urp;in

5、t *lcp;int *lup;int *fep; tagTRIANGULAR_TABLE_C;#include XISHU.h/创建双重链接表void new_list(int rank_max,int nonzero,LINKED_LIST *list)row=new intnonzero;col=new intnonzero;up=new intnonzero;down=new intnonzero;left=new intnonzero;right=new intnonzero;rp=new intrank_max;cp=new intrank_max;del=new int nonz

6、ero;nza=0; /创建时尚无元素int i;for(i=0;irank_max;i+) /初始化rpi=0;cpi=0;for(i=0;irpx=nza; (*list)-leftnza=0; (*list)-rightnza=0; return(0); /成功插入 for(;) /搜索第x行非零元素 z=(*list).colk; /axy为非零元素 if(yleftnza=0; (*list)-rightnza=k; (*list)-leftk=nza; (*list)-rpx=nza; else /nza在kl和k之间 (*list)-leftnza=kl; (*list)-rig

7、htnza=k; (*list)-leftk=nza; (*list)-rightk=nza; return(0); else if(yz) /nza在k右 kl=(*list).rightk; if(kl=0) /k为原行尾,nza在其中,为新行尾 (*list)-rightnza=0; (*list)-rightk=nza; (*list)-leftnza=k; return(0); k=kl; /右边还有非零元素,继续向右搜索 continue; else /y=z,axy已存在 return(1); /已有,未插入 /-char insert_col(int nza,int x,int

8、 y,LINKED_LIST *list)int k,kl,z;k=(*list).cpy;if(k=0) /第y列还未有非零元素,axy为第一个元素(*list)-cpy=nza;(*list)-upnza=0;(*list)-downnza=0;return(0); /成功插入for(;) /搜索第y列非零元素z=(*list).rowk; /axy为非零元素if(xupnza=0;(*list)-downnza=k;(*list)-upk=nza;(*list)-cpx=nza;else /nza在kl和k之间(*list)-upnza=kl;(*list)-downnza=k;(*li

9、st)-upk=nza;(*list)-downk=nza;return(0);else if(xz) /nza在k下kl=(*list).downk;if(kl=0) /k为原列尾,nza在其下,为新列尾(*list)-downnza=0;(*list)-downk=nza;(*list)-upnza=k;return(0);k=kl; /下面还有非零元素,继续向下搜索continue; else /x=z,axy已存在return(1); /已有,未插入 /-/在双链接表list所描述的稀疏矩阵行链中,插入元素axy,返回其标/号;如果未插入,返回0int insert_ele(int x

10、,int y,LINKED_LIST *list)int k,kl,z,nza;nza=(*list).nza;nza+;if(insert_row(nza,x,y,list)=1) return(0); /插入行链,如果已有,则不插入insert_col(nza,x,y,list); /插入列链(*list).delnza=0;(*list).rownza=x;(*list).colnza=y;(*list).nza=nza;return(nza);/-/创建三角形表结构变量void new_table(int rank_max,int nonzero,TRIANGULAR_TABLE *table) /生成三角形表结构table,最大阶数为rank_max,非零元素数为nonzeroint i,non;(*table).val=new doublenonzero

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号