数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc

上传人:rrsccc 文档编号:9444716 上传时间:2021-02-26 格式:DOC 页数:35 大小:434KB
返回 下载 相关 举报
数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc_第1页
第1页 / 共35页
数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc_第2页
第2页 / 共35页
数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc_第3页
第3页 / 共35页
数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc_第4页
第4页 / 共35页
数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc》由会员分享,可在线阅读,更多相关《数据库与数据结构实验三电力网络信息存储及导纳矩阵的处理.doc(35页珍藏版)》请在三一文库上搜索。

1、数据结构与数据库实验 仅供参考实验三 电力网络信息存储及导纳矩阵处理实验名称: 电力网络信息存储及导纳矩阵处理 专 业: 电气工程 姓 名: 学 号: 电力网络信息存储及导纳矩阵处理一、 实验要求(1) 网络数据输入的内容包括节点信息和支路信息(2) 可适合任意规模的网络(3) 可查询节点、支路信息(根据节点名或支路名)(4) 形成导纳矩阵及输出(5) 导纳矩阵稀疏处理(6) 基于导纳矩阵的稀疏表示,获取 Yij(7) 测试数据IEEE 5 节点网络(8)选作内容IEEE 14 节点网络。二、 概要设计1采用的数据结构的定义及主要功能模块的功能: 在本实验中,导纳矩阵数据的输入采用文件流方式的

2、读方式建立,输出采用文件流写方式输出,导纳矩阵数据的存储采用邻接表存储方式。为了适合任意规模的网络,导纳矩阵的建立采用动态创建方式,存储的物理结构为非连续存储,稀疏矩阵的压缩处理采用邻接表和三元组。对于矩阵的存储节点类以及支路信息节点类采用结构体template struct BusNode和template structBranchNode 定义,节点链表类为template struct SBusNode,支路节点链表类template struct SBranchNode,稀疏矩阵三元组类templatestruct Twice,邻接表头指针节点类templatestruct YNode

3、,邻接表next域节点类templatestruct YYNode,以上全为结构体定义,方便调用,稀疏矩阵采用模板类template class Matrix。计算导纳模块牵涉到复数的运算,所以采用自定义复数类class Complex,并重载了+、+=、/、/=以及插入符等。 矩阵的建立分为节点信息矩阵的建立void CreatBusM(int n,int d,char*filename)和支路信息矩阵的建立void CreatBranchM(int n,int d,char*filename),相应的输出分为节点的输出void PrintBus()和支路信息的输出void PrintBra

4、nch(),输出的形式与文件中数据的存储形式类似。节点自导纳的创建分为稀疏矩阵的创建CreatSparseMatrix(int d)以及压缩矩阵的创建MatrixY(int d),导纳矩阵输出为复数的输出,在复数类中重载了输出符,ostream&operator(ostream& out,Complex&c) ,输出的形式分为两种,一种是矩阵形式输出,一种是只打印非零值的输出。 为了更好地体现类的封装性,在本实验中采用调用函数和执行函数分离的方式,可以使相关类的数据更加安全。如节点及支路信息的查询函数Search(),执行函数为支路查询函数void SearchBranch(int,int)和

5、节点查询函数void SearchBus(int i,SBusNode*BS),它们是私有函数,而在计算导纳时,真正的执行函数是void CaculateY(int,int),void Caculate()是用来调用它的接口函数。避免类的内容被篡改,使类的内容更加安全。、各个结构体及类的声明及其功能如下:1、节点模板:template struct BusNode/节点/I: 节点编号/Name:名称/Type:节点类型 1=PQ 2:PV 3:SlackBus/V: 电压幅值/cita:电压角度/LP: 负荷P/LQ: 负荷Q NameType name1;int I1;int type1;

6、BDataType V;BDataType cita1;BDataType LP;BDataType LQ;/BusNode*next;template struct SBusNode/节点结点链表DataType data;/节点编号BusNode*next; 2、支路节点模板:、template struct BranchNode/支路/*i: 支路的始端节点编号j: 支路的末端节点编号 Name:支路名称Type:类型, 2=变压器 1=线路R: 电阻X: 电抗B: 线路总电纳(pai型等值电路)K: 变压器非标准变比 */NameType name2;int I2;/行int J2;/

7、列int type2;BDataType R;BDataType X;BDataType B;BDataType K;/BranchNode*next;template struct SBranchNode/支路结点链表DataType data;/支路编号BranchNode*next;3、稀疏矩阵节点模板类templatestruct YYNode T C;int I3;int J3;/YYNode *next;/YYNode()J3=0;next=NULL;templatestruct YNodeDataType data;YYNode *next;4、三元组模板类templatestr

8、uct Twice/稀疏矩阵三元组类T data;int row,col;/行号列号;5、矩阵模板类:template class Matrix/稀疏矩阵private:Complex cc1414;SBranchNode*branch;/支路结点链表头指针SBusNode*bus;/节点结点链表头指针 YNode *y;/稀疏矩阵邻接表头结点Twice *aa;/压缩稀疏矩阵三元组/Twice *cc;/稀疏矩阵三元组int nn;/节点个数bool SearchBranch(int i,int j,SBranchNode*BS);/支路信息查询函数void SearchBus(int i,

9、SBusNode*BS);/节点信息查询函数Complex CaculateY(int,int);/导纳Yij的计算函数public:Matrix()Matrix() deletebus;deletebranch;/动态建立,要有自己的析构函数/BusNode SearchBus(int);/void SearchBranch(int,int);void CreatBusM(int n,int d,char*filename);/创建节点信息矩阵void CreatBranchM(int n,int d,char*filename);/创建支路信息矩阵void PrintBus();/输出接点

10、信息void PrintBranch();/输出支路信息void PrintY();/输出Yij的值void PrintSparseMatrix();/打印稀疏矩阵void Search();/查询函数 void MatrixY(int d);/邻接表void PrintSMatrix();/打印矩阵void PrintMatrix();/打印矩阵void Caculate();/计算导纳的接口函数void CreatSparseMatrix(int d);/创建导纳稀疏矩阵;6、复数类:class Complexpublic:double real;double image;Complex(

11、double r=0,double i=0)real=r;image=i;Complex() Complex operator+(Complex);Complex operator+(double);Complex operator=(Complex);Complex operator/(double);Complex operator/=(Complex);void Print(Complex);void Print0(Complex,Complex);friend ostream&operator(ostream& out,Complex&c);三、 详细设计1、各主要模块的流程图:(1)

12、文件流的读入: 从文件中依次读入节点或支路信息,每读入一组数据,建立一个邻接表节点,读入的数据和节点的数据域一一对应,最终生成存储了所有从文件读入的电力网的节点和支路信息的邻接表。文件流读入数据是否已读完否是动态创建邻接表头结点动态创建信息存储节点以编号的节点为头节点创建链表结束2、创建导纳稀疏矩阵:建立二维数组 初始化为零遍历支路信息的邻接表计算相应支路的导纳值存入数组3、稀疏矩阵的压缩处理:建立节点编号的头结点链表遍历支路信息的邻接表为相应的支路建立存储节点以相应的编号节点为头结点建立邻接表3、导纳计算:自导纳 i=j从支路信息邻接表获取数据数据将所有与i有关的互导纳相加,然后求其相反数,

13、即为自导纳互导纳 i!=j根据数据域的电阻、电抗,将阻抗求倒数转换为导纳判断支路数据域的变比K是否为零否将转换后的导纳值除以变比获得相应支路的导纳值四、 调试分析测试数据的输出结果:(1) 下图初始选择界面,可根据需要选择005或者014,或者终止。(2) 若输入除“a”、”b”、”$”以外的字符,系统提示错误,要求重新输入选择符。下图为输入“w”时的系统界面:(3) 输入a,选择005bus.txt 以及005branch.Txt打印005bus信息以及005branch信息打印导纳稀疏矩阵,并提示是否输出矩阵的非零值(4) 打印非零数据非零数据,包括自导纳和互导纳 (5) 查询:查询节点信

14、息或者支路信息输入节点超出范围,提示打印支路导纳值若支路不存在,提示打印支路信息输入支路两端节点号打印节点信息输入节点编号(6) 可以以“结束对005的查询,进入下一轮的选择,进入014打印014bus信息打印014branch的信息(7)打印导纳矩阵互导纳自导纳(9)查询节点和支路信息源程序: 主程序#include#include#include#includeMatrix.husing namespace std;void run()Matrix m;int i;i=m.SBalance();coutbalanceiendl; int n1=5;int n2=14;int d14=1,2

15、,3,4,5,6,7,8,9,10,11,12,13,14;int d5=1,2,3,4,5;char a;coutPlease choose the Matrix you want to check . 005 (a) OR 014 (b) endl;coutAlso this progess can be ended by entering $.a;while(a!=a& a!=b& a!=c)coutERROR.Please Try Again.endl;coutPlease choose the Matrix you want to check . 005 (a) OR 014 (b)

16、 .a;if(a=a|a=b)if(a=b)cout014busendl;m.CreatBusM(n2,d14,014bus.txt);m.PrintBus();cout014branch.txtendl;m.CreatBranchM(n2,d14,014branch.txt);m.PrintBranch();m.PrintMatrix();m.CreatSparseMatrix(d14); / m.CreatB1();coutB1:endl;m.PrintB1();coutB2:endl;m.PrintB2();/m.PrintSparseMatrix();char s1; coutPrin

17、t the non-zero value of the SparseMatrix. YES (y/Y) OR NOT (n/N).s1;if(s1=y|s1=Y) m.MatrixY(d14);m.Search();run();return ;if(a=a)cout005bus.txtendl;m.CreatBusM(n1,d5,005bus.txt);m.PrintBus();cout005branch.txtendl; m.CreatBranchM(n1,d5,005branch.txt);m.PrintBranch();m.CreatSparseMatrix(d14);m.PrintSM

18、atrix();coutB1:endl;m.PrintB1();coutB2:endl;m.PrintB2();/m.PrintSparseMatrix();coutPrint the non_zero value of the SparseMatrix. YES (y/Y) OR NOT (n/N).s2;if(s2=y|s2=Y) m.MatrixY(d5);m.Search();run(); return ; if(a=c) return;int main()run();return 0;头文件:#include#include#include#include#includeComple

19、x.husing namespace std;#define max 14;template struct BusNode/节点/I: 节点编号/Name:名称/Type:节点类型 1=PQ 2:PV 3:SlackBus/V: 电压幅值/cita:电压角度/LP: 负荷P/LQ: 负荷Q NameType name1;int I1;int type1;BDataType V;BDataType cita1;BDataType LP;BDataType LQ;/BusNode*next;template struct BranchNode/支路/*i: 支路的始端节点编号j: 支路的末端节点编

20、号Name:支路名称Type:类型,2=变压器 1=线路R: 电阻X: 电抗B: 线路总电纳(pai型等值电路)K: 变压器非标准变比 */NameType name2;int I2;/行int J2;/列int type2;BDataType R;BDataType X;BDataType B;BDataType K;/BranchNode*next;template struct SBusNode/节点结点链表DataType data;/节点编号BusNode*next;template struct SBranchNode/支路结点链表DataType data;/支路编号Branch

21、Node*next;templatestruct YYNode T C;int I3;int J3;/YYNode *next;/YYNode()J3=0;next=NULL;templatestruct YNodeDataType data;YYNode *next;templatestruct Twice/稀疏矩阵三元组类T data;int row,col;/行号列号;templatestruct BNodeT data;template class Matrix/稀疏矩阵private:Complex cc1414;SBranchNode*branch;/支路结点链表头指针SBusNo

22、de*bus;/节点结点链表头指针 YNode *y;/稀疏矩阵邻接表头结点Twice *aa;/压缩稀疏矩阵三元组 BNode *B1;BNode *B2;/Twice *cc;/稀疏矩阵三元组int nn;/节点个数bool SearchBranch(int i,int j,SBranchNode*BS);/支路信息查询函数void SearchBus(int i,SBusNode*BS);/节点信息查询函数Complex CaculateY(int,int);/导纳Yij的计算函数public:Matrix()Matrix() deletebus;deletebranch;/动态建立,要

23、有自己的析构函数/BusNode SearchBus(int);/void SearchBranch(int,int);void CreatBusM(int n,int d,char*filename);/创建节点信息矩阵void CreatBranchM(int n,int d,char*filename);/创建支路信息矩阵void PrintBus();/输出接点信息void PrintBranch();/输出支路信息void PrintY();/输出Yij的值void PrintSparseMatrix();/打印稀疏矩阵void Search();/查询函数 void MatrixY

24、(int d);/打印非零值void PrintSMatrix();/打印矩阵void PrintMatrix();/打印矩阵void Caculate();/计算导纳的接口函数void CreatSparseMatrix(int d);/创建导纳稀疏矩阵int SBalance();int SPQ(int);void CreatB1();void PrintB1();void PrintB2();template int Matrix:SBalance()int bal=0;BusNode*bb;int b;for(b=0;bnext;if(bb-type1=3)bal=bb-I1;retu

25、rn bal;template int Matrix:SPQ(int i)int pq=0;BusNode*bb;int b;for(b=0;bnext;if(bb-I1=i)pq=bb-type1;return pq;template void Matrix:Search()/查询节点、支路信息(根据节点名或支路名) coutSearch BUS (A/a) OR BRANCH (B/b) .Also this process can be ignored by entering .c;if(c=A |c=a)SBusNode*BS;BS=bus;int s;coutEnter the nu

26、mber of the buss;SearchBus(s,BS); Search();return;if(c=b|c=B)SBranchNode*BS;BS=branch;int i,j;coutEnter the number of the branchij;SearchBranch(i,j,BS);Search();return; else return;return;template void Matrix:CreatBusM(int n,int d,char*filename)BusNode*b;int k; NameType name;int i;int type;BDataType

27、 v;BDataType cita;BDataType lp;BDataType lq; ifstream infile(filename,ios:in); nn=n;bus=new SBusNodenn;for(k=0;kdata=dk;/coutinfile bustktdknext=NULL;infilenameitypevcitalplq;b=new BusNode;b-name1=name;/coutnametnameI1=i;/coutititype1=type;/couttypettypeV=v;/coutvtvcita1=cita;/coutcitatcitaLP=lp;/co

28、utlptlpLQ=lq;/coutlqtlqnext=b;/*b=new BusNode;b-name1=name; b-I1=i;b-type1=type;b-cita1=cita;b-LP=lp;b-LQ=lq;bus-next=b;*/return;template void Matrix:SearchBus(int i,SBusNode*bs)BusNode *BS;if(inn) coutOUT OF RANGEendl;else for(int k=0;knext;if(bs+k)-data=i) coutitnamettypetVtcitatLPtLQendl;coutendl

29、;coutI1tbus_name1ttype1tVtcita1tLPtLQendl;coutendl;return ;/couttemplate void Matrix:PrintBus()BusNode*BS;int k;coutitnamettypetVtcitatLPtLQendl;coutendl;for(k=0;knn;k+)/coutktknext;coutI1tbus_name1ttype1tVtcita1tLPtLQendl;coutendl;coutendl;return;template void Matrix:CreatBranchM(int n,int d,char*f

30、ilename)BranchNode*b;Complex c,a(0,0);/Complex cc1414;int k; NameType name;int i,j;int type;BDataType r;BDataType x;BDataType bb;BDataType kk; ifstream infile(filename,ios:in); nn=n;branch=new SBranchNodenn;/cc=new Twice*nn;/for(int r=0;rnn;r+)ar=new Complexnn;for(k=0;kdata=dk;/coutinfile bustktdknext=NULL;infileijnametyperxbbkk;b=new BranchNode;b-I2=i;/coutitiJ2=j;/coutjtjname2=name;/coutname

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1