Deconvolution/1D: Difference between revisions
Content added Content deleted
m (→{{header|REXX}}: aligned a statement.) |
(Add Swift) |
||
Line 1,408: | Line 1,408: | ||
}</lang> |
}</lang> |
||
=={{header|Swift}}== |
|||
{{trans|Kotlin}} |
|||
<lang swift>func deconv(g: [Double], f: [Double]) -> [Double] { |
|||
let fs = f.count |
|||
var ret = [Double](repeating: 0, count: g.count - fs + 1) |
|||
for n in 0..<ret.count { |
|||
ret[n] = g[n] |
|||
let lower = n >= fs ? n - fs + 1 : 0 |
|||
for i in lower..<n { |
|||
ret[n] -= ret[i] * f[n - i] |
|||
} |
|||
ret[n] /= f[0] |
|||
} |
|||
return ret |
|||
} |
|||
let h = [-8.0, -9.0, -3.0, -1.0, -6.0, 7.0] |
|||
let f = [-3.0, -6.0, -1.0, 8.0, -6.0, 3.0, -1.0, -9.0, |
|||
-9.0, 3.0, -2.0, 5.0, 2.0, -2.0, -7.0, -1.0] |
|||
let g = [24.0, 75.0, 71.0, -34.0, 3.0, 22.0, -45.0, |
|||
23.0, 245.0, 25.0, 52.0, 25.0, -67.0, -96.0, |
|||
96.0, 31.0, 55.0, 36.0, 29.0, -43.0, -7.0] |
|||
print("\(h.map({ Int($0) }))") |
|||
print("\(deconv(g: g, f: f).map({ Int($0) }))\n") |
|||
print("\(f.map({ Int($0) }))") |
|||
print("\(deconv(g: g, f: h).map({ Int($0) }))")</lang> |
|||
{{out}} |
|||
<pre>[-8, -9, -3, -1, -6, 7] |
|||
[-8, -9, -3, -1, -6, 7] |
|||
[-3, -6, -1, 8, -6, 3, -1, -9, -9, 3, -2, 5, 2, -2, -7, -1] |
|||
[-3, -6, -1, 8, -6, 3, -1, -9, -9, 3, -2, 5, 2, -2, -7, -1]</pre> |
|||
=={{header|Tcl}}== |
=={{header|Tcl}}== |