[chronojump] Fixing LeastSquares method (unused yet)
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] Fixing LeastSquares method (unused yet)
- Date: Fri, 16 Sep 2016 10:07:26 +0000 (UTC)
commit 80cd7259ba1ad2ad338ab2756d61fefbfc09f964
Author: Xavier de Blas <xaviblas gmail com>
Date: Fri Sep 16 12:02:16 2016 +0200
Fixing LeastSquares method (unused yet)
src/Makefile.am | 1 +
src/gui/chronojump.cs | 2 +
src/utilMath.cs | 87 ++++++++++++++++++++++++++++++++-----------------
3 files changed, 60 insertions(+), 30 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 2596c54..00d159e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -162,6 +162,7 @@ SOURCES = \
utilEncoder.cs\
utilGtk.cs\
utilLanguage.cs\
+ utilMath.cs\
utilVideo.cs\
constants.cs\
report.cs\
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index b3a0e4c..bc02214 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -666,6 +666,8 @@ public partial class ChronoJumpWindow
label_version.Text = progVersion + buildDate;
LogB.Information("Build date:" + buildDate);
+ LeastSquares ls = new LeastSquares();
+ LogB.Information(string.Format("coef = {0} {1} {2}", ls.Coef[0], ls.Coef[1], ls.Coef[2]));
/*
* start a ping in other thread
diff --git a/src/utilMath.cs b/src/utilMath.cs
index 846e2d8..8bf4bb9 100644
--- a/src/utilMath.cs
+++ b/src/utilMath.cs
@@ -19,6 +19,28 @@
* Copyright (C) 2016 Xavier de Blas <xaviblas gmail com>
*/
+using System.Collections.Generic; //List<T>
+
+public class Point
+{
+ double x;
+ double y;
+
+ public Point(double x, double y)
+ {
+ this.x = x;
+ this.y = y;
+ }
+
+ public double X {
+ get { return x; }
+ }
+
+ public double Y {
+ get { return y; }
+ }
+}
+
public class LeastSquares
{
//WIP
@@ -31,51 +53,56 @@ public class LeastSquares
calculate();
}
- private double [] calculate()
+ private void calculate()
{
- int numElements = 3;
- double [numElements,2] measures = { //TODO: pass this values
- { 20,30,40 },
- { 5,7,9 } };
-
- double [3] B = new double[3];
- for(int i = 0; i++; i < 3){
- B[0] = B[0] + measures[i][1];
- B[1] = B[0] + measures[i][0]*measures[i][1];
- B[2] = B[0] + measures[i][0]*measures[i][0]*measures[i][1];
+ //TODO: pass this values
+ List<Point> measures = new List<Point> {
+ new Point(1, 10.3214), new Point(2, 13.3214), new Point(3, 18.3214),
+ new Point(4, 25.3214), new Point(5, 34.3214), new Point(6, 45.3214),
+ new Point(7, 58.3214), new Point(8, 73.3214), new Point(9, 90.3214), new
Point(10, 109.3214) };
+
+ int numMeasures = measures.Count;
+
+ double [] B = new double[3];
+ for(int i = 0; i < numMeasures; i++){
+ B[0] = B[0] + measures[i].Y;
+ B[1] = B[0] + measures[i].X * measures[i].Y;
+ B[2] = B[0] + measures[i].X * measures[i].X * measures[i].Y;
}
+ LogB.Information(string.Format("B = {0} {1} {2}", B[0], B[1], B[2]));
+
double sumX = 0; //sumatory of the X values
double sumX2 = 0; //sumatory of the squared X values
double sumX3 = 0; //sumatory of the cubic X values
- for(int i = 0; i++; i < numElements){
- sumX = sumX + measures[i][0];
- sumX2 = sumX2 + measures[i][0]*measures[i][0];
- sumX3 = sumX3 + measures[i][0]*measures[i][0]*measures[i][0];
+ for(int i = 0; i < numMeasures; i++){
+ sumX = sumX + measures[i].X;
+ sumX2 = sumX2 + measures[i].X * measures[i].X;
+ sumX3 = sumX3 + measures[i].X * measures[i].X * measures[i].X;
}
- double detA = numElements*sumX2*sumX3 + 2*sumX*sumX2*sumX3 - sumX2*sumX2*sumX2 -
sumX2*sumX2*sumX3 - numElements*sumX3*sumX3;
+ double detA = numMeasures*sumX2*sumX3 + 2*sumX*sumX2*sumX3 - sumX2*sumX2*sumX2 -
sumX2*sumX2*sumX3 - numMeasures*sumX3*sumX3;
if(detA != 0){
- double [3][3] invA = new double[3][3];
+ double [,] invA = new double[3,3];
- invA[0][0] = ( sumX2*sumX3 - sumX3*sumX3) / detA;
- invA[0][1] = (-sumX*sumX3 + sumX2*sumX3) / detA;
- invA[0][2] = ( sumX*sumX3 - sumX2*sumX2) / detA;
- invA[1][1] = ( numElements*sumX3 - sumX2*sumX2) / detA;
- invA[1][2] = (-numElements*sumX3 + sumX*sumX2 ) / detA;
- invA[2][2] = ( numElements*sumX2 - sumX*sumX ) / detA;
+ invA[0,0] = ( sumX2*sumX3 - sumX3*sumX3) / detA;
+ invA[0,1] = (-sumX*sumX3 + sumX2*sumX3) / detA;
+ invA[0,2] = ( sumX*sumX3 - sumX2*sumX2) / detA;
+ invA[1,1] = ( numMeasures*sumX3 - sumX2*sumX2) / detA;
+ invA[1,2] = (-numMeasures*sumX3 + sumX*sumX2 ) / detA;
+ invA[2,2] = ( numMeasures*sumX2 - sumX*sumX ) / detA;
//Simetric matrix
- invA[1][0] = invA[0][1];
- invA[2][0] = invA[0][2];
- invA[2][1] = invA[1][2];
+ invA[1,0] = invA[0,1];
+ invA[2,0] = invA[0,2];
+ invA[2,1] = invA[1,2];
//coef = invA * B
- double [3] coef = new double[3];
- coef[0] = invA[0][0]*B[0] + invA[0][1]*B[1] + invA[0][2]*B[2];
- coef[1] = invA[1][0]*B[0] + invA[1][1]*B[1] + invA[1][2]*B[2];
- coef[2] = invA[2][0]*B[0] + invA[2][1]*B[1] + invA[2][2]*B[2];
+ double [] coef = new double[3];
+ coef[0] = invA[0,0]*B[0] + invA[0,1]*B[1] + invA[0,2]*B[2];
+ coef[1] = invA[1,0]*B[0] + invA[1,1]*B[1] + invA[1,2]*B[2];
+ coef[2] = invA[2,0]*B[0] + invA[2,1]*B[1] + invA[2,2]*B[2];
Success = true;
Coef = coef;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]