LU decomposition: Difference between revisions
Content added Content deleted
(Added Kotlin) |
(→{{header|Stata}}: +impl) |
||
Line 3,191: | Line 3,191: | ||
=={{header|Stata}}== |
=={{header|Stata}}== |
||
=== Builtin LU decoposition === |
|||
See [http://www.stata.com/help.cgi?mf_lud LU decomposition] in Stata help. |
See [http://www.stata.com/help.cgi?mf_lud LU decomposition] in Stata help. |
||
<lang stata>mata |
<lang stata>mata |
||
: lud(a=(1,3,5\2,4,7\1,1,0),l=.,u=.,p=.) |
: 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 |
: a |