pspline 5.0.5 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +5 -5
  3. data/README.md +44 -43
  4. data/Rakefile +6 -6
  5. data/bin/console +14 -14
  6. data/bin/setup +8 -8
  7. data/ext/pspline/basis.cpp +394 -351
  8. data/ext/pspline/example/exbspline.rb +57 -57
  9. data/ext/pspline/example/excspline.rb +57 -57
  10. data/ext/pspline/example/exdspline.rb +55 -55
  11. data/ext/pspline/example/exfspline.rb +44 -44
  12. data/ext/pspline/example/exfspline1.rb +40 -40
  13. data/ext/pspline/example/exfspline2.rb +68 -68
  14. data/ext/pspline/example/exfspline3.rb +64 -64
  15. data/ext/pspline/example/exmspline.rb +68 -68
  16. data/ext/pspline/example/expspline.rb +29 -29
  17. data/ext/pspline/example/expspline1.rb +29 -29
  18. data/ext/pspline/example/expspline2.rb +47 -47
  19. data/ext/pspline/example/exqspline.rb +31 -31
  20. data/ext/pspline/example/exqspline1.rb +31 -31
  21. data/ext/pspline/example/exqspline2.rb +50 -50
  22. data/ext/pspline/example/exqspline3.rb +51 -51
  23. data/ext/pspline/example/exqspline4.rb +35 -35
  24. data/ext/pspline/example/exrspline.rb +34 -34
  25. data/ext/pspline/example/exrspline1.rb +34 -34
  26. data/ext/pspline/example/exrspline2.rb +44 -44
  27. data/ext/pspline/example/exsspline.rb +35 -35
  28. data/ext/pspline/example/exsspline1.rb +35 -35
  29. data/ext/pspline/example/extspline.rb +54 -54
  30. data/ext/pspline/extconf.rb +7 -7
  31. data/ext/pspline/fft.cpp +27 -552
  32. data/ext/pspline/include/basis/basis.h +145 -137
  33. data/ext/pspline/include/basis/fft.h +188 -152
  34. data/ext/pspline/include/basis/fft_complex.h +215 -0
  35. data/ext/pspline/include/basis/fft_real.h +625 -0
  36. data/ext/pspline/include/basis/gabs.h +35 -0
  37. data/ext/pspline/include/basis/marray_class_ext.h +568 -0
  38. data/ext/pspline/include/basis/marray_ext.h +100 -0
  39. data/ext/pspline/include/basis/matrix_luc_ext.h +300 -0
  40. data/ext/pspline/include/basis/matrix_lud_ext.h +298 -0
  41. data/ext/pspline/include/basis/poly.h +454 -0
  42. data/ext/pspline/include/basis/poly_array.h +1030 -1568
  43. data/ext/pspline/include/basis/pspline.h +806 -642
  44. data/ext/pspline/include/basis/real.h +526 -0
  45. data/ext/pspline/include/basis/real_inline.h +442 -0
  46. data/ext/pspline/include/basis/spline.h +83 -0
  47. data/ext/pspline/include/basis/uspline.h +251 -210
  48. data/ext/pspline/include/basis/util.h +122 -656
  49. data/ext/pspline/include/bspline.h +71 -377
  50. data/ext/pspline/include/bspline_Config.h +8 -2
  51. data/ext/pspline/include/real_config.h +3 -0
  52. data/ext/pspline/pspline.cpp +1236 -1038
  53. data/ext/pspline/real.cpp +1607 -0
  54. data/ext/pspline/real_const.cpp +585 -0
  55. data/lib/pspline.rb +71 -71
  56. data/lib/pspline/version.rb +1 -1
  57. data/pspline.gemspec +25 -25
  58. metadata +17 -5
  59. data/ext/pspline/plotsub.cpp +0 -139
  60. data/ext/pspline/util.cpp +0 -483
@@ -1,35 +1,35 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- puts "# Parametric period interpolation (Closed curve)"
6
-
7
- XY = [ [ 0, 1.0, 0.0],[ 1, 0.923880, 0.382683],[ 2, 0.707107, 0.707107],[ 3, 0.382683, 0.923880],
8
- [ 4, 0.0, 1.0],[ 5,-0.382683, 0.923880],[ 6,-0.707107, 0.707107],[ 7,-0.923880, 0.382683],
9
- [ 8,-1.0, 0.0],[ 9,-0.923880,-0.382683],[10,-0.707107,-0.707107],[11,-0.382683,-0.923880],
10
- [12, 0.0,-1.0],[13, 0.382683,-0.923880],[14, 0.707107,-0.707107],[15, 0.923880,-0.382683],
11
- [16, 1.0, 0.0] ]
12
-
13
- Jbn = ARGV[0].to_i
14
-
15
- Dp = 8
16
-
17
- Qs = Bspline.new(XY, 16, 9, 1)
18
-
19
- vv = []
20
- XY.each do |p|
21
- printf "% f, % f\n", p[1], p[2]
22
- vv.push p[0]
23
- end
24
-
25
- Sint = Qs.line_integral(lambda{|x,y|Math.sqrt(x*x+y*y)*0.5}, vv)
26
- printf "# value of interpolation points, Dp = %d", Dp
27
- if Jbn == 0
28
- print "\n"
29
- else
30
- printf ", Jbn = %d\n", Jbn
31
- end
32
- s = Qs.plot(vv, Dp, Jbn) do |a, b|
33
- printf "%6.3f % f % f % f\n", a, b[0], b[1], Sint[a]
34
- end
35
- #STDERR.puts s
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ puts "# Parametric period interpolation (Closed curve)"
6
+
7
+ XY = [ [ 0, 1.0, 0.0],[ 1, 0.923880, 0.382683],[ 2, 0.707107, 0.707107],[ 3, 0.382683, 0.923880],
8
+ [ 4, 0.0, 1.0],[ 5,-0.382683, 0.923880],[ 6,-0.707107, 0.707107],[ 7,-0.923880, 0.382683],
9
+ [ 8,-1.0, 0.0],[ 9,-0.923880,-0.382683],[10,-0.707107,-0.707107],[11,-0.382683,-0.923880],
10
+ [12, 0.0,-1.0],[13, 0.382683,-0.923880],[14, 0.707107,-0.707107],[15, 0.923880,-0.382683],
11
+ [16, 1.0, 0.0] ]
12
+
13
+ Jbn = ARGV[0].to_i
14
+
15
+ Dp = 8
16
+
17
+ Qs = Bspline.new(XY, 16, 9, 1)
18
+
19
+ vv = []
20
+ XY.each do |p|
21
+ printf "% f, % f\n", p[1], p[2]
22
+ vv.push p[0]
23
+ end
24
+
25
+ Sint = Qs.line_integral(lambda{|x,y|Math.sqrt(x*x+y*y)*0.5}, vv)
26
+ printf "# value of interpolation points, Dp = %d", Dp
27
+ if Jbn == 0
28
+ print "\n"
29
+ else
30
+ printf ", Jbn = %d\n", Jbn
31
+ end
32
+ s = Qs.plot(vv, Dp, Jbn) do |a, b|
33
+ printf "%6.3f % f % f % f\n", a, b[0], b[1], Sint[a]
34
+ end
35
+ #STDERR.puts s
@@ -1,34 +1,34 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- n = 7
6
- j = 2
7
- s = 2
8
-
9
- puts "# Riesenfeld interpolation"
10
-
11
- X = [0, 1, 2, 3, 4, 5, 6]
12
- Y = [ [ 0.0, 0.0],[ 3.0, 0.0],[ 3.0, 1.0],[ 0.5, 2.0],
13
- [ 0.5, 6.0],[ 5.0, 6.0],[ 5.0, 9.0] ]
14
-
15
- Jbn = ARGV[0].to_i
16
-
17
- Dp = 10
18
-
19
- Rs = Pspline.new(Y, [X], [n], [j], [s])
20
-
21
- Y.each do |p|
22
- printf "% f, % f\n", p[0], p[1]
23
- end
24
- printf "# value of interpolation points, Dp = %d", Dp
25
- if Jbn == 0
26
- print "\n"
27
- else
28
- printf ", Jbn = %d\n", Jbn
29
- end
30
- vv = [X]
31
- s = Rs.plot(vv, Dp, [Jbn]) do |a, b|
32
- printf "% .2f, <% .7f, % .7f>\n", a[0], b[0], b[1]
33
- end
34
- #STDERR.puts s
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ n = 7
6
+ j = 2
7
+ s = 2
8
+
9
+ puts "# Riesenfeld interpolation"
10
+
11
+ X = [0, 1, 2, 3, 4, 5, 6]
12
+ Y = [ [ 0.0, 0.0],[ 3.0, 0.0],[ 3.0, 1.0],[ 0.5, 2.0],
13
+ [ 0.5, 6.0],[ 5.0, 6.0],[ 5.0, 9.0] ]
14
+
15
+ Jbn = ARGV[0].to_i
16
+
17
+ Dp = 10
18
+
19
+ Rs = Pspline.new(Y, [X], [n], [j], [s])
20
+
21
+ Y.each do |p|
22
+ printf "% f, % f\n", p[0], p[1]
23
+ end
24
+ printf "# value of interpolation points, Dp = %d", Dp
25
+ if Jbn == 0
26
+ print "\n"
27
+ else
28
+ printf ", Jbn = %d\n", Jbn
29
+ end
30
+ vv = [X]
31
+ s = Rs.plot(vv, Dp, [Jbn]) do |a, b|
32
+ printf "% .2f, <% .7f, % .7f>\n", a[0], b[0], b[1]
33
+ end
34
+ #STDERR.puts s
@@ -1,34 +1,34 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- n = 7
6
- j = 2
7
- s = 2
8
-
9
- puts "# Riesenfeld interpolation"
10
-
11
- XY = [ [0, 0.0, 0.0],[1, 3.0, 0.0],[2, 3.0, 1.0],[3, 0.5, 2.0],
12
- [4, 0.5, 6.0],[5, 5.0, 6.0],[6, 5.0, 9.0] ]
13
-
14
- Jbn = ARGV[0].to_i
15
-
16
- Dp = 10
17
-
18
- Rs = Bspline.new(XY, n, j, s)
19
-
20
- vv = []
21
- XY.each do |p|
22
- printf "% f, % f\n", p[1], p[2]
23
- vv.push p[0]
24
- end
25
- printf "# value of interpolation points, Dp = %d", Dp
26
- if Jbn == 0
27
- print "\n"
28
- else
29
- printf ", Jbn = %d\n", Jbn
30
- end
31
- s = Rs.plot(vv, Dp, Jbn) do |a, b|
32
- printf "% .2f % .7f % .7f\n", a, b[0], b[1]
33
- end
34
- #STDERR.puts s
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ n = 7
6
+ j = 2
7
+ s = 2
8
+
9
+ puts "# Riesenfeld interpolation"
10
+
11
+ XY = [ [0, 0.0, 0.0],[1, 3.0, 0.0],[2, 3.0, 1.0],[3, 0.5, 2.0],
12
+ [4, 0.5, 6.0],[5, 5.0, 6.0],[6, 5.0, 9.0] ]
13
+
14
+ Jbn = ARGV[0].to_i
15
+
16
+ Dp = 10
17
+
18
+ Rs = Bspline.new(XY, n, j, s)
19
+
20
+ vv = []
21
+ XY.each do |p|
22
+ printf "% f, % f\n", p[1], p[2]
23
+ vv.push p[0]
24
+ end
25
+ printf "# value of interpolation points, Dp = %d", Dp
26
+ if Jbn == 0
27
+ print "\n"
28
+ else
29
+ printf ", Jbn = %d\n", Jbn
30
+ end
31
+ s = Rs.plot(vv, Dp, Jbn) do |a, b|
32
+ printf "% .2f % .7f % .7f\n", a, b[0], b[1]
33
+ end
34
+ #STDERR.puts s
@@ -1,44 +1,44 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- nn = [4, 6]
6
- jj = [3, 2]
7
- ss = [3, 2]
8
-
9
- puts "# Reisenfeld interpolation"
10
-
11
- S = [0, 1, 2, 3, 4]
12
- T = [0, 1, 2, 3, 4, 5]
13
-
14
- XYZ = [ [[ 0.0, 5.0, 9.0],[ 0.0, 5.0, 6.0],[ 0.0, 0.5, 6.0],[ 0.0, 0.5, 2.0],[ 0.0, 3.0, 1.0],[ 0.0, 3.0, 0.0]],
15
- [[ 5.0,-2.5, 6.5],[ 5.0,-2.5, 3.5],[ 0.5,-0.25,5.75],[0.5,-0.25,1.75],[3.0,-1.5,-0.5],[ 3.0,-1.5,-1.5]],
16
- [[ 0.0,-5.0, 9.0],[ 0.0,-5.0, 6.0],[ 0.0,-0.5, 6.0],[ 0.0,-0.5, 2.0],[ 0.0,-3.0, 1.0],[ 0.0,-3.0, 0.0]],
17
- [[-5.0, 2.5,11.5],[-5.0, 2.5, 8.5],[-0.5,0.25,6.25],[-0.5,0.25,2.25],[-3.0, 1.5, 2.5],[-3.0, 1.5, 1.5]] ]
18
-
19
- Jbn = ARGV[0].to_i
20
-
21
- Dp = 8
22
-
23
- Rs = Pspline.new(XYZ, [S, T], nn, jj, ss)
24
-
25
- for i in 0..3
26
- for j in 0..5
27
- printf("<%d,%d>", S[i], T[j])
28
- u = XYZ[i][j]
29
- printf(" % .7f % .7f %10.7f\n", u[0], u[1], u[2])
30
- end
31
- end
32
- printf "# value of interpolation points, Dp = %d", Dp
33
- if Jbn == 0
34
- print "\n"
35
- else
36
- printf ", Jbn = %d\n", Jbn
37
- end
38
- vv = [S, T]
39
- N = Rs.plot(vv, Dp, [Jbn,0]) do |a, b|
40
- if (a[1] == 0.0)
41
- printf("%.3f %.3f % .7f % .7f %10.7f\n", a[0], a[1], b[0], b[1], b[2])
42
- end
43
- end
44
- #STDERR.puts N
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ nn = [4, 6]
6
+ jj = [3, 2]
7
+ ss = [3, 2]
8
+
9
+ puts "# Reisenfeld interpolation"
10
+
11
+ S = [0, 1, 2, 3, 4]
12
+ T = [0, 1, 2, 3, 4, 5]
13
+
14
+ XYZ = [ [[ 0.0, 5.0, 9.0],[ 0.0, 5.0, 6.0],[ 0.0, 0.5, 6.0],[ 0.0, 0.5, 2.0],[ 0.0, 3.0, 1.0],[ 0.0, 3.0, 0.0]],
15
+ [[ 5.0,-2.5, 6.5],[ 5.0,-2.5, 3.5],[ 0.5,-0.25,5.75],[0.5,-0.25,1.75],[3.0,-1.5,-0.5],[ 3.0,-1.5,-1.5]],
16
+ [[ 0.0,-5.0, 9.0],[ 0.0,-5.0, 6.0],[ 0.0,-0.5, 6.0],[ 0.0,-0.5, 2.0],[ 0.0,-3.0, 1.0],[ 0.0,-3.0, 0.0]],
17
+ [[-5.0, 2.5,11.5],[-5.0, 2.5, 8.5],[-0.5,0.25,6.25],[-0.5,0.25,2.25],[-3.0, 1.5, 2.5],[-3.0, 1.5, 1.5]] ]
18
+
19
+ Jbn = ARGV[0].to_i
20
+
21
+ Dp = 8
22
+
23
+ Rs = Pspline.new(XYZ, [S, T], nn, jj, ss)
24
+
25
+ for i in 0..3
26
+ for j in 0..5
27
+ printf("<%d,%d>", S[i], T[j])
28
+ u = XYZ[i][j]
29
+ printf(" % .7f % .7f %10.7f\n", u[0], u[1], u[2])
30
+ end
31
+ end
32
+ printf "# value of interpolation points, Dp = %d", Dp
33
+ if Jbn == 0
34
+ print "\n"
35
+ else
36
+ printf ", Jbn = %d\n", Jbn
37
+ end
38
+ vv = [S, T]
39
+ N = Rs.plot(vv, Dp, [Jbn,0]) do |a, b|
40
+ if (a[1] == 0.0)
41
+ printf("%.3f %.3f % .7f % .7f %10.7f\n", a[0], a[1], b[0], b[1], b[2])
42
+ end
43
+ end
44
+ #STDERR.puts N
@@ -1,35 +1,35 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- n = 8
6
- j = 3
7
- s = 3
8
-
9
- puts "# Riesenfeld interpolation (Closed curve)"
10
-
11
- X = [0, 1, 2, 3, 4, 5, 6, 7, 8]
12
-
13
- Y = [ [ 4.0, 0.0],[ 3.0, 3.0],[ 0.0, 4.0],[-3.0, 3.0],
14
- [-4.0, 0.0],[-3.0,-3.0],[ 0.0,-4.0],[ 3.0,-3.0] ]
15
-
16
- Jbn = ARGV[0].to_i
17
-
18
- Dp = 10
19
-
20
- Sp = Pspline.new(Y, [X], [n], [j], [s])
21
-
22
- Y.each do |p|
23
- printf "% f, % f\n", p[0], p[1]
24
- end
25
- printf "# value of interpolation points, Dp = %d", Dp
26
- if Jbn == 0
27
- print "\n"
28
- else
29
- printf ", Jbn = %d\n", Jbn
30
- end
31
- vv = [X]
32
- s = Sp.plot(vv, Dp, [Jbn]) do |a, b|
33
- printf "% .2f, <% .7f, % .7f>\n", a[0], b[0], b[1]
34
- end
35
- #STDERR.puts s
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ n = 8
6
+ j = 3
7
+ s = 3
8
+
9
+ puts "# Riesenfeld interpolation (Closed curve)"
10
+
11
+ X = [0, 1, 2, 3, 4, 5, 6, 7, 8]
12
+
13
+ Y = [ [ 4.0, 0.0],[ 3.0, 3.0],[ 0.0, 4.0],[-3.0, 3.0],
14
+ [-4.0, 0.0],[-3.0,-3.0],[ 0.0,-4.0],[ 3.0,-3.0] ]
15
+
16
+ Jbn = ARGV[0].to_i
17
+
18
+ Dp = 10
19
+
20
+ Sp = Pspline.new(Y, [X], [n], [j], [s])
21
+
22
+ Y.each do |p|
23
+ printf "% f, % f\n", p[0], p[1]
24
+ end
25
+ printf "# value of interpolation points, Dp = %d", Dp
26
+ if Jbn == 0
27
+ print "\n"
28
+ else
29
+ printf ", Jbn = %d\n", Jbn
30
+ end
31
+ vv = [X]
32
+ s = Sp.plot(vv, Dp, [Jbn]) do |a, b|
33
+ printf "% .2f, <% .7f, % .7f>\n", a[0], b[0], b[1]
34
+ end
35
+ #STDERR.puts s
@@ -1,35 +1,35 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- puts "# Riesenfeld interpolation (Closed curve interpolation)"
6
-
7
- n = 8
8
- j = 3
9
- s = 3
10
-
11
- XY = [ [0, 4.0, 0.0],[1, 3.0, 3.0],[2, 0.0, 4.0],[3,-3.0, 3.0],
12
- [4,-4.0, 0.0],[5,-3.0,-3.0],[6, 0.0,-4.0],[7, 3.0,-3.0],
13
- [8, 4.0, 0.0] ]
14
-
15
- Jbn = ARGV[0].to_i
16
-
17
- Dp = 10
18
-
19
- Sp = Bspline.new(XY, n, j, s)
20
-
21
- vv = []
22
- XY.each do |p|
23
- printf "% f, % f\n", p[1], p[2]
24
- vv.push p[0]
25
- end
26
- printf "# value of interpolation points, Dp = %d", Dp
27
- if Jbn == 0
28
- print "\n"
29
- else
30
- printf ", Jbn = %d\n", Jbn
31
- end
32
- s = Sp.plot(vv, Dp, Jbn) do |a, b|
33
- printf "% .2f % .7f % .7f\n", a, b[0], b[1]
34
- end
35
- #STDERR.puts s
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ puts "# Riesenfeld interpolation (Closed curve interpolation)"
6
+
7
+ n = 8
8
+ j = 3
9
+ s = 3
10
+
11
+ XY = [ [0, 4.0, 0.0],[1, 3.0, 3.0],[2, 0.0, 4.0],[3,-3.0, 3.0],
12
+ [4,-4.0, 0.0],[5,-3.0,-3.0],[6, 0.0,-4.0],[7, 3.0,-3.0],
13
+ [8, 4.0, 0.0] ]
14
+
15
+ Jbn = ARGV[0].to_i
16
+
17
+ Dp = 10
18
+
19
+ Sp = Bspline.new(XY, n, j, s)
20
+
21
+ vv = []
22
+ XY.each do |p|
23
+ printf "% f, % f\n", p[1], p[2]
24
+ vv.push p[0]
25
+ end
26
+ printf "# value of interpolation points, Dp = %d", Dp
27
+ if Jbn == 0
28
+ print "\n"
29
+ else
30
+ printf ", Jbn = %d\n", Jbn
31
+ end
32
+ s = Sp.plot(vv, Dp, Jbn) do |a, b|
33
+ printf "% .2f % .7f % .7f\n", a, b[0], b[1]
34
+ end
35
+ #STDERR.puts s
@@ -1,54 +1,54 @@
1
- #! /usr/local/bin/ruby
2
- require 'pspline'
3
- include PSPLINE
4
-
5
- #
6
- #puts "# Interpolation of the Jacobi function"
7
- #
8
- XY = [ [ 0.0, 0.0 ],[ 0.5474, 0.5 ],[ 1.2837, 0.86603],[ 2.7681, 1.0 ],
9
- [ 4.2525, 0.86603],[ 4.9888, 0.5 ],[ 5.5362, 0.0 ],[ 6.0836,-0.5 ],
10
- [ 6.8199,-0.86603],[ 8.3043,-1.0 ],[ 9.7887,-0.86603],[10.5250,-0.5 ],
11
- [11.0724, 0.0 ] ]
12
-
13
- Jbn = ARGV[0].to_i
14
-
15
- Dp = 10
16
-
17
- Bs = Bspline.new(XY, 12, 5, 1)
18
-
19
- vv = []
20
- XY.each do |p|
21
- printf "%7.4f, % f\n", p[0], p[1]
22
- vv.push p[0]
23
- end
24
- printf "# value of interpolation points, Dp = %d", Dp
25
- if Jbn == 0
26
- print "\n"
27
- else
28
- printf ", Jbn = %d\n", Jbn
29
- end
30
- s = Bs.plot(vv, 10, Jbn) do |u, v|
31
- printf "%8.5f % f\n", u, v[0]
32
- end
33
- # Draw Graph
34
- require "gnuplot"
35
-
36
- Gnuplot.open do |gp|
37
- Gnuplot::Plot.new( gp ) do |plot|
38
- plot.title 'Jacobi'
39
- plot.ylabel 'Y'
40
- plot.xlabel 'X'
41
- x = vv.map {|v| v[0]}
42
- y = vv.map {|v| v[1]}
43
- plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
44
- ds.with = "lines"
45
- ds.linewidth = 2
46
- ds.notitle
47
- end
48
- y = x.map {|v| Bs.value(v, 1)}
49
- plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
50
- ds.with = "lines"
51
- ds.title = "Differential"
52
- end
53
- end
54
- end
1
+ #! /usr/local/bin/ruby
2
+ require 'pspline'
3
+ include PSPLINE
4
+
5
+ #
6
+ #puts "# Interpolation of the Jacobi function"
7
+ #
8
+ XY = [ [" 0.0", " 0.0" ],[" 0.5474"," 0.5"],[" 1.2837"," 0.86603"],[" 2.7681"," 1.0"],
9
+ [" 4.2525"," 0.86603"],[" 4.9888"," 0.5"],[" 5.5362"," 0.0" ],[" 6.0836","-0.5"],
10
+ [" 6.8199","-0.86603"],[" 8.3043","-1.0"],[" 9.7887","-0.86603"],["10.5250","-0.5"],
11
+ ["11.0724"," 0.0" ] ]
12
+
13
+ Jbn = ARGV[0].to_i
14
+
15
+ Dp = 10
16
+
17
+ Bs = Bspline.new(XY, 12, 5, 1)
18
+
19
+ vv = []
20
+ XY.each do |p|
21
+ printf "%7.4f, % .5f\n", p[0], p[1]
22
+ vv.push p[0]
23
+ end
24
+ printf "# value of interpolation points, Dp = %d", Dp
25
+ if Jbn == 0
26
+ print "\n"
27
+ else
28
+ printf ", Jbn = %d\n", Jbn
29
+ end
30
+ s = Bs.plot(vv, 10, Jbn) do |u, v|
31
+ printf "%8.5f % .15f\n", u, v[0]
32
+ end
33
+ # Draw Graph
34
+ require "gnuplot"
35
+
36
+ Gnuplot.open do |gp|
37
+ Gnuplot::Plot.new( gp ) do |plot|
38
+ plot.title 'Jacobi'
39
+ plot.ylabel 'Y'
40
+ plot.xlabel 'X'
41
+ x = vv.map {|v| v[0]}
42
+ y = vv.map {|v| v[1]}
43
+ plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
44
+ ds.with = "lines"
45
+ ds.linewidth = 2
46
+ ds.notitle
47
+ end
48
+ y = x.map {|v| Bs.value(v, 1)}
49
+ plot.data << Gnuplot::DataSet.new( [x, y] ) do |ds|
50
+ ds.with = "lines"
51
+ ds.title = "Differential"
52
+ end
53
+ end
54
+ end