LU decomposition: Difference between revisions

(Added Kotlin)
Line 3,191:
 
=={{header|Stata}}==
=== Builtin LU decoposition ===
See [http://www.stata.com/help.cgi?mf_lud LU decomposition] in Stata help.
 
<lang stata>mata
: lud(a=(1,3,5\2,4,7\1,1,0),l=.,u=.,p=.)
 
: a
1 2 3
+-------------+
1 | 1 3 5 |
2 | 2 4 7 |
3 | 1 1 0 |
+-------------+
 
: l
1 2 3
+----------------+
1 | 1 0 0 |
2 | .5 1 0 |
3 | .5 -1 1 |
+----------------+
 
: u
1 2 3
+-------------------+
1 | 2 4 7 |
2 | 0 1 1.5 |
3 | 0 0 -2 |
+-------------------+
 
: p
1
+-----+
1 | 2 |
2 | 1 |
3 | 3 |
+-----+</lang>
 
=== Implementation ===
<lang stata>void ludec(real matrix a, real matrix l, real matrix u, real vector p) {
real scalar i,j,n,s
real vector js
l = a
n = rows(a)
p = 1::n
for (i=1; i<n; i++) {
maxindex(abs(l[i::n,i]), 1, js=., .)
j = js[1]+i-1
if (j!=i) {
l[(i\j),.] = l[(j\i),.]
p[(i\j)] = p[(j\i)]
}
for (j=i+1; j<=n; j++) {
l[j,i] = s = l[j,i]/l[i,i]
l[j,i+1..n] = l[j,i+1..n]-s*l[i,i+1..n]
}
}
u = uppertriangle(l)
l = lowertriangle(l, 1)
}</lang>
 
'''Example''':
<lang stata>: ludec(a=(1,3,5\2,4,7\1,1,0),l=.,u=.,p=.)
 
: a
1,336

edits