📄 maasolve.cpp
字号:
//************************************************************************
// maasolve - solve Ax=y asymmetric matrix equation for x
//************************************************************************
#include <malib.h>
//OPF用
//输入数据: mastate_vt,maamtrx_vt
//***********************************************************************
bool EmsMatrix::maasolve(void)
{
bool rc;
int i, divg_state = 0;
int numitm = 0, item_count = 0;
int maorder_itm = 0,recNum=0;
recNum= mastate_vt.size();
if (maorderft ==NULL)
{
maorderft =(char*)new struct maorderst[recNum];
}
else
{
maorder_vt.clear();
}
memset(maorderft,0,recNum*sizeof(struct maorderst));
maorderpt =(struct maorderst*)maorderft;
nmastate = recNum;
divg_state_pt = divg_state;
maorderpt = (struct maorderst *)maorderft;
for ( i = 1; i <= nmastate; i++, maorderpt++)
{
mastatept = mastate_vt[i-1];
mastatept->maorder_itm = i;
maorderpt->mastate_itm = i;
item_count += mastatept->maamtrx_cnt;
maorder_vt.push_back(maorderpt);
}
recNum=maamtrx_vt.size();
nmaamtrx = recNum;
if ( rc = maareord() != SUCCESS )
{
printf("maasolve: renumbering fails!!\n");
return(rc);
}
nmagmtrx = item_count;
if ( rc = maatrian() != SUCCESS )
{
printf("maasolve: triangularization fails!\n");
return(rc);
}
if ( rc = maafbsub() != SUCCESS )
{
printf("maasolve: forward/backward substitution fails!!\n");
return(rc);
}
// delete []maorderft;
// delete []magmtrxft;
// delete []cmtrxft;
return(SUCCESS);
}
EmsMatrix::EmsMatrix()
{
mastateft =NULL; maorderft =NULL; maorder1ft =NULL; maorder2ft =NULL; maamtrxft =NULL; cmtrxft =NULL; magmtrxft =NULL; magmtr1ft =NULL; magmtr2ft =NULL; matmtrxft =NULL;
}
EmsMatrix::~EmsMatrix()
{
if (mastateft !=NULL) delete []mastateft; if (maorderft !=NULL) delete []maorderft; if (maorder1ft !=NULL) delete []maorder1ft; if (maorder2ft !=NULL) delete []maorder2ft; if (maamtrxft != NULL) delete []maamtrxft; if (cmtrxft != NULL) delete []cmtrxft; if (magmtrxft !=NULL) delete []magmtrxft; if (magmtr1ft !=NULL) delete []magmtr1ft; if (magmtr2ft !=NULL) delete []magmtr2ft; if (matmtrxft !=NULL) delete []matmtrxft;
mastateft = NULL; maorderft = NULL; maorder1ft= NULL; maorder2ft= NULL; maamtrxft = NULL; cmtrxft = NULL; magmtrxft = NULL; magmtr1ft = NULL; magmtr2ft = NULL; matmtrxft = NULL;
maorder1_vt.clear(); maorder2_vt.clear(); matmtrx_vt.clear(); magmtr1_vt.clear(); magmtr2_vt.clear(); mastate_vt.clear(); maorder_vt.clear();
magmtrx_vt.clear(); maamtrx_vt.clear();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -