2 using System.Collections.Generic;
\r
3 using System.Collections.ObjectModel;
\r
6 using System.Windows;
\r
7 using System.Windows.Controls;
\r
8 using System.Windows.Documents;
\r
9 using System.Windows.Input;
\r
10 using System.Windows.Media;
\r
11 using System.Windows.Media.Animation;
\r
12 using System.Windows.Shapes;
\r
14 namespace PsychlopsSilverlight4.Pages
\r
16 public partial class BinomialSolver : ChildWindow
\r
19 Psychlops.Solver.Constants.Func1 func1;
\r
20 Psychlops.Solver.Constants.Func2 func2;
\r
21 Psychlops.Solver.Constants.Func3 func3;
\r
24 public ObservableCollection<Data> data = new ObservableCollection<Data>();
\r
25 public ObservableCollection<Data> fitted = new ObservableCollection<Data>();
\r
26 public ObservableCollection<Data> data_ { get { return data; } }
\r
27 public ObservableCollection<Data> fitted_ { get { return fitted; } }
\r
30 public BinomialSolver(Psychlops.Solver.Constants.Func1 f)
\r
32 InitializeComponent();
\r
37 public BinomialSolver(Psychlops.Solver.Constants.Func2 f)
\r
39 InitializeComponent();
\r
44 public BinomialSolver(Psychlops.Solver.Constants.Func3 f)
\r
46 InitializeComponent();
\r
51 public void initialize()
\r
53 dataGrid.RowHeight = 20;
\r
54 data = Data.GetDataList();
\r
55 dataGrid.ItemsSource = data;
\r
57 chart1.DataContext = data;
\r
58 solver = new Psychlops.Solver.BinomialLikelihood();
\r
62 public double c_abscissa { get; set; }
\r
63 public double c_ratio { get; set; }
\r
64 public double abscissa { get; set; }
\r
65 public int positive { get; set; }
\r
66 public int negative { get; set; }
\r
67 public double ratio { get { return (double)(positive) / (positive+negative); } }
\r
70 public Data(double absc, int posi, int nega)
\r
72 this.abscissa = absc;
\r
73 this.positive = posi;
\r
74 this.negative = nega;
\r
79 public static ObservableCollection<Data> GetDataList()
\r
81 return new ObservableCollection<Data>(new Data[] {
\r
82 new Data(-5, 0, 10),
\r
88 new Data(10, 10, 0)
\r
93 private void OKButton_Click(object sender, RoutedEventArgs e)
\r
95 this.DialogResult = true;
\r
98 double minimum, maximum;
\r
99 Psychlops.Solver.BinomialLikelihood solver;
\r
100 private void CalcButton_Click(object sender, RoutedEventArgs e)
\r
102 var ber = new Psychlops.Solver.BernoulliProcess();
\r
103 ber.elems = new Psychlops.Solver.BernoulliProcess.Data[data.Count];
\r
106 minimum = Double.PositiveInfinity;
\r
107 maximum = Double.NegativeInfinity;
\r
108 foreach (var d in data)
\r
110 if (d.abscissa < minimum) { minimum = d.abscissa; }
\r
111 if (d.abscissa > maximum) { maximum = d.abscissa; }
\r
112 ber.elems[i].x = d.abscissa;
\r
113 ber.elems[i].pos = d.positive;
\r
114 ber.elems[i].neg = d.negative;
\r
121 Psychlops.Interval itvl = new Psychlops.Interval();
\r
122 solver.itvl[0] = (-100 <= itvl <= 100);
\r
123 solver.itvl[1] = (-100 <= itvl <= 100);
\r
124 solver.itvl[2] = (-100 <= itvl <= 100);
\r
126 switch (func_selected)
\r
129 solver.begin(func1);
\r
132 solver.begin(func2);
\r
135 solver.begin(func3);
\r
141 private void reFunc()
\r
144 fitted = new ObservableCollection<Data>();
\r
145 foreach (var d in data)
\r
147 dd = new Data(d.abscissa, d.positive, d.negative);
\r
148 dd.c_abscissa = minimum;
\r
152 switch (func_selected)
\r
155 for (double j = minimum; j < maximum; j += (maximum - minimum)/ 100 )
\r
157 dd = new Data(0, 0, 0);
\r
159 dd.c_ratio = func1(j, solver.champ[0]);
\r
164 for (double j = minimum; j < maximum; j += (maximum - minimum)/ 100 )
\r
166 dd = new Data(0, 0, 0);
\r
168 dd.c_ratio = func2(j, solver.champ[0], solver.champ[1]);
\r
173 for (double j = minimum; j < maximum; j += (maximum - minimum)/ 100 )
\r
175 dd = new Data(0, 0, 0);
\r
177 dd.c_ratio = func3(j, solver.champ[0], solver.champ[1], solver.champ[2]);
\r
184 chart1.DataContext = null;
\r
185 chart1.DataContext = fitted;
\r
187 OrdinateSlider.Maximum = 1.0;
\r
188 OrdinateSlider.Minimum = 0.0;
\r
189 OrdinateSlider.Value = 0.5;
\r
191 AbscissaSlider.Maximum = maximum;
\r
192 AbscissaSlider.Minimum = minimum;
\r
193 AbscissaSlider.Value = solver.champ[0];
\r
195 Parameter0.Text = String.Format("{0:D4}", solver.champ[0].ToString());
\r
196 Parameter1.Text = String.Format("{0, 4:F}", solver.champ[1].ToString());
\r
198 //chart1.UpdateLayout();
\r
201 private void AddConditionButton_Click(object sender, RoutedEventArgs e)
\r
203 data.Add(new Data(0, 0, 0));
\r
204 this.UpdateLayout();
\r
207 private void AbscissaSlider_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
\r
209 solver.champ[0] = AbscissaSlider.Value;
\r