File: fit_test.rb

package info (click to toggle)
ruby-gsl 2.1.0.3%2Bdfsg1-5
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 5,604 kB
  • sloc: ansic: 62,050; ruby: 15,845; sh: 19; makefile: 10
file content (101 lines) | stat: -rw-r--r-- 3,864 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
require 'test_helper'

class FitTest < GSL::TestCase

  def setup
    @x = GSL::Vector.alloc(1000)
    @y = GSL::Vector.alloc(1000)
    @w = GSL::Vector.alloc(1000)

    @x.stride = 2
    @w.stride = 3
    @y.stride = 5
  end

  def test_fit_1
    n = 36

    x = GSL::Vector.alloc(
      0.2, 337.4, 118.2, 884.6, 10.1, 226.5, 666.3, 996.3,
      448.6, 777.0, 558.2, 0.4, 0.6, 775.5, 666.9, 338.0,
      447.5, 11.6, 556.0, 228.1, 995.8, 887.6, 120.2, 0.3,
      0.3, 556.8, 339.1, 887.2, 999.0, 779.0, 11.1, 118.3,
      229.2, 669.1, 448.9, 0.5
    )

    y = GSL::Vector.alloc(
      0.1, 338.8, 118.1, 888.0, 9.2, 228.1, 668.5, 998.5,
      449.1, 778.9, 559.2, 0.3, 0.1, 778.1, 668.8, 339.3,
      448.9, 10.8, 557.7, 228.3, 998.0, 888.8, 119.6, 0.3,
      0.6, 557.6, 339.3, 888.0, 998.5, 778.9, 10.2, 117.6,
      228.9, 668.4, 449.2, 0.2
    )

    n.times { |i|
      @x.set(i, x[i])
      @w.set(i, 1.0)
      @y.set(i, y[i])
    }

    c0, c1, cov00, cov01, cov11, sumsq = GSL::Fit.linear(@x, @y, n)
    assert_rel c0,           -0.262323073774029,           1e-10, 'norris gsl_fit_linear c0'
    assert_rel c1,            1.00211681802045,            1e-10, 'norris gsl_fit_linear c1'
    assert_rel cov00, GSL.pow(0.232818234301152, 2.0),     1e-10, 'norris gsl_fit_linear cov00'
    assert_rel cov01,        -7.74327536339570e-05,        1e-10, 'norris gsl_fit_linear cov01'
    assert_rel cov11, GSL.pow(0.429796848199937E-03, 2.0), 1e-10, 'norris gsl_fit_linear cov11'
    assert_rel sumsq,        26.6173985294224,             1e-10, 'norris gsl_fit_linear sumsq'

    c0, c1, cov00, cov01, cov11, sumsq = GSL::Fit.wlinear(@x, @w, @y, n)
    assert_rel c0,    -0.262323073774029,     1e-10, 'norris gsl_fit_wlinear c0'
    assert_rel c1,     1.00211681802045,      1e-10, 'norris gsl_fit_wlinear c1'
    assert_rel cov00,  6.92384428759429e-02,  1e-10, 'norris gsl_fit_wlinear cov00'
    assert_rel cov01, -9.89095016390515e-05,  1e-10, 'norris gsl_fit_wlinear cov01'
    assert_rel cov11,  2.35960747164148e-07,  1e-10, 'norris gsl_fit_wlinear cov11'
    assert_rel sumsq, 26.6173985294224,       1e-10, 'norris gsl_fit_wlinear sumsq'
  end

  def test_fit_2
    n = 11
    x = GSL::Vector.alloc(60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70)
    y = GSL::Vector.alloc(130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140)

    n.times { |i|
      @x.set(i, x[i])
      @w.set(i, 1.0)
      @y.set(i, y[i])
    }

    c1, cov11, sumsq = GSL::Fit.mul(@x, @y, n)
    assert_rel c1,            2.07438016528926,            1e-10, 'noint1 gsl_fit_mul c1'
    assert_rel cov11, GSL.pow(0.165289256198347E-01, 2.0), 1e-10, 'noint1 gsl_fit_mul cov11'
    assert_rel sumsq,       127.272727272727,              1e-10, 'noint1 gsl_fit_mul sumsq'

    c1, cov11, sumsq = GSL::Fit.wmul(@x, @w, @y, n)
    assert_rel c1,      2.07438016528926,     1e-10, 'noint1 gsl_fit_wmul c1'
    assert_rel cov11,   2.14661371686165e-05, 1e-10, 'noint1 gsl_fit_wmul cov11'
    assert_rel sumsq, 127.272727272727,       1e-10, 'noint1 gsl_fit_wmul sumsq'
  end

  def test_fit_3
    n = 3
    x = GSL::Vector.alloc(4, 5, 6)
    y = GSL::Vector.alloc(3, 4, 4)

    n.times { |i|
      @x.set(i, x[i])
      @w.set(i, 1.0)
      @y.set(i, y[i])
    }

    c1, cov11, sumsq = GSL::Fit.mul(@x, @y, n)
    assert_rel c1,            0.727272727272727,           1e-10, 'noint2 gsl_fit_mul c1'
    assert_rel cov11, GSL.pow(0.420827318078432E-01, 2.0), 1e-10, 'noint2 gsl_fit_mul cov11'
    assert_rel sumsq,         0.272727272727273,           1e-10, 'noint2 gsl_fit_mul sumsq'

    c1, cov11, sumsq = GSL::Fit.wmul(@x, @w, @y, n)
    assert_rel c1,    0.727272727272727,    1e-10, 'noint2 gsl_fit_wmul c1'
    assert_rel cov11, 1.29870129870130e-02, 1e-10, 'noint2 gsl_fit_wmul cov11'
    assert_rel sumsq, 0.272727272727273,    1e-10, 'noint2 gsl_fit_wmul sumsq'
  end

end