masolve.cpp
来自「电力系统稀疏矩阵计算类,用法范例代码,包括三个目录,MALIB(类),MATES」· C++ 代码 · 共 78 行
CPP
78 行
//===========================================================================
//
// EMS高级应用软件
//
//===========================================================================
// rev 0.0 8-9-2004 initial release Qwbin
// 版本 0.0 8-9-2004 第一次发布 齐文斌
//---------------------------------------------------------------------------
//************************************************************************
//
// masolve - solve Ax=y asymmetric matrix equation for x
// 线性方程求解
// 目前,只有OPF调用
//************************************************************************
#include <malib.h>
//***********************************************************************
bool EmsMatrix::masolve(void)
{
bool rc;
int divg_state = 0;
int numitm = 0;
int maorder_itm = 0;
maorder_vt[0] = malloc(mastate_tb->act_count * sizeof(struct maorderst) );
maorder_vt.size( ) = mastate_tb->act_count;
maparm.nmastatept = &mastate_tb->act_count;
divg_state_pt = &divg_state;
//nmagmtrxpt = &magmtrx_vt.size( );
//nmaamtrxpt = &maamtrx_vt.size( );
//maparm.mastatept = (struct mastatest *)mastate_tb->pt;
//maparm.maorderpt = (struct maorderst *)maorder_vt[0];
//maparm.maamtrxpt = (struct maamtrxst *)maamtrx_vt[0];
if ( rc = maoptim() != SUCCESS )
{
printf("masolve: optimal ordering fails!!\n");
return(rc);
}
macmtrx_vt[0] = malloc(maamtrx_vt.size( ) * sizeof(struct maamtrxst) );
macmtrx_vt.size( ) = maamtrx_vt.size( );
maparm.cmtrxpt = (struct maamtrxst *)macmtrx_vt[0];
if ( rc = mareordr(maparm) != SUCCESS )
{
printf("masolve: renumbering fails!!\n");
return(rc);
}
magmtrx_vt[0] = malloc(magmtrx_vt.size( ) * sizeof(struct magmtrxst));
memset(magmtrx_vt[0],0,magmtrx_vt.size( ) * sizeof(struct magmtrxst));
maparm.magmtrxpt =(struct magmtrxst *) magmtrx_vt[0];
if ( rc = matriang() != SUCCESS )
{
printf("masolve: triangularization fails!\n");
return(rc);
}
// if ( rc = mafbsub(maparm) != SUCCESS )
//目前尚未用到函数masolve(),此处只是为了解决函数mafbsub()参数个数的问题 mdn 04-11-10
if ( rc = mafbsub() != SUCCESS )
{
printf("masolve: forward/backward substitution fails!!\n");
return(rc);
}
free(maorder_vt[0]);
free(magmtrx_vt[0]);
free(macmtrx_vt[0]);
return(SUCCESS);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?