コード例 #1
0
ファイル: SparseMatrix.cs プロジェクト: jawetzel/cmpsProjects
        public SparseMatrix Product(SparseMatrix SeccondMatrix)
        {
            RowHeadNode    MatrixARow    = this.StartRowHeadNode;
            ColumnHeadNode MatrixBColumn = SeccondMatrix.StartColumnHeadNode;
            SparseMatrix   ReturnMatrix  = new SparseMatrix(this.FixedNumRows, SeccondMatrix.FixedNumColumns);

            do
            {
                ValueNode NodeA = MatrixARow.GetFirst();
                ValueNode NodeB = MatrixBColumn.GetFirst();
                do
                {
                    if (NodeA == null || NodeB == null)
                    {
                        break;
                    }
                    if (NodeA.Column > NodeB.Row)
                    {
                        NodeB = (ValueNode)NodeB.NextInRow;
                    }
                    if (NodeA.Column < NodeB.Row)
                    {
                        NodeA = (ValueNode)NodeA.NextInColumn;
                    }
                    if (NodeA.Column == NodeB.Row)
                    {
                        ReturnMatrix.Insert(NodeA.Column, NodeA.Row, (NodeA.Value * NodeB.Value));
                        NodeB = (ValueNode)NodeB.NextInRow;
                        NodeA = (ValueNode)NodeA.NextInColumn;
                    }
                }while (NodeA != MatrixARow.GetFirst() && NodeB != MatrixBColumn.GetFirst());

                MatrixARow    = (RowHeadNode)MatrixARow.GetNext();
                MatrixBColumn = (ColumnHeadNode)MatrixBColumn.GetNext();
            }while (MatrixARow != this.StartRowHeadNode && MatrixBColumn != SeccondMatrix.StartColumnHeadNode);
            return(ReturnMatrix);
        }