OSDN Git Service

Inverse()が内部変数を破壊していた不具合を修正
[karinto/karinto.git] / Karinto / Numeric / Matrix.cs
index 64c4e44..15f984d 100755 (executable)
@@ -142,7 +142,7 @@ namespace Karinto.Numeric
             if (elements.Length != (row * column))\r
             {\r
                 throw new ArgumentException(\r
-                    "The Length of 'elements' is inconsistent with 'row' and 'column'");\r
+                    "The length of 'elements' is inconsistent with 'row' and 'column'");\r
             }\r
             int i = 0;\r
             for (int r = 0; r < row; ++r)\r
@@ -514,31 +514,23 @@ namespace Karinto.Numeric
             T zero = Operator<T>.Zero;\r
             T[][] inv = new T[row][];\r
             T[][] rows = new T[row][];\r
-            if (!new T().Equals(zero))\r
+\r
+            for (int r = 0; r < row; ++r)\r
             {\r
-                for (int r = 0; r < row; ++r)\r
+                T[] vector = new T[col];\r
+                if (!new T().Equals(zero))\r
                 {\r
-                    T[] vector = new T[col];\r
                     for (int c = 0; c < col; ++c)\r
                     {\r
                         vector[c] = zero;\r
                     }\r
-                    vector[r] = one;\r
-                    inv[r] = vector;\r
-                    rows[r] = (T[])this[r];\r
-                }\r
-            }\r
-            else\r
-            {\r
-                for (int r = 0; r < row; ++r)\r
-                {\r
-                    T[] vector = new T[col];\r
-                    vector[r] = one;\r
-                    inv[r] = vector;\r
-                    rows[r] = (T[])this[r];\r
                 }\r
+                vector[r] = one;\r
+                inv[r] = vector;\r
+                rows[r] = (T[])this[r].Clone();\r
             }\r
 \r
+\r
             for (int i = 0; i < row; ++i)\r
             {\r
                 int pivotIndex = i;\r