OSDN Git Service

solver
[psychlops/silverlight.git] / dev4 / psychlops / extention / math / solver.cs
index eca5c7a..0a149ec 100644 (file)
@@ -38,7 +38,8 @@ namespace Psychlops
                        }\r
                        public static double combination(int nn, int kk)\r
                        {\r
-                               //return (double)(Int64)(factorial(n) / (factorial(kk) * factorial(n - kk)));\r
+                               return (double)(Int64)(factorial(nn) / (factorial(kk) * factorial(nn - kk)));\r
+                               /*\r
                                BigInt n = new BigInt((Int64)nn, new PrecisionSpec());\r
                                BigInt k = new BigInt((Int64)kk, new PrecisionSpec());\r
                                BigInt n_k = n - k;\r
@@ -46,6 +47,7 @@ namespace Psychlops
                                k.Factorial();\r
                                n_k.Factorial();\r
                                return (double)(Int64)(n / (k * n_k) );\r
+                                * */\r
                        }\r
                        public static double likelihood(double pp, int yes, int no)\r
                        {\r
@@ -124,18 +126,19 @@ namespace Psychlops
                        public void waitLoop()\r
                        {\r
                                finished = false;\r
-                               for(int i=0; i<10; i++) {\r
+                               for (int i = 0; i < CONST.MAX_ARG; i++)\r
+                               {\r
                                        champ[i] = 0;\r
                                }\r
                                current = this;\r
                                started = false;\r
                        }\r
 \r
-                       public void loop1() { waitLoop(); th = new Thread(new ThreadStart(loop1_)); }\r
-                       public void loop2() { waitLoop(); th = new Thread(new ThreadStart(loop2_)); }\r
-                       public void loop3() { waitLoop(); th = new Thread(new ThreadStart(loop3_)); }\r
-                       public void loop4() { waitLoop(); th = new Thread(new ThreadStart(loop4_)); }\r
-                       public void loop5() { waitLoop(); th = new Thread(new ThreadStart(loop5_)); }\r
+                       public void loop1() { waitLoop(); th = new Thread(new ThreadStart(loop1_)); th.Start(); }\r
+                       public void loop2() { waitLoop(); th = new Thread(new ThreadStart(loop2_)); th.Start(); }\r
+                       public void loop3() { waitLoop(); th = new Thread(new ThreadStart(loop3_)); th.Start(); }\r
+                       public void loop4() { waitLoop(); th = new Thread(new ThreadStart(loop4_)); th.Start(); }\r
+                       public void loop5() { waitLoop(); th = new Thread(new ThreadStart(loop5_)); th.Start(); }\r
                        void loop1_()\r
                        {\r
                                started = true;\r
@@ -160,7 +163,7 @@ namespace Psychlops
                        void loop2_()\r
                        {\r
                                started = true;\r
-                               double p;\r
+                               double p = 0.0;\r
                                double like = 1.0;\r
                                champ_like = 0.0;\r
                                int L = data.length;\r
@@ -178,6 +181,7 @@ namespace Psychlops
                                                {\r
                                                        champ_like = like;\r
                                                        champ[0] = a;\r
+                                                       champ[1] = b;\r
                                                }\r
                                        }\r
                                }\r
@@ -206,6 +210,8 @@ namespace Psychlops
                                                        {\r
                                                                champ_like = like;\r
                                                                champ[0] = a;\r
+                                                               champ[1] = b;\r
+                                                               champ[1] = c;\r
                                                        }\r
                                                }\r
                                        }\r
@@ -226,8 +232,36 @@ namespace Psychlops
 \r
 \r
 \r
-               class BinomialLikelihood\r
+               public class BinomialLikelihood\r
                {\r
+                       public static void showWindow(Constants.Func1 f)\r
+                       {\r
+                               Main.canvas.api_canvas.Dispatcher.BeginInvoke(new Action<Constants.Func1>(showWindow_), f);\r
+                       }\r
+                       internal static void showWindow_(Constants.Func1 f)\r
+                       {\r
+                               System.Windows.Controls.ChildWindow page = new PsychlopsSilverlight4.Pages.BinomialSolver(f);\r
+                               page.Show();\r
+                       }\r
+                       public static void showWindow(Constants.Func2 f)\r
+                       {\r
+                               Main.canvas.api_canvas.Dispatcher.BeginInvoke(new Action<Constants.Func2>(showWindow_), f);\r
+                       }\r
+                       internal static void showWindow_(Constants.Func2 f)\r
+                       {\r
+                               System.Windows.Controls.ChildWindow page = new PsychlopsSilverlight4.Pages.BinomialSolver(f);\r
+                               page.Show();\r
+                       }\r
+                       public static void showWindow(Constants.Func3 f)\r
+                       {\r
+                               Main.canvas.api_canvas.Dispatcher.BeginInvoke(new Action<Constants.Func3>(showWindow_), f);\r
+                       }\r
+                       internal static void showWindow_(Constants.Func3 f)\r
+                       {\r
+                               System.Windows.Controls.ChildWindow page = new PsychlopsSilverlight4.Pages.BinomialSolver(f);\r
+                               page.Show();\r
+                       }\r
+\r
                        public int iteration;\r
 \r
                        public Interval[] itvl;\r
@@ -258,6 +292,7 @@ namespace Psychlops
                                func1 = d_func;\r
 \r
                                BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4];\r
+                               for (int i = 0; i < 4; i++) { l[i] = new BinomialLikelihoodThread(); }\r
 \r
                                for (int k = 0; k < iteration; k++)\r
                                {\r
@@ -276,6 +311,7 @@ namespace Psychlops
                                func2 = d_func;\r
 \r
                                BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4];\r
+                               for (int i = 0; i < 4; i++) { l[i] = new BinomialLikelihoodThread(); }\r
 \r
                                for (int k = 0; k < iteration; k++)\r
                                {\r
@@ -294,6 +330,7 @@ namespace Psychlops
                                func3 = d_func;\r
 \r
                                BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4];\r
+                               for (int i = 0; i < 4; i++) { l[i] = new BinomialLikelihoodThread(); }\r
 \r
                                for (int k = 0; k < iteration; k++)\r
                                {\r
@@ -340,12 +377,11 @@ namespace Psychlops
 \r
                        void end_base(BinomialLikelihoodThread[] l)\r
                        {\r
-                               for (int i = 0; i < 4; i++)\r
-                               {\r
-                                       l[i].th.Join();\r
-                               }\r
+                               //for (int i = 0; i < 4; i++) { l[i].th.Join(); }\r
+                               while (!l[0].finished || !l[1].finished || !l[2].finished || !l[3].finished) { Thread.Sleep(100);  } \r
 \r
                                for(int j=0; j<Constants.LIMIT; j++) { champ[j] = 0; }\r
+                               champ_like = 0.0;\r
                                for(int i=0; i<4; i++) {\r
                                        if(champ_like < l[i].champ_like) {\r
                                                champ_like = l[i].champ_like;\r