X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=dev4%2Fpsychlops%2Fextention%2Fmath%2Fsolver.cs;fp=dev4%2Fpsychlops%2Fextention%2Fmath%2Fsolver.cs;h=eca5c7af96ee05c23ba78efd10c3beb3c2ebda5f;hb=14b5f406aebde0b4bdc36a94f0c315a2864a1fee;hp=e26365fcd9d4a5d5f457a23e1313471d144bf30c;hpb=397aea915b85fc9457e2131db7ca78d8269b30b0;p=psychlops%2Fsilverlight.git diff --git a/dev4/psychlops/extention/math/solver.cs b/dev4/psychlops/extention/math/solver.cs index e26365f..eca5c7a 100644 --- a/dev4/psychlops/extention/math/solver.cs +++ b/dev4/psychlops/extention/math/solver.cs @@ -7,6 +7,10 @@ namespace Psychlops namespace Solver { + internal static class CONST + { + public static readonly uint MAX_ARG = 5; + } static public class Constants @@ -112,6 +116,10 @@ namespace Psychlops public BinomialLikelihoodThread() { + itvl = new Interval[CONST.MAX_ARG]; + step = new double[CONST.MAX_ARG]; + champ = new double[CONST.MAX_ARG]; + data = new BernoulliProcess(); } public void waitLoop() { @@ -237,6 +245,9 @@ namespace Psychlops public BinomialLikelihood() { + itvl = new Interval[CONST.MAX_ARG]; + step = new double[CONST.MAX_ARG]; + champ = new double[CONST.MAX_ARG]; iteration = 2; } @@ -248,11 +259,8 @@ namespace Psychlops BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4]; - double r, low, high; for (int k = 0; k < iteration; k++) { - champ_like = 0; - begin_base(l); for (int i = 0; i < 4; i++) { @@ -261,14 +269,6 @@ namespace Psychlops l[i].loop1(); } end_base(l); - - for (int j = 0; j < Constants.LIMIT; j++) - { - r = itvl[j].end.val - itvl[j].begin.val; - low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0; - high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0; - itvl[j] = new Interval(low, high); - } } } public void begin(Constants.Func2 d_func) @@ -277,11 +277,8 @@ namespace Psychlops BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4]; - double r, low, high; for (int k = 0; k < iteration; k++) { - champ_like = 0; - begin_base(l); for (int i = 0; i < 4; i++) { @@ -290,14 +287,6 @@ namespace Psychlops l[i].loop2(); } end_base(l); - - for (int j = 0; j < Constants.LIMIT; j++) - { - r = itvl[j].end.val - itvl[j].begin.val; - low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0; - high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0; - itvl[j] = new Interval(low, high); - } } } public void begin(Constants.Func3 d_func) @@ -306,11 +295,8 @@ namespace Psychlops BinomialLikelihoodThread[] l = new BinomialLikelihoodThread[4]; - double r, low, high; for (int k = 0; k < iteration; k++) { - champ_like = 0; - begin_base(l); for(int i=0; i<4; i++) { l[i].data = data; @@ -318,14 +304,6 @@ namespace Psychlops l[i].loop3(); } end_base(l); - - for (int j = 0; j < Constants.LIMIT; j++) - { - r = itvl[j].end.val - itvl[j].begin.val; - low = champ[j]-r/8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j]-r/8.0; - high = champ[j]+r/8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j]+r/8.0; - itvl[j] = new Interval(low, high); - } } } @@ -338,6 +316,8 @@ namespace Psychlops void begin_base(BinomialLikelihoodThread[] l) { + champ_like = 0; + data.length = data.elems.GetLength(0); for (int i = 0; i < data.elems.GetLength(0); i++) { @@ -373,6 +353,15 @@ namespace Psychlops } } + double r, low, high; + for (int j = 0; j < Constants.LIMIT; j++) + { + r = itvl[j].end.val - itvl[j].begin.val; + low = champ[j] - r / 8.0 < itvl[j].begin.val ? itvl[j].begin.val : champ[j] - r / 8.0; + high = champ[j] + r / 8.0 > itvl[j].end.val ? itvl[j].end.val : champ[j] + r / 8.0; + itvl[j] = new Interval(low, high); + } + }