Jump to content

Cholesky decomposition: Difference between revisions

(→‎{{header|Groovy}}: new solution)
Line 1,335:
9.899495, 1.624554, 1.849711, 1.392621}
</pre>
 
=={{header|Groovy}}==
{{Trans|Java}}
<lang groovy>def decompose = { a ->
assert a.size > 0 && a[0].size == a.size
def m = a.size
def l = [].withEagerDefault { [].withEagerDefault { 0 } }
(0..<m).each { i ->
(0..i).each { k ->
Number s = (0..<k).sum { j -> l[i][j] * l[k][j] } ?: 0
l[i][k] = (i == k)
? Math.sqrt(a[i][i] - s)
: (1.0 / l[k][k] * (a[i][k] - s))
}
}
l
}</lang>
Test:
<lang groovy>def test1 = [[25, 15, -5],
[15, 18, 0],
[-5, 0, 11]]
 
def test2 = [[18, 22, 54, 42],
[22, 70, 86, 62],
[54, 86, 174, 134],
[42, 62, 134, 106]];
 
[test1,test2]. each { test ->
println()
decompose(test).each { println it[0..<(test.size)] }
}</lang>
{{out}}
<pre>[5.0, 0, 0]
[3.0, 3.0, 0]
[-1.0, 1.0, 3.0]
 
[4.242640687119285, 0, 0, 0]
[5.185449728701349, 6.565905201197403, 0, 0]
[12.727922061357857, 3.0460384954008553, 1.6497422479090704, 0]
[9.899494936611667, 1.624553864213788, 1.8497110052313648, 1.3926212476456026]</pre>
 
=={{header|Haskell}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.