SetElement() public method

public SetElement ( int nRow, int nCol, double value ) : bool
nRow int
nCol int
value double
return bool
Exemplo n.º 1
0
        /**
         * �����ת��
         *
         * @return Matrix�ͣ�ָ������ת�þ���
         */
        public Matrix Transpose()
        {
            // ����Ŀ�����
            Matrix	Trans = new Matrix(numColumns, numRows);

            // ת�ø�Ԫ��
            for (int i = 0 ; i < numRows ; ++i)
            {
                for (int j = 0 ; j < numColumns ; ++j)
                    Trans.SetElement(j, i, GetElement(i, j)) ;
            }

            return Trans;
        }
Exemplo n.º 2
0
        /**
         * ʵ�־���ļ���
         *
         * @param other - ��ָ����������ľ���
         * @return Matrix�ͣ�ָ��������other���֮��
         * @����������/������ƥ�䣬����׳��쳣
         */
        public Matrix Subtract(Matrix other)
        {
            if (numColumns != other.GetNumColumns() ||
                numRows != other.GetNumRows())
                throw new Exception("�������/������ƥ�䡣");

            // ����������
            Matrix	result = new Matrix(this) ;		// ��������

            // ���������
            for (int i = 0 ; i < numRows ; ++i)
            {
                for (int j = 0 ; j <  numColumns; ++j)
                    result.SetElement(i, j, result.GetElement(i, j) - other.GetElement(i, j)) ;
            }

            return result ;
        }
Exemplo n.º 3
0
        /**
         * ������ij˷�
         *
         * @param AR - ��߸������ʵ������
         * @param AI - ��߸�������鲿����
         * @param BR - �ұ߸������ʵ������
         * @param BI - �ұ߸�������鲿����
         * @param CR - �˻��������ʵ������
         * @param CI - �˻���������鲿����
         * @return bool�ͣ�������˷��Ƿ�ɹ�
         */
        public bool Multiply(Matrix AR,  Matrix AI,  Matrix BR,  Matrix BI, Matrix CR, Matrix CI)
        {
            // ���ȼ���������Ƿ����Ҫ��
            if (AR.GetNumColumns() != AI.GetNumColumns() ||
                AR.GetNumRows() != AI.GetNumRows() ||
                BR.GetNumColumns() != BI.GetNumColumns() ||
                BR.GetNumRows() != BI.GetNumRows() ||
                AR.GetNumColumns() != BR.GetNumRows())
                return false;

            // ����˻�����ʵ��������鲿����
            Matrix mtxCR = new Matrix(AR.GetNumRows(), BR.GetNumColumns());
            Matrix mtxCI = new Matrix(AR.GetNumRows(), BR.GetNumColumns());
            // ���������
            for (int i=0; i<AR.GetNumRows(); ++i)
            {
                for (int j=0; j<BR.GetNumColumns(); ++j)
                {
                    double vr = 0;
                    double vi = 0;
                    for (int k =0; k<AR.GetNumColumns(); ++k)
                    {
                        double p = AR.GetElement(i, k) * BR.GetElement(k, j);
                        double q = AI.GetElement(i, k) * BI.GetElement(k, j);
                        double s = (AR.GetElement(i, k) + AI.GetElement(i, k)) * (BR.GetElement(k, j) + BI.GetElement(k, j));
                        vr += p - q;
                        vi += s - p - q;
                    }
                    mtxCR.SetElement(i, j, vr);
                    mtxCI.SetElement(i, j, vi);
                }
            }

            CR = mtxCR;
            CI = mtxCI;

            return true;
        }
Exemplo n.º 4
0
        /**
         * ʵ�־���ij˷�
         *
         * @param other - ��ָ��������˵ľ���
         * @return Matrix�ͣ�ָ��������other���֮��
         * @����������/������ƥ�䣬����׳��쳣
         */
        public Matrix Multiply(Matrix other)
        {
            // ���ȼ���������Ƿ����Ҫ��
            if (numColumns != other.GetNumRows())
                throw new Exception("�������/������ƥ�䡣");

            // ruct the object we are going to return
            Matrix	result = new Matrix(numRows, other.GetNumColumns());

            // ����˷�����
            //
            // [A][B][C]   [G][H]     [A*G + B*I + C*K][A*H + B*J + C*L]
            // [D][E][F] * [I][J] =   [D*G + E*I + F*K][D*H + E*J + F*L]
            //             [K][L]
            //
            double	value ;
            for (int i = 0 ; i < result.GetNumRows() ; ++i)
            {
                for (int j = 0 ; j < other.GetNumColumns() ; ++j)
                {
                    value = 0.0 ;
                    for (int k = 0 ; k < numColumns ; ++k)
                    {
                        value += GetElement(i, k) * other.GetElement(k, j) ;
                    }

                    result.SetElement(i, j, value) ;
                }
            }

            return result ;
        }
Exemplo n.º 5
0
        /**
         * ʵ�־��������
         *
         * @param value - ��ָ��������˵�ʵ��
         * @return Matrix�ͣ�ָ��������value���֮��
         */
        public Matrix Multiply(double value)
        {
            // ����Ŀ�����
            Matrix	result = new Matrix(this) ;		// copy ourselves

            // ��������
            for (int i = 0 ; i < numRows ; ++i)
            {
                for (int j = 0 ; j <  numColumns; ++j)
                    result.SetElement(i, j, result.GetElement(i, j) * value) ;
            }

            return result ;
        }
Exemplo n.º 6
0
        /**
         * Լ���Գƾ���Ϊ�Գ����Խ���ĺ�˹�ɶ��±任��
         *
         * @param mtxQ - ���غ�˹�ɶ��±任�ij˻�����Q
         * @param mtxT - ������õĶԳ����Խ���
         * @param dblB - һά���飬����Ϊ����Ľ��������ضԳ����Խ�������Խ���Ԫ��
         * @param dblC - һά���飬����Ϊ����Ľ�����ǰn-1��Ԫ�ط��ضԳ����Խ����
         *               �ζԽ���Ԫ��
         * @return bool�ͣ�����Ƿ�ɹ�
         */
        public bool MakeSymTri(Matrix mtxQ, Matrix mtxT, double[] dblB, double[] dblC)
        {
            int i,j,k,u;
            double h,f,g,h2;

            // ��ʼ������Q��T
            if (! mtxQ.Init(numColumns, numColumns) ||
                ! mtxT.Init(numColumns, numColumns))
                return false;

            if (dblB == null || dblC == null)
                return false;

            for (i=0; i<=numColumns-1; i++)
            {
                for (j=0; j<=numColumns-1; j++)
                {
                    u=i*numColumns+j;
                    mtxQ.elements[u]=elements[u];
                }
            }

            for (i=numColumns-1; i>=1; i--)
            {
                h=0.0;
                if (i>1)
                {
                    for (k=0; k<=i-1; k++)
                    {
                        u=i*numColumns+k;
                        h=h+mtxQ.elements[u]*mtxQ.elements[u];
                    }
                }

                if (h == 0.0)
                {
                    dblC[i]=0.0;
                    if (i==1)
                        dblC[i]=mtxQ.elements[i*numColumns+i-1];
                    dblB[i]=0.0;
                }
                else
                {
                    dblC[i]=Math.Sqrt(h);
                    u=i*numColumns+i-1;
                    if (mtxQ.elements[u]>0.0)
                        dblC[i]=-dblC[i];

                    h=h-mtxQ.elements[u]*dblC[i];
                    mtxQ.elements[u]=mtxQ.elements[u]-dblC[i];
                    f=0.0;
                    for (j=0; j<=i-1; j++)
                    {
                        mtxQ.elements[j*numColumns+i]=mtxQ.elements[i*numColumns+j]/h;
                        g=0.0;
                        for (k=0; k<=j; k++)
                            g=g+mtxQ.elements[j*numColumns+k]*mtxQ.elements[i*numColumns+k];

                        if (j+1<=i-1)
                            for (k=j+1; k<=i-1; k++)
                                g=g+mtxQ.elements[k*numColumns+j]*mtxQ.elements[i*numColumns+k];

                        dblC[j]=g/h;
                        f=f+g*mtxQ.elements[j*numColumns+i];
                    }

                    h2=f/(h+h);
                    for (j=0; j<=i-1; j++)
                    {
                        f=mtxQ.elements[i*numColumns+j];
                        g=dblC[j]-h2*f;
                        dblC[j]=g;
                        for (k=0; k<=j; k++)
                        {
                            u=j*numColumns+k;
                            mtxQ.elements[u]=mtxQ.elements[u]-f*dblC[k]-g*mtxQ.elements[i*numColumns+k];
                        }
                    }

                    dblB[i]=h;
                }
            }

            for (i=0; i<=numColumns-2; i++)
                dblC[i]=dblC[i+1];

            dblC[numColumns-1]=0.0;
            dblB[0]=0.0;
            for (i=0; i<=numColumns-1; i++)
            {
                if ((dblB[i]!=(double)0.0) && (i-1>=0))
                {
                    for (j=0; j<=i-1; j++)
                    {
                        g=0.0;
                        for (k=0; k<=i-1; k++)
                            g=g+mtxQ.elements[i*numColumns+k]*mtxQ.elements[k*numColumns+j];

                        for (k=0; k<=i-1; k++)
                        {
                            u=k*numColumns+j;
                            mtxQ.elements[u]=mtxQ.elements[u]-g*mtxQ.elements[k*numColumns+i];
                        }
                    }
                }

                u=i*numColumns+i;
                dblB[i]=mtxQ.elements[u]; mtxQ.elements[u]=1.0;
                if (i-1>=0)
                {
                    for (j=0; j<=i-1; j++)
                    {
                        mtxQ.elements[i*numColumns+j]=0.0;
                        mtxQ.elements[j*numColumns+i]=0.0;
                    }
                }
            }

            // ����Գ����ԽǾ���
            for (i=0; i<numColumns; ++i)
            {
                for (j=0; j<numColumns; ++j)
                {
                    mtxT.SetElement(i, j, 0);
                    k = i - j;
                    if (k == 0)
                        mtxT.SetElement(i, j, dblB[j]);
                    else if (k == 1)
                        mtxT.SetElement(i, j, dblC[j]);
                    else if (k == -1)
                        mtxT.SetElement(i, j, dblC[i]);
                }
            }

            return true;
        }