Example #1
0
int compareMatrices(int** a, int** b){
	int aWidth = xMatrix(a);
	int bWidth = xMatrix(b);

	if (aWidth > bWidth){
		return 1;
	} else if (aWidth < bWidth){
		return -1;
	}

	int w = aWidth;

	int aHeight = yMatrix(a);
	int bHeight = yMatrix(b);

	if (aHeight > bHeight){
		return 1;
	} else if (aHeight < bHeight){
		return -1;
	}

	int l = aWidth;

	for (int i = 0; i < w; i++){
		for (int j = 0; j < l; j++){
			if (a[i][j] > b[i][j]){
				return 1;
			} else if (a[i][j] < b[i][j]){
				return -1;
			}
		}
	}
	return 0;
}
Example #2
0
void swapMatrixRow(int** a, int row1, int row2){
	int s = yMatrix(a);
	for(int i = 0; i < s; i++){
		int a1 = a[row1][i];
		a[row1][i] = a[row2][i];
		a[row2][i] = a1;
	}
}
Example #3
0
void printMatrix(int** a){
	printf("[\n");
	int n = xMatrix(a);
	int m = yMatrix(a);
	for (int i = 0; i < n; i++){
		printMatrixRow(a[i], m);
	}
	printf("]\n");
}
Example #4
0
int compareMatrixRow(int** a, int row1, int** b, int row2){
	int s = yMatrix(a);
	for(int i = 0; i < s; i++){
		int ai = a[row1][i];
		int bi = b[row2][i];
		if (ai > bi){
			return 1;
		} else if (ai < bi){
			return -1;
		}
	}
	return 0;
}
Example #5
0
	DLLEXPORT void vclGemv(const BlasTranspose transA, const int m, const int n, 
						const ScalarType alpha, const ScalarType a[], const int aOffset, const int aLength, 
						const ScalarType x[], const int xOffset, const int xLength, 
						const ScalarType beta, ScalarType y[], const int yOffset)
	{
		auto aPtr = &(a[0]) + aOffset;
		auto xPtr = &(x[0]) + xOffset;
		auto yPtr = &(y[0]) + yOffset;

		// wrap host buffer within ViennaCL
		viennacl::vector<ScalarType> xVec((ScalarType*)xPtr, viennacl::MAIN_MEMORY, xLength);
		viennacl::matrix<ScalarType> aMatrix((ScalarType*)aPtr, viennacl::MAIN_MEMORY, m, n);
		viennacl::matrix<ScalarType> yMatrix(yPtr, viennacl::MAIN_MEMORY, m, n);

		// auto aux = alpha * viennacl::linalg::prod(aMatrix, xVec) + beta * yMatrix;
	};
Example #6
0
   Matrix4 &Matrix4::FromEulerAngle(const EulerAngle &euler)
   {
      float fCos, fSin;

      fCos = Cos(euler.yaw);
      fSin = Sin(euler.yaw);
      Matrix3 yMatrix(fCos, 0.0, fSin, 0.0, 1.0, 0.0, -fSin, 0.0, fCos);

      fCos = Cos(euler.pitch);
      fSin = Sin(euler.pitch);
      Matrix3 xMatrix(1.0, 0.0, 0.0, 0.0, fCos, -fSin, 0.0, fSin, fCos);

      fCos = Cos(euler.roll);
      fSin = Sin(euler.roll);
      Matrix3 zMatrix(fCos, -fSin, 0.0, fSin, fCos, 0.0, 0.0, 0.0, 1.0);

      *this = yMatrix * (xMatrix * zMatrix);

      return *this;
   }
Example #7
0
bool PowerFlow::Run(const char *filePath)
{
    iPsoTextReader reader;
    int K;
    if(reader.Read(filePath))
    {
        YMatrix yMatrix(reader);
        if(yMatrix.MakeParameter())
        {
            int totalNum=reader.GetTotalNodeNum();
            PFJacobian pfJacobian(reader,yMatrix);
            boost::shared_array<double> unbalance;
            double *b=NULL;
            boost::shared_ptr<std::list<swingNodeStruct> > swingNode=reader.GetSwingNodeData();
            boost::shared_ptr<std::list<genReactivepowerLimitStruct> > genRepowLimit(reader.GetGenReactivepowerLimitData());
            this->Initialization(totalNum,this->mVoltAngle,this->mVolt,reader.GetGenReactivepowerLimitData());
            //开始进入循环
            for(K=1; K<reader.GetMaxIteration()+1; ++K)
            {
                std::cout<<"正在进行第"<<K<<"次迭代"<<std::endl;
                pfJacobian.Make(this->mVoltAngle,this->mVolt);
//                std::cout<<"得到不平衡量"<<std::endl;
                //得到不平衡量
                unbalance=pfJacobian.GetUnbalance();
                b=unbalance.get();

                //准备解出修正量
//                std::cout<<"准备解出修正量"<<std::endl;
                for(int i=0; i<reader.GetTotalNodeNum()*2; ++i)
                {
                    b[i]=-b[i];
                }
                //对平衡节点进行处理
//                std::cout<<"对平衡节点进行处理"<<std::endl;
                for(std::list<swingNodeStruct>::iterator ite=swingNode->begin();
                        ite!=swingNode->end();
                        ++ite)
                {
                    swingNodeStruct value=*ite;
                    b[value.i]=0;
                }
                //对pv节点进行处理
//                std::cout<<"对pv节点进行处理"<<std::endl;
                for(std::list<genReactivepowerLimitStruct>::iterator ite=genRepowLimit->begin();
                        ite!=genRepowLimit->end();
                        ++ite)
                {
                    genReactivepowerLimitStruct value=*ite;
                    b[value.i+totalNum]=0;
                }
                //检查终止条件
//                std::cout<<"检查终止条件"<<std::endl;
                if(this->AbsMax(b,totalNum*2)<reader.GetEPS())
                {
                    break;
                }
                sparseMatSruct spMat;
                spMat=pfJacobian.GetJacoBian();
                Solve::solveT(spMat.dim,spMat.Ap.get(),spMat.Ai.get(),spMat.Ax.get(),b);
//                std::cout<<"开始计算迭代数"<<std::endl;

                this->Update(this->mVoltAngle,this->mVolt,b);

            }

        }
        else
        {
            std::cout<<"线路参数错误!"<<std::endl;
        }
        std::cout<<"迭代"<<K<<"次"<<std::endl;
        return true;

    }
    else
    {
        return false;
    }
}