• 大小: 3.78MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-08-10
  • 语言: 其他
  • 标签:

资源简介

在数学上是多元非线性方程组的求解问题,求解的方法有很多种。牛顿—拉夫逊法是数学上解非线性方程式的有效方法,有较好的收敛性。将牛顿法用于潮流计算是以导纳矩阵为基础的,由于利用了导纳矩阵的对称性、稀疏性及节点编号顺序优化等技巧,使牛顿法在收敛性、占用内存、计算速度等方面都达到了一定的要求。 本文以一个具体例子分析潮流计算的具体方法,并运用牛顿—拉夫逊算法求解线性方程

资源截图

代码片段和文件信息


#include 
#include 
#include 
#include 
#include
#include 
#include 
#include
#include
using namespace std;
vector < vector > mtxBranchList;//支路参数
vector < vector > mtxNodeList;//节点参数
vector < vector > mtxTransList;//变压器参数
vector < vector > mtxSusList;//并联导纳参数
vector  verTemp;
FILE *fp;
void  RealMatrixInvert(vector < vector >& mtxZ);
int i j;
void main(void)
{
if ((fopen_s(&fp “input.txt“ “r“)) != 0)
{
cout << endl;
cout << “出错!!!(“input.txt”不存在)“ << endl << endl;
exit(1);
}
//输入节点数据
int n1 n2 nNodeNumber = 0 nSwingNodeNumber = 0 nPQNodeNumber = 0 nPVNodeNumber = 0 Branch = 0;
float fVol fPg fQg fPl fQl;
float fR fX fG fB;
float fK;
while (1)
{
verTemp.clear();
fscanf_s(fp “%d %d“ &n1 &n2);
if (n1 == -1) break;
fscanf_s(fp “%f %f %f %f %f“ &fVol &fPg &fQg &fPl &fQl);
verTemp.push_back(n1);
verTemp.push_back(n2);
verTemp.push_back(fVol);
verTemp.push_back(fPg);
verTemp.push_back(fQg);
verTemp.push_back(fPl);
verTemp.push_back(fQl);
mtxNodeList.push_back(verTemp);
nNodeNumber++;//统计节点个数
if (n1 == 0)
nSwingNodeNumber++;//统计平衡节点个数
if (n1 == 1)
nPQNodeNumber++;//统计PQ节点个数
if (n1 == 2)
nPVNodeNumber++;//统计PV节点个数
}
//输入支路数据
while (1)
{
verTemp.clear();
fscanf_s(fp “%d %d“ &n1 &n2);
if (n1 == -1) break;
fscanf_s(fp “%f %f %f %f“ &fR &fX &fG &fB);
verTemp.push_back(n1);
verTemp.push_back(n2);
verTemp.push_back(fR);
verTemp.push_back(fX);
verTemp.push_back(fG);
verTemp.push_back(fB);
mtxBranchList.push_back(verTemp);
Branch++;//统计支路数
}
//输入变压器数据
while (1)
{
verTemp.clear();
fscanf_s(fp “%d %d“ &n1 &n2);
if (n1 == -1) break;
fscanf_s(fp “%f %f %f“ &fR &fX &fK);
verTemp.push_back(n1);
verTemp.push_back(n2);
verTemp.push_back(fR);
verTemp.push_back(fX);
verTemp.push_back(fK);
mtxTransList.push_back(verTemp);
}
//输入并联电容电纳数据
while (1)
{
verTemp.clear();
fscanf_s(fp “%d“ &n1);
if (n1 == -1) break;
fscanf_s(fp “%f“ &fB);
verTemp.push_back(n1);
verTemp.push_back(fB);
mtxSusList.push_back(verTemp);
}
//没问题
//形成节点导纳矩阵
//考虑支路
int nSize nSize1 nSize2;
float dR=0 dX=0 dB=0 dRX=0 dG1=0 dB1=0;
float k;
vector < vector> Y1;
vector < vector> Y2;//节点导纳矩阵
verTemp.resize(nNodeNumber);
for (i = 0; i < nNodeNumber; i++)
{

Y1.push_back(verTemp);
Y2.push_back(verTemp);
}
nSize = mtxBranchList.size();
for (i = 0; i < nSize; i++)
{
n1 = int(mtxBranchList[i][0] - 1);
n2 = mtxBranchList[i][1] - 1;
dR = mtxBranchList[i][2];
dX = mtxBranchList[i][3];
dB = mtxBranchList[i][5];
dRX = dR*dR + dX*dX;
dG1 = dR / dRX;
dB1 = -dX / dRX;
Y1[n1][n1] += dG1;
Y1[n1][n2] = -dG1;
Y2[n1][n1] += dB1 ;
Y2[n1][n2] = -dB1;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-09-12 20:46  牛顿拉夫逊法原本\
     目录           0  2017-10-11 09:42  牛顿拉夫逊法原本\Project1\
     目录           0  2017-09-15 19:06  牛顿拉夫逊法原本\Project1\Debug\
     文件      168448  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Debug\Project1.exe
     文件     1360256  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Debug\Project1.ilk
     文件     1813504  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Debug\Project1.pdb
     目录           0  2017-10-09 08:55  牛顿拉夫逊法原本\Project1\Project1\
     文件     8060928  2017-10-11 09:42  牛顿拉夫逊法原本\Project1\Project1.sdf
     文件         970  2017-08-14 20:49  牛顿拉夫逊法原本\Project1\Project1.sln
     文件       44544  2017-10-11 09:42  牛顿拉夫逊法原本\Project1\Project1.v12.suo
     目录           0  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\
     文件        5301  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.log
     目录           0  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\
     文件         466  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\cl.command.1.tlog
     文件       12882  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\CL.read.1.tlog
     文件         336  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\CL.write.1.tlog
     文件         972  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\link.command.1.tlog
     文件        2488  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\link.read.1.tlog
     文件         320  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\link.write.1.tlog
     文件         164  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\Project1.tlog\Project1.lastbuildstate
     文件      281600  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\vc120.idb
     文件      413696  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\vc120.pdb
     文件      579535  2017-09-15 19:57  牛顿拉夫逊法原本\Project1\Project1\Debug\源.obj
     文件         349  2017-09-15 19:39  牛顿拉夫逊法原本\Project1\Project1\input.txt
     文件         590  2017-10-09 17:59  牛顿拉夫逊法原本\Project1\Project1\output.txt
     文件        3378  2017-08-14 21:32  牛顿拉夫逊法原本\Project1\Project1\Project1.vcxproj
     文件         944  2017-08-14 21:32  牛顿拉夫逊法原本\Project1\Project1\Project1.vcxproj.filters
     目录           0  2017-10-09 08:55  牛顿拉夫逊法原本\Project1\Project1\Release\
     文件         704  2017-09-15 20:04  牛顿拉夫逊法原本\Project1\Project1\Release\Project1.Build.CppClean.log
     文件        4629  2017-10-09 08:55  牛顿拉夫逊法原本\Project1\Project1\Release\Project1.log
     目录           0  2017-10-09 08:55  牛顿拉夫逊法原本\Project1\Project1\Release\Project1.tlog\
............此处省略13个文件信息

评论

共有 条评论