東南大學(xué)數(shù)據(jù)結(jié)構(gòu)實驗報告電氣工程學(xué)院王磊實驗三_第1頁
東南大學(xué)數(shù)據(jù)結(jié)構(gòu)實驗報告電氣工程學(xué)院王磊實驗三_第2頁
東南大學(xué)數(shù)據(jù)結(jié)構(gòu)實驗報告電氣工程學(xué)院王磊實驗三_第3頁
東南大學(xué)數(shù)據(jù)結(jié)構(gòu)實驗報告電氣工程學(xué)院王磊實驗三_第4頁
東南大學(xué)數(shù)據(jù)結(jié)構(gòu)實驗報告電氣工程學(xué)院王磊實驗三_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、導(dǎo)納矩陣的處理侯創(chuàng) 16010131 2012/11/23一 需求分析1. 程序功能讀取任意規(guī)模大小的節(jié)點與線路矩陣,讀取各個數(shù)據(jù),對數(shù)據(jù)這個數(shù)據(jù)組進行分析求解,進而求出導(dǎo)納矩陣,并提供對于支路的查找功能。2. 輸入輸出要求為測試方便,本測試程序已在main函數(shù)中將所有需要測試的數(shù)據(jù)寫入,直接運行即可。節(jié)點導(dǎo)納矩陣采用的儲存方式為稀疏矩陣常用的3元組儲存方式,并提供全矩陣顯示。3. 測試數(shù)據(jù)見工程文件夾內(nèi)部4個txt文件二 概要設(shè)計1. 數(shù)據(jù)結(jié)構(gòu)1) 數(shù)據(jù)讀取部分采用struct結(jié)構(gòu)體形式讀取數(shù)據(jù),并將讀取數(shù)據(jù)顯示。2) Struct bus 結(jié)構(gòu)體 元素包含所有bus內(nèi)元素 3) Struc

2、t branch 結(jié)構(gòu)體內(nèi)部 除branch數(shù)據(jù)外包含作者設(shè)計為了計算導(dǎo)納矩陣的三個數(shù)據(jù),分別為支路前測接地導(dǎo)納,支路導(dǎo)納,和后側(cè)接地導(dǎo)納。4) 整體存儲使用鄰接表,每個節(jié)點都作為一個頭結(jié)點,向下分別鏈表指向所關(guān)聯(lián)的節(jié)點,同時在下一個節(jié)點存儲節(jié)點和支路數(shù)據(jù)。2. 各個模塊1) 讀取數(shù)據(jù)模塊,包括函數(shù)read_bus和read_branch.2) 尋找模塊。包括search_branch和search_bus3) 處理模塊函數(shù)胃藥分為處理支路導(dǎo)納,和統(tǒng)計節(jié)點自導(dǎo)納,統(tǒng)計節(jié)點互導(dǎo)納。4) 并形成稀疏矩陣的三元組。3. 模塊關(guān)系讀取模塊尋找模塊圖處理模塊稀疏矩陣處理模塊導(dǎo)納計算三 詳細設(shè)計1. 讀取

3、數(shù)據(jù)對于節(jié)點矩陣與支路矩陣,因數(shù)據(jù)格式已經(jīng)知道,所以設(shè)置結(jié)構(gòu)體,對于多節(jié)點數(shù)據(jù)以結(jié)構(gòu)體接受數(shù)據(jù),已結(jié)構(gòu)體數(shù)組存儲。比較簡單不再詳述。2. 尋找模塊因數(shù)據(jù)已經(jīng)讀取進入,所以要求用戶輸入節(jié)點或者支路名稱,進行尋找,找到返回節(jié)點或者支路數(shù)據(jù),如未找到,返回該元素不存在。3. 圖的生成所有節(jié)點數(shù)據(jù)與支路數(shù)據(jù)均 存儲在結(jié)構(gòu)體數(shù)組中,所以構(gòu)成圖,我采用鄰接表生成方法,所有頭結(jié)點僅存儲節(jié)點,每個頭結(jié)點形成鏈表,每個鏈表的每個子節(jié)點里面包含節(jié)點數(shù)據(jù)和支路數(shù)據(jù)。便于數(shù)據(jù)分析。與導(dǎo)納矩陣形成4. 計算導(dǎo)納矩陣1) 首先計算各個支路的前接地導(dǎo)納,后接地導(dǎo)納,連接導(dǎo)納,2) 在計算各個連接支路導(dǎo)納3) 將形成的導(dǎo)納存

4、儲至三元組數(shù)組。 矩陣輸出與字符尋找 因三元組生成時未使用順序方法放入,如采用pos num方法,寫尋找函數(shù)。那么就需要將三元組二維排序,較為冗雜,所以本程序采用普通的順序查找的方法,因本身為稀疏矩陣所以,復(fù)雜度很低。四 調(diào)試分析1. 遇到問題主要為一些語法錯誤,按照編譯器提示修改即可2. 算法復(fù)雜度圖的生成時間復(fù)雜度O(n2)空間復(fù)雜度O(n2)圖的搜尋時間復(fù)雜度O(n)計算函數(shù)時間復(fù)雜度O(n2)五 使用說明及測試結(jié)果1. 本程序為避免操作錯誤,已經(jīng)將所有檢測項目內(nèi)嵌于主程序內(nèi),觀察即可得結(jié)果2. 可按照提示,按任意鍵,進行程序運行即可。3. 5節(jié)點矩陣,對于程序的每一部分均有詳細介紹,對

5、于14節(jié)點矩陣,僅是將3元組輸出。六 源程序 類的頭文件#include<string>#include <iostream>using namespace std;struct elem/虛數(shù)結(jié)構(gòu)體float real;float image;struct branch/支路結(jié)構(gòu)體int Former; int Next;string Name; int Type;float R;float X;float B;float K;elem front0;/前對地導(dǎo)納elem linked;/連接導(dǎo)納elem lated0;/后對地導(dǎo)納;struct bus/節(jié)點 int

6、 Id;string Name; int Type; float V;float cita;float LP;float LQ;struct nodestruct bus* data;struct branch* link;struct node* next; ;struct gpnodestruct bus* data;struct node* next;struct three_elemint X_i;int Y_j;elem Y;class Current_Calupublic:Current_Calu();void read_bus (int,char*);void read_bran

7、ch(int,char*);void creat_Current_Graph ();void search_bus (string);void search_branch (string);void Creat_matrix(); void See_Y_Matrix();void search_Y_ij(int,int);private:int bus_num;int branch_num;gpnode* gp;branch* br;bus * bu; three_elem* three_p;類函數(shù)定義#include<iostream>#include<fstream>

8、;#include <iomanip>#include <string>#include"Current_Calu.h"using namespace std;Current_Calu:Current_Calu()/構(gòu)造函數(shù)bus_num=0;branch_num=0;gp=NULL;br=NULL;bu=NULL;void Current_Calu:read_bus(int n,char *filename)ifstream file(filename,ios:in);bus_num=n;bu=new struct busn; for (int i

9、=0;i<n;i+) file>>bui.Id;file>>bui.Name;file>>bui.Type;file>>bui.V;file>>bui.cita;file>>bui.LP;file>>bui.LQ;cout<<bui.Id<<setw(9)<<bui.Name<<setw(9)<<setw(9)<<bui.Type<<setw(9)<<bui.V<<setw(9)<<bu

10、i.cita<<setw(9)<<bui.LP<<setw(9)<<bui.LQ<<endl; void Current_Calu:read_branch(int n,char *filename)ifstream file(filename,ios:in); branch_num=n;br=new branchn;for(int i=0;i<n;i+)file>>bri.Former;file>>bri.Next;file>>bri.Name;file>>bri.Type;fil

11、e>>bri.R;file>>bri.X;file>>bri.B;file>>bri.K;cout<<bri.Former<<setw(9)<<bri.Next <<setw(9)<<bri.Name <<setw(9)<<bri.Type<<setw(9)<<bri.R<<setw(9)<<bri.X<<setw(9)<<bri.B<<setw(9)<<bri.K&l

12、t;<endl;bri.lated0.real=0;bri.lated0.image=0;bri.linked.real=0;bri.linked.image=0;bri.front0.real=0;bri.front0.image=0;void Current_Calu:creat_Current_Graph()/形成圖gp=new gpnodebus_num;gpnode* p1;node * p2;int mark;for (int i=0;i<bus_num;i+)gpi.data=&bui;p1=&gpi; mark=1;for (int j=0;j<

13、;branch_num;j+)if (brj.Former=i+1)if (mark=1)p1->next=new struct node;p2=p1->next;p2->link=&brj;p2->data=&bubrj.Next-1; p2->next=NULL;mark+;elsep2->next=new struct node;p2=p2->next;p2->link=&brj;p2->data=&bubrj.Next-1;p2->next=NULL;if (brj.Next=i+1)if (m

14、ark=1)p1->next=new struct node;p2=p1->next;p2->link=&brj;p2->data=&bubrj.Former-1; p2->next=NULL;mark+;elsep2->next=new struct node;p2=p2->next;p2->link=&brj;p2->data=&bubrj.Former-1;p2->next=NULL;void Current_Calu:search_bus(string name)/尋找節(jié)點for(int i=0

15、;i<bus_num;i+)if (bui.Name=name)cout<<"The bus isn"cout<<bui.Id<<setw(9)<<bui.Name<<setw(9)<<setw(9)<<bui.Type<<setw(9)<<bui.V<<setw(9)<<bui.cita<<setw(9)<<bui.LP<<setw(9)<<bui.LQ<<endl;retur

16、n;cout<<"There is not this bus!"void Current_Calu:search_branch(string name)/尋找支路for(int i=0;i<branch_num;i+)if (bri.Name=name)cout<<"The branch isn"cout<<bri.Former<<setw(5)<<bri.Next <<setw(5)<<bri.Name <<setw(5)<<bri.Typ

17、e<<setw(5)<<bri.R<<setw(5)<<bri.X<<setw(5)<<bri.B<<setw(5)<<bri.K<<endl;return;cout<<"There is not this branch!"void Current_Calu:Creat_matrix()/制作矩陣for (int i=0;i<branch_num;i+)double R=bri.R;double X=bri.X;double B=bri.B;doub

18、le K=bri.K;if (bri.Type=2) bri.front0.real=(1-K)/(K*K)/(R*R+X*X)*R; bri.front0.image=(1-K)/(K*K)/(R*R+X*X)*(-X)+B/2; bri.linked.real=R/(R*R+X*X)/K; bri.linked.image=(-X)/(R*R+X*X)/K; bri.lated0.real=(K-1)/K*R/(R*R+X*X); bri.lated0.image=(K-1)/K*(-X)/(R*R+X*X)+B/2;else bri.front0.image=B/2; bri.linke

19、d.real=R/(R*R+X*X); bri.linked.image=(-X)/(R*R+X*X); bri.lated0.image=B/2;int num_Y=bus_num+branch_num+1;three_p=new three_elemnum_Y;for (int co=0;co<num_Y;co+)three_pco.X_i=0;three_pco.Y_j=0;three_pco.Y.image=0; three_pco.Y.real=0; three_p->X_i=bus_num;three_p->Y_j=bus_num;three_p->Y.im

20、age=num_Y;three_p->Y.real=num_Y;int d=1;for (int i1=0;i1<bus_num;i1+)node*p=gpi1.next;three_pd.X_i=i1;three_pd.Y_j=i1;while(p!=NULL)if (i1=p->link->Former-1)three_pd.Y.real+=p->link->front0.real; three_pd.Y.image+=p->link->front0.image;three_pd.Y.real+=p->link->linked.r

21、eal; three_pd.Y.image+=p->link->linked.image;elsethree_pd.Y.real+=p->link->lated0.real;three_pd.Y.image+=p->link->lated0.image;three_pd.Y.real+=p->link->linked.real; three_pd.Y.image+=p->link->linked.image; p=p->next;d+;for(int j=0;j<branch_num;j+)int q=brj.Former

22、-1;int w=brj.Next -1;three_pd.X_i=q;three_pd.Y_j=w;three_pd.Y.real-=brj.linked.real;three_pd.Y.image-=brj.linked.image;d+; for (int count=1;count<branch_num+bus_num+1;count+) cout<<three_pcount.X_i<<three_pcount.Y_j<<" "<<setw(8)<<three_pcount.Y.real<<

23、;" + "<<three_pcount.Y.image<<"jn" void Current_Calu:See_Y_Matrix()/look teh martrixfor (int i=0;i<bus_num;i+)for(int j=0;j<bus_num;j+)int k;for( k=1;k<branch_num+bus_num+1;k+)if (i=three_pk.X_i&&j=three_pk.Y_j)cout<<right<<setw(12)<<

24、;three_pk.Y.real<<"+j"<<left<<setw(12)<<three_pk.Y.image;break; if (j=three_pk.X_i&&i=three_pk.Y_j)cout<<right<<setw(12)<<three_pk.Y.real<<"+j"<<left<<setw(12)<<three_pk.Y.image;break; if (k=branch_num+bus_

25、num+1) cout<<right<<setw(13)<<0<<setw(13)<<" " cout<<endl;void Current_Calu:search_Y_ij(int ix,int iy)/尋找導(dǎo)納int k;for(k=1;k<branch_num+bus_num+1;k+)if (ix=three_pk.X_i&&iy=three_pk.Y_j)cout<<right<<setw(12)<<three_pk.Y.real<

26、;<"+j"<<left<<setw(12)<<three_pk.Y.image<<endl;return; if (iy=three_pk.X_i&&ix=three_pk.Y_j)cout<<right<<setw(12)<<three_pk.Y.real<<"+j"<<left<<setw(12)<<three_pk.Y.image<<endl;return;if (k=branch_

27、num+bus_num+1)cout<<right<<setw(13)<<0<<setw(13)<<" " cout<<endl;測試函數(shù)#include <iostream>#include "Current_Calu.h"using namespace std;#include <conio.h>int main()char a;Current_Calu obj1,obj2;cout<<"Press any key to start

28、the program!n"a=getch();cout<<"Read the 005bus!n"obj1.read_bus(5,"005bus.txt");cout<<"nAny key to go on!n"a=getch();system("cls");cout<<"Read the 005branch!n"obj1.read_branch(5,"005branch.txt");cout<<"nAny key to go on!n"a=getch();system("cls");obj1.creat_Current_Graph();cout&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論