SplitQR() public method

public SplitQR ( Matrix mtxQ ) : bool
mtxQ Matrix
return bool
コード例 #1
0
ファイル: LEquations.cs プロジェクト: callme119/civil
        /**
         * ���������С��������ĺ�˹�ɶ��±任��
         *
         * @param mtxResult - Matrix���󣬷��ط���������
         * @param mtxQ - Matrix���󣬷��غ�˹�ɶ��±任��Q����
         * @param mtxR - Matrix���󣬷��غ�˹�ɶ��±任��R����
         * @return bool �ͣ�����������Ƿ�ɹ�
         */
        public bool GetRootsetMqr(Matrix mtxResult, Matrix mtxQ, Matrix mtxR)
        {
            int i,j;
            double d;

            // ������ķ�������δ֪������
            int m = mtxLECoef.GetNumRows();
            int n = mtxLECoef.GetNumColumns();
            // ���췽����
            if (m < n)
                return false;

            // ����������ʼ��Ϊ��������
            mtxResult.SetValue(mtxLEConst);
            double[] pDataConst = mtxResult.GetData();

            // ������ʱ��������QR�ֽ�
            mtxR.SetValue(mtxLECoef);
            double[] pDataCoef = mtxR.GetData();

            // QR�ֽ�
            if (! mtxR.SplitQR(mtxQ))
                return false;

            // ��ʱ������
            double[] c = new double[n];
            double[] q = mtxQ.GetData();

            // ���
            for (i=0; i<=n-1; i++)
            {
                d=0.0;
                for (j=0; j<=m-1; j++)
                    d=d+q[j*m+i]*pDataConst[j];

                c[i]=d;
            }

            pDataConst[n-1]=c[n-1]/pDataCoef[n*n-1];
            for (i=n-2; i>=0; i--)
            {
                d=0.0;
                for (j=i+1; j<=n-1; j++)
                    d=d+pDataCoef[i*n+j]*pDataConst[j];

                pDataConst[i]=(c[i]-d)/pDataCoef[i*n+i];
            }

            return true;
        }