Thiele's interpolation formula: Difference between revisions
Content added Content deleted
(Completed restoration of formulae made invisible at 18:05, 31 July 2016 (one ρ character, and three π characters restored today)) |
m (→{{header|Sidef}}: updated code) |
||
Line 1,039: | Line 1,039: | ||
{{trans|Python}} |
{{trans|Python}} |
||
<lang ruby>func thiele(x, y) { |
<lang ruby>func thiele(x, y) { |
||
var ρ = |
var ρ = {|i| [y[i]]*(y.len-i) }.map(^y) |
||
for i in ^(ρ.end) { |
for i in ^(ρ.end) { |
||
ρ[i][1] = ((x[i] - x[i+1]) / (ρ[i][0] - ρ[i+1][0])) |
ρ[i][1] = ((x[i] - x[i+1]) / (ρ[i][0] - ρ[i+1][0])) |
||
} |
} |
||
for i |
for i (2 .. ρ.end) { |
||
for j |
for j (0 .. ρ.end-i) { |
||
ρ[j][i] = (((x[j]-x[j+i]) / (ρ[j][i-1]-ρ[j+1][i-1])) + ρ[j+1][i-2]) |
ρ[j][i] = (((x[j]-x[j+i]) / (ρ[j][i-1]-ρ[j+1][i-1])) + ρ[j+1][i-2]) |
||
} |
} |
||
} |
} |
||
var ρ0 = ρ[0] |
var ρ0 = ρ[0] |
||
func t(xin) { |
func t(xin) { |
||
var a = 0 |
var a = 0 |
||
for i |
for i (ρ0.len ^.. 2) { |
||
a = ((xin - x[i-1]) / (ρ0[i] - ρ0[i-2] + a)) |
a = ((xin - x[i-1]) / (ρ0[i] - ρ0[i-2] + a)) |
||
} |
} |
||
Line 1,061: | Line 1,061: | ||
return t |
return t |
||
} |
} |
||
# task 1: build 32 row trig table |
# task 1: build 32 row trig table |
||
var xVal = |
var xVal = {|k| k * 0.05 }.map(^32) |
||
var tSin = xVal.map { .sin } |
var tSin = xVal.map { .sin } |
||
var tCos = xVal.map { .cos } |
var tCos = xVal.map { .cos } |
||
var tTan = xVal.map { .tan } |
var tTan = xVal.map { .tan } |
||
# task 2: define inverses |
# task 2: define inverses |
||
var iSin = thiele(tSin, xVal) |
var iSin = thiele(tSin, xVal) |
||
var iCos = thiele(tCos, xVal) |
var iCos = thiele(tCos, xVal) |
||
var iTan = thiele(tTan, xVal) |
var iTan = thiele(tTan, xVal) |
||
# task 3: demonstrate identities |
# task 3: demonstrate identities |
||
say 6*iSin(0.5) |
say 6*iSin(0.5) |
||
Line 1,079: | Line 1,079: | ||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
3.14159265358979323846438729976818601771260734312 |
|||
3.14159265358979323846438729976819 |
|||
3.14159265358979323846157620314930763214337987744 |
|||
3.14159265358979323846157620314931 |
|||
3.14159265358979323846264318595256260456200366896 |
|||
3.14159265358979323846264318595256 |
|||
</pre> |
</pre> |
||