亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? factorns.cpp

?? 用于潮流計算的程序請讓我下載我需要的吧感謝了啊
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/* Factor unsymmetric square or rectangular matrix, add fills.
   Purpose: Factor Unsymmetric Matrix, add fills and
            Generate Permutation Vectors.
            Order according to min Degree rows / max Value OR min degree cols.
            Order within row partitions if partition vector is given. */

#include <stdlib.h>
//#ifndef WINDOWS
//#include <stdio.h>
//#else
#include "pfwstdio.h"
//#endif
#include <math.h>
#ifdef ANSIPROTO
#include <float.h>
#endif
#include "constant.h"
#include "param.h"
#include "sparse.h"

#define DeltaValence 3
        /* This is the only "trick": If row seems singular,
           defer factorization by increasing its valence.
           For square matrices, this happens only if singular.
           For rectangular factorization, this can happen. */

#ifdef ANSIPROTO
void InitializeLSWR(void);
void AllocateOrderArrays(void);
void LoadUnloadWorkingRow(INDEX i,BOOLEAN SetReset);
SparseMatrixElement *PutMatrix(INDEX PutRow,INDEX PutCol,ELEMENTVALUETYPE PutVal,
      SparseMatrixElement *PutRNext,SparseMatrixElement *PutCNext);
void SimElim(INDEX Ipivot,INDEX Jpivot,ELEMENTVALUETYPE *DiagVal);
void LinkVal(INDEX Ival,VALENCE valVal);
void UNLinkVal(INDEX Iunl);
void FindVal(INDEX Ifnd);
void FormClass(INDEX Ibeg,INDEX Iend);
INDEX GetLowval(void);
VALENCE ColumnValence(INDEX Col);
INDEX GetHighest(INDEX Ipivot);
void UpdateVals(INDEX Jpivot);
int OrderMatrix(INDEX Ibeg,INDEX Iend);
void InvertNormalize(void);
void FinishVectors(void);
int factorns(SparseMatrix *Mptr,double Param,IntegerVector *PartRow,IntegerVector *PartCol,
             IntegerVector *P1Row,IntegerVector *P1Col,IntegerVector *P2Row,IntegerVector *P2Col);
#else
void InitializeLSWR();
void AllocateOrderArrays();
void LoadUnloadWorkingRow();
SparseMatrixElement *PutMatrix();
void SimElim();
void LinkVal();
void UNLinkVal();
void FindVal();
void FormClass();
INDEX GetLowval();
VALENCE ColumnValence();
INDEX GetHighest();
void UpdateVals();
int OrderMatrix();
void InvertNormalize();
void FinishVectors();
int factorns();
#endif

/* Global array and variable definitions */
SparseMatrix *Matrix;
LONGINT Tau,Nfills,Nmult;
VALENCE maxVal = maxN;

BOOLEAN *Lswr; /* array 0..maxN */
ELEMENTVALUETYPE *Swr;    /* array 0..maxN */
IntegerVector *RowNew,*RowOld,*ColNew,*ColOld;
INDEX *PartitionAt,*PartitionCol;  /* array 0..maxPart */

double Alpha;
int LinkCount,Iorder,Nclasses;
INDEX Nstop,Ibeg,Iend,Ipart,Nparts;
INDEX CurrentColPart,NpartCol;

/* Following definitions global only within OrderMatrix routines */
        VALENCE *Valence; /* array 0..maxN */
        INDEX *FwdLink; /* array 0..maxN */
        INDEX *BckLink; /* array 0..maxN */
        INDEX *ValClass; /* array 0..maxVal */
        ELEMENTVALUETYPE PivotV,DiagVal;

/* ================= InitializeLSWR =================================== */
void InitializeLSWR()
{
  int i;

#ifdef WINDOWS
  Lswr = new BOOLEAN[Matrix->n1+1];
  Swr =  new ELEMENTVALUETYPE[Matrix->n1+1];
#else
  Lswr = (BOOLEAN *) calloc((Matrix->n1+1),sizeof(BOOLEAN));
  Swr =  (ELEMENTVALUETYPE *) calloc((Matrix->n1+1),sizeof(ELEMENTVALUETYPE));
  if (Lswr==NULL || Swr==NULL) {ErrorHalt("Insufficient memory for arrays"); stopExecute(ERROREXIT);}
#endif
  for(i=1;i<=Matrix->n1;i++) Lswr[i]=FALSE;
}

/* =================== AllocateOrderArrays ========================== */
void AllocateOrderArrays()
{
  INDEX i,n0;
  /* BEGIN */
  if (Matrix->n1 > Matrix->n2) n0 = Matrix->n1; else n0 = Matrix->n2;
  maxVal = n0; /* This could be larger yet */
#ifdef WINDOWS
  Valence = new VALENCE[n0+1];  /* array 0..maxN */
  FwdLink = new INDEX[n0+1];  /* array 0..maxN */
  BckLink = new INDEX[n0+1];  /* array 0..maxN */
  ValClass = new INDEX[maxVal+1]; /* array 0..maxVal */
#else
  Valence = (VALENCE *) malloc((n0+1)*sizeof(VALENCE));  /* array 0..maxN */
  FwdLink = (INDEX *) malloc((n0+1)*sizeof(INDEX));  /* array 0..maxN */
  BckLink = (INDEX *) malloc((n0+1)*sizeof(INDEX));  /* array 0..maxN */
  ValClass = (INDEX *) calloc((maxVal+1),sizeof(INDEX)); /* array 0..maxVal */
  if (ValClass==NULL) {ErrorHalt("Insufficient memory to allocate order vectors"); stopExecute(ERROREXIT);}
#endif
  for(i=0;i<n0+1;i++) { Valence[i]=0; FwdLink[i]=BckLink[i]=0; }
  for(i=0;i<maxVal+1;i++) ValClass[i]=0;
}

/* ====================== LoadUnloadWorkingRow ======================== */
#ifdef ANSIPROTO
  void LoadUnloadWorkingRow(INDEX i,BOOLEAN SetReset)
#else
  void LoadUnloadWorkingRow(i,SetReset)
  INDEX i;
  BOOLEAN SetReset;
#endif
  {
    SparseMatrixElement *Ptr2;
    /* BEGIN */
    Ptr2 = Matrix->RowHead[i];
    while (Ptr2 != NULL) {
      if (SetReset) Tau++;
      Lswr[Ptr2->Col] = SetReset;
      Ptr2 = Ptr2->RowNext;
    }
  }

/* ========================== PutMatrix =============================== */
#ifdef ANSIPROTO
  SparseMatrixElement *PutMatrix(INDEX PutRow,INDEX PutCol,
           ELEMENTVALUETYPE PutVal,
           SparseMatrixElement *PutRNext,SparseMatrixElement *PutCNext)
#else
  SparseMatrixElement
         *PutMatrix(PutRow,PutCol,PutVal,PutRNext,PutCNext)
  INDEX PutRow,PutCol;
  ELEMENTVALUETYPE PutVal;
  SparseMatrixElement *PutRNext;
  SparseMatrixElement *PutCNext;
#endif
  { /* PutMatrix */
    SparseMatrixElement *PutPtr;
         /* BEGIN */
#ifdef WINDOWS
         PutPtr = new SparseMatrixElement;
#else
         PutPtr = (SparseMatrixElement *) malloc(sizeof(*PutPtr));
#endif
         if (PutPtr != NULL) {
                PutPtr->Row = PutRow;
                PutPtr->Col = PutCol;
                PutPtr->Value = PutVal;
                PutPtr->RowNext = PutRNext;
                PutPtr->ColNext = PutCNext;
    } else {
      ErrorHalt("Insufficient memory for fills");
      stopExecute(ERROREXIT);
    }
    return(PutPtr);
  } /* PutMatrix */

/* =========================== SimElim ============================== */
#ifdef ANSIPROTO
        void SimElim(INDEX Ipivot,INDEX Jpivot,ELEMENTVALUETYPE *DiagVal)
#else
        void SimElim(Ipivot,Jpivot,DiagVal)
        INDEX Ipivot,Jpivot;
        ELEMENTVALUETYPE *DiagVal;
#endif
        {
          INDEX Jsim,Ksim;
          SparseMatrixElement *OrdP1;
          SparseMatrixElement *OrdP2;
          /* BEGIN SimElim */
          OrdP1 = Matrix->ColHead[Jpivot];
          while (OrdP1 != NULL) {
            Jsim = OrdP1->Row;
            if (RowNew->p[Jsim] == 0) {
              OrdP2 = Matrix->RowHead[Jsim];
              while (OrdP2 != NULL) {
                Lswr[OrdP2->Col] = TRUE;
                Swr[OrdP2->Col] = OrdP2->Value;
                OrdP2 = OrdP2->RowNext;
              }

              /* DivideValues(&Swr[Jpivot],Swr[Jpivot],DiagVal); */
              Swr[Jpivot] = Swr[Jpivot] / *DiagVal;

              OrdP2 = Matrix->RowHead[Ipivot];
              while (OrdP2 != NULL) {
                Ksim = OrdP2->Col;
                if (ColNew->p[Ksim] == 0) {
                  if (Lswr[Ksim] != TRUE) {
                    Nfills++;
                    Matrix->RowHead[Jsim] = PutMatrix(Jsim,Ksim,0.0,
                       Matrix->RowHead[Jsim],Matrix->ColHead[Ksim]);
                    Matrix->ColHead[Ksim] = Matrix->RowHead[Jsim];
                    Lswr[Ksim] = TRUE;
                    Swr[Ksim] = 0.0;
                  } /* END IF */
                  /*
                  MultiplyValues(TempVal,Swr[Jpivot],OrdP2^.Value);
                  SubtractValues(Swr[Ksim],Swr[Ksim],TempVal);
                  */
                  Swr[Ksim] = Swr[Ksim] - Swr[Jpivot] * OrdP2->Value;
                  Nmult++;
                } /* END IF */
                OrdP2 = OrdP2->RowNext;
              } /* END WHILE */;
              OrdP2 = Matrix->RowHead[Jsim];
              while (OrdP2 != NULL) {
                Lswr[OrdP2->Col] = FALSE;
                OrdP2->Value = Swr[OrdP2->Col];
                Swr[OrdP2->Col] = 0.0;
                OrdP2 = OrdP2->RowNext;
              } /* END WHILE */
            } /* END IF */
            OrdP1 = OrdP1->ColNext;
          } /* END WHILE */
        } /* END SimElim */


/* ============== START OF ROUTINES LOCAL TO OrderMatrix ============= */

#ifdef ANSIPROTO
        void LinkVal(INDEX Ival,VALENCE valVal)
#else
        void LinkVal(Ival,valVal)
        INDEX Ival;
        VALENCE valVal;
#endif
        {
          if (ValClass[valVal] != 0) BckLink[ValClass[valVal]] = Ival;
          FwdLink[Ival] = ValClass[valVal];
          BckLink[Ival] = 0;
          ValClass[valVal] = Ival;
          LinkCount++;
        } /* END LinkVal */

#ifdef ANSIPROTO
        void UNLinkVal(INDEX Iunl)
#else
        void UNLinkVal(Iunl)
        INDEX Iunl;
#endif
        {
          if (BckLink[Iunl] != 0) FwdLink[BckLink[Iunl]] = FwdLink[Iunl];
          else ValClass[Valence[Iunl]] = FwdLink[Iunl];
          if (FwdLink[Iunl] != 0) BckLink[FwdLink[Iunl]] = BckLink[Iunl];
          LinkCount--;
        } /* END UNLinkVal */

#ifdef ANSIPROTO
        void FindVal(INDEX Ifnd)
#else
        void FindVal(Ifnd)
        INDEX Ifnd;
#endif
        {
          SparseMatrixElement *OrdP1;
          /* BEGIN */
          Valence[Ifnd] = 0;
          OrdP1 = Matrix->RowHead[Ifnd];
          while (OrdP1 != NULL) {
            if ((Valence[Ifnd] < maxVal) && (ColNew->p[OrdP1->Col]==0)) {
              Valence[Ifnd]++;
            } /* END IF */
            OrdP1 = OrdP1->RowNext;
          } /* END WHILE */
        } /* END FindVal */

#ifdef ANSIPROTO
        void FormClass(INDEX Ibeg,INDEX Iend)
#else
        void FormClass(Ibeg,Iend)
        INDEX Ibeg,Iend;
#endif
        {
          INDEX I;
          /* BEGIN */
          for (I=Ibeg; I<=Iend; I++) {
            RowOld->p[I] = 0;
            ColOld->p[I] = 0;
          }
          for (I=Ibeg; I<=Iend; I++) FindVal(I);
          for (I=0; I<=maxVal; I++) ValClass[I] = 0;
          for (I=Ibeg; I<=Iend; I++) LinkVal(I,Valence[I]);
        } /* END FormClass */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品国产91久久久久久久妲己| 日本一区二区久久| 成人短视频下载| 久久精品国产一区二区三| 亚洲伊人伊色伊影伊综合网 | 日本不卡不码高清免费观看| 成人欧美一区二区三区视频网页| 精品国产免费一区二区三区香蕉| 欧美精品精品一区| 欧美日韩一区二区在线视频| 色综合亚洲欧洲| 91色porny在线视频| 国产一区二区91| 亚洲超丰满肉感bbw| 亚洲精品第1页| 亚洲精选在线视频| 亚洲免费观看在线视频| 亚洲精品国产a| 一区二区三区日韩精品视频| 亚洲激情欧美激情| 一区二区免费在线播放| 一区二区三区在线看| 一区二区三区在线视频播放| 亚洲精品视频自拍| 亚洲欧美在线视频观看| 亚洲私人黄色宅男| 亚洲伦在线观看| 国产精品高潮久久久久无| 欧美国产精品久久| 国产精品久久午夜夜伦鲁鲁| 亚洲欧美激情小说另类| 一区二区国产视频| 无码av免费一区二区三区试看 | 国精产品一区一区三区mba桃花 | 久草热8精品视频在线观看| 日本系列欧美系列| 国产福利一区二区三区视频在线| 国产精品乡下勾搭老头1| 国产成人精品午夜视频免费| 99精品在线免费| 欧美日产在线观看| 久久精品一区二区三区不卡| 国产精品电影院| 亚洲va韩国va欧美va精品| 毛片不卡一区二区| 国产传媒一区在线| 色婷婷亚洲一区二区三区| 911精品国产一区二区在线| 在线综合视频播放| 中文字幕不卡的av| 午夜影视日本亚洲欧洲精品| 国内精品不卡在线| 99精品国产视频| 日韩午夜激情av| 国产精品美女久久久久久2018| 亚洲香肠在线观看| 一区二区三区四区国产精品| 精品一区二区三区影院在线午夜| 成人精品国产免费网站| 欧美久久久久久久久久| 中文字幕av资源一区| 日韩电影免费一区| av激情亚洲男人天堂| 91精品欧美福利在线观看| 国产精品每日更新在线播放网址| 午夜视频一区二区三区| 99精品偷自拍| 久久综合九色综合欧美亚洲| 一区二区三区日韩欧美精品| 国产精品夜夜嗨| 日韩午夜精品视频| 亚洲综合成人在线视频| 国产精品小仙女| 日韩久久精品一区| 亚洲综合色视频| 9人人澡人人爽人人精品| 精品剧情在线观看| 天堂va蜜桃一区二区三区| 波多野洁衣一区| 精品国产99国产精品| 蜜臀va亚洲va欧美va天堂| 在线欧美一区二区| 亚洲欧美国产77777| 国产一区二区不卡在线| 精品乱人伦小说| 蜜桃久久久久久| 欧美一区日韩一区| 日本少妇一区二区| 337p亚洲精品色噜噜噜| 亚洲一区二区视频| 欧美色欧美亚洲另类二区| **欧美大码日韩| 粉嫩嫩av羞羞动漫久久久| 久久久午夜精品| 国产黄色精品视频| 欧美经典一区二区| 国产成人午夜高潮毛片| 欧美极品美女视频| 97精品久久久午夜一区二区三区 | 不卡的av在线| 国产精品国产三级国产| www.99精品| 日本一区二区三级电影在线观看| 国产精品一区2区| 国产精品污网站| 91香蕉视频在线| 亚洲一区二区三区视频在线| 欧美日韩国产天堂| 日日欢夜夜爽一区| 日韩女优视频免费观看| 国产精品亚洲人在线观看| 欧美国产激情二区三区| av不卡免费在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 国产一区二区调教| 自拍偷拍欧美精品| 欧美群妇大交群中文字幕| 美国av一区二区| 中文字幕av一区二区三区高| 色婷婷狠狠综合| 日本美女一区二区三区视频| 日韩欧美国产一区二区三区| 久99久精品视频免费观看| 亚洲国产高清在线观看视频| 欧美综合天天夜夜久久| 久久精品国产网站| 国产精品久久久99| 91成人看片片| 久久99精品久久久久久国产越南| 国产精品久久一卡二卡| 欧美精选午夜久久久乱码6080| 久久99热99| 日韩制服丝袜先锋影音| 亚洲自拍欧美精品| 亚洲欧洲日韩综合一区二区| 久久久国产精品不卡| 日韩女优毛片在线| 91精品久久久久久久99蜜桃| 在线观看一区二区精品视频| 成人永久免费视频| 国产麻豆视频一区二区| 久久不见久久见免费视频1| 日韩精品电影在线| 午夜国产不卡在线观看视频| 亚洲福利一区二区| 亚洲精品久久嫩草网站秘色| 日韩一区欧美一区| 亚洲人成精品久久久久| 亚洲欧洲韩国日本视频| 中文字幕亚洲一区二区av在线| 国产精品欧美一区二区三区| 中文字幕av资源一区| 国产精品久久久久久久久快鸭| 欧美激情艳妇裸体舞| 国产精品嫩草久久久久| 日韩理论片中文av| 亚洲激情男女视频| 亚洲线精品一区二区三区| 一区二区三区在线观看网站| 亚洲高清一区二区三区| 日日欢夜夜爽一区| 久久精品国产网站| 国产成人鲁色资源国产91色综| 丁香一区二区三区| 91色porny在线视频| 欧美日韩精品免费观看视频| 欧美一区二区三区四区五区 | 91在线免费视频观看| 欧美在线观看禁18| 制服丝袜成人动漫| 国产亚洲成aⅴ人片在线观看| 国产精品久久久久影院老司| 亚洲精品一二三四区| 日本怡春院一区二区| 国产高清亚洲一区| 欧洲一区在线电影| 日韩精品一区二区三区蜜臀 | 久久久久久久久久美女| 国产精品国产精品国产专区不蜜| 一片黄亚洲嫩模| 久久国产尿小便嘘嘘尿| 床上的激情91.| 欧美日韩一区二区三区高清| 久久影视一区二区| 亚洲婷婷综合色高清在线| 天天爽夜夜爽夜夜爽精品视频| 国产一区91精品张津瑜| 91电影在线观看| 337p粉嫩大胆噜噜噜噜噜91av| 中文字幕一区二区在线观看| 日韩黄色片在线观看| 国产成人av一区| 91精品国产综合久久久久久| 日本一区二区三区四区在线视频 | 一区二区三区四区高清精品免费观看| 日韩不卡一二三区| 成人激情免费网站| 欧美白人最猛性xxxxx69交| 亚洲精品水蜜桃| 风间由美一区二区三区在线观看|