OSDN Git Service

321
[psychlops/silverlight.git] / dev4 / psychlops / extention / math / solver.cs
index e26365f..eca5c7a 100644 (file)
@@ -7,6 +7,10 @@ namespace Psychlops
 \r
        namespace Solver\r
        {\r
+               internal static class CONST\r
+               {\r
+                       public static readonly uint MAX_ARG = 5;\r
+               }\r
 \r
                \r
                static public class Constants\r
@@ -112,6 +116,10 @@ namespace Psychlops
 \r
                        public BinomialLikelihoodThread()\r
                        {\r
+                               itvl = new Interval[CONST.MAX_ARG];\r
+                               step = new double[CONST.MAX_ARG];\r
+                               champ = new double[CONST.MAX_ARG];\r
+                               data = new BernoulliProcess();\r
                        }\r
                        public void waitLoop()\r
                        {\r
@@ -237,6 +245,9 @@ namespace Psychlops
 \r
                        public BinomialLikelihood()\r
                        {\r
+                               itvl = new Interval[CONST.MAX_ARG];\r
+                               step = new double[CONST.MAX_ARG];\r
+                               champ = new double[CONST.MAX_ARG];\r
                                iteration = 2;\r
                        }\r
 \r
@@ -248,11 +259,8 @@ namespace Psychlops
 \r
                                BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4];\r
 \r
-                               double r, low, high;\r
                                for (int k = 0; k < iteration; k++)\r
                                {\r
-                                       champ_like = 0;\r
-\r
                                        begin_base(l);\r
                                        for (int i = 0; i < 4; i++)\r
                                        {\r
@@ -261,14 +269,6 @@ namespace Psychlops
                                                l[i].loop1();\r
                                        }\r
                                        end_base(l);\r
-\r
-                                       for (int j = 0; j < Constants.LIMIT; j++)\r
-                                       {\r
-                                               r = itvl[j].end.val - itvl[j].begin.val;\r
-                                               low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0;\r
-                                               high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0;\r
-                                               itvl[j] = new Interval(low, high);\r
-                                       }\r
                                }\r
                        }\r
                        public void begin(Constants.Func2 d_func)\r
@@ -277,11 +277,8 @@ namespace Psychlops
 \r
                                BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4];\r
 \r
-                               double r, low, high;\r
                                for (int k = 0; k < iteration; k++)\r
                                {\r
-                                       champ_like = 0;\r
-\r
                                        begin_base(l);\r
                                        for (int i = 0; i < 4; i++)\r
                                        {\r
@@ -290,14 +287,6 @@ namespace Psychlops
                                                l[i].loop2();\r
                                        }\r
                                        end_base(l);\r
-\r
-                                       for (int j = 0; j < Constants.LIMIT; j++)\r
-                                       {\r
-                                               r = itvl[j].end.val - itvl[j].begin.val;\r
-                                               low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0;\r
-                                               high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0;\r
-                                               itvl[j] = new Interval(low, high);\r
-                                       }\r
                                }\r
                        }\r
                        public void begin(Constants.Func3 d_func)\r
@@ -306,11 +295,8 @@ namespace Psychlops
 \r
                                BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4];\r
 \r
-                               double r, low, high;\r
                                for (int k = 0; k < iteration; k++)\r
                                {\r
-                                       champ_like = 0;\r
-\r
                                        begin_base(l);\r
                                        for(int i=0; i<4; i++) {\r
                                                l[i].data = data;\r
@@ -318,14 +304,6 @@ namespace Psychlops
                                                l[i].loop3();\r
                                        }\r
                                        end_base(l);\r
-\r
-                                       for (int j = 0; j < Constants.LIMIT; j++)\r
-                                       {\r
-                                               r = itvl[j].end.val - itvl[j].begin.val;\r
-                                               low  = champ[j]-r/8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j]-r/8.0;\r
-                                               high = champ[j]+r/8.0 > itvl[j].end.val   ? itvl[j].end.val   : champ[j]+r/8.0;\r
-                                               itvl[j] = new Interval(low, high);\r
-                                       }\r
                                }\r
                        }\r
 \r
@@ -338,6 +316,8 @@ namespace Psychlops
 \r
                        void begin_base(BinomialLikelihoodThread[] l)\r
                        {\r
+                               champ_like = 0;\r
+\r
                                data.length = data.elems.GetLength(0);\r
                                for (int i = 0; i < data.elems.GetLength(0); i++)\r
                                {\r
@@ -373,6 +353,15 @@ namespace Psychlops
                                        }\r
                                }\r
 \r
+                               double r, low, high;\r
+                               for (int j = 0; j < Constants.LIMIT; j++)\r
+                               {\r
+                                       r = itvl[j].end.val - itvl[j].begin.val;\r
+                                       low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0;\r
+                                       high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0;\r
+                                       itvl[j] = new Interval(low, high);\r
+                               }\r
+\r
                        }\r
 \r
 \r