Thiele's interpolation formula: Difference between revisions
Content added Content deleted
(Restored visibility for main iOS and OS X browsers by removing recently inserted redundant spaces in math tags) |
(Added Sidef) |
||
Line 1,035: | Line 1,035: | ||
3.1415926535897953 |
3.1415926535897953 |
||
</lang> |
</lang> |
||
=={{header|Sidef}}== |
|||
{{trans|Python}} |
|||
<lang ruby>func thiele(x, y) { |
|||
var ρ = y.range.map {|i| [y[i]]*(y.len-i) } |
|||
for i in ^(ρ.end) { |
|||
ρ[i][1] = ((x[i] - x[i+1]) / (ρ[i][0] - ρ[i+1][0])) |
|||
} |
|||
for i in range(2, ρ.end) { |
|||
for j in range(0, ρ.end - i) { |
|||
ρ[j][i] = (((x[j]-x[j+i]) / (ρ[j][i-1]-ρ[j+1][i-1])) + ρ[j+1][i-2]) |
|||
} |
|||
} |
|||
var ρ0 = ρ[0] |
|||
func t(xin) { |
|||
var a = 0 |
|||
for i in range(ρ0.end, 2, -1) { |
|||
a = ((xin - x[i-1]) / (ρ0[i] - ρ0[i-2] + a)) |
|||
} |
|||
y[0] + ((xin-x[0]) / (ρ0[1]+a)) |
|||
} |
|||
return t |
|||
} |
|||
# task 1: build 32 row trig table |
|||
var xVal = range(32).map { |k| k * 0.05 } |
|||
var tSin = xVal.map { .sin } |
|||
var tCos = xVal.map { .cos } |
|||
var tTan = xVal.map { .tan } |
|||
# task 2: define inverses |
|||
var iSin = thiele(tSin, xVal) |
|||
var iCos = thiele(tCos, xVal) |
|||
var iTan = thiele(tTan, xVal) |
|||
# task 3: demonstrate identities |
|||
say 6*iSin(0.5) |
|||
say 3*iCos(0.5) |
|||
say 4*iTan(1)</lang> |
|||
{{out}} |
|||
<pre> |
|||
3.14159265358979323846438729976819 |
|||
3.14159265358979323846157620314931 |
|||
3.14159265358979323846264318595256 |
|||
</pre> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |