X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=linearalgebra.cpp;h=e1b9470fdb218d94fd9f5fe9f36ccb23ac31ea8a;hb=bd27c2b0612942815b7417c79f7ee41f669a2a34;hp=58f1acccfc7ed4e3aefc902ad199dd7a17a0516d;hpb=4a760c2d164aa955dee7d3d38da323822763d906;p=mothur.git diff --git a/linearalgebra.cpp b/linearalgebra.cpp index 58f1acc..e1b9470 100644 --- a/linearalgebra.cpp +++ b/linearalgebra.cpp @@ -1530,6 +1530,25 @@ vector LinearAlgebra::solveEquations(vector > A, vector LinearAlgebra::solveEquations(vector > A, vector b){ + try { + int length = (int)b.size(); + vector x(length, 0); + vector index(length); + for(int i=0;icontrol_pressed) { return b; } + lubksb(A, index, b); + + return b; + } + catch(exception& e) { + m->errorOut(e, "LinearAlgebra", "solveEquations"); + exit(1); + } +} /*********************************************************************************************************************************/ @@ -1628,6 +1647,104 @@ void LinearAlgebra::lubksb(vector >& A, vector& index, vecto exit(1); } } +/*********************************************************************************************************************************/ + +void LinearAlgebra::ludcmp(vector >& A, vector& index, float& d){ + try { + double tiny = 1e-20; + + int n = (int)A.size(); + vector vv(n, 0.0); + double temp; + int imax; + + d = 1.0; + + for(int i=0;i big ) big=temp; } + if(big==0.0){ m->mothurOut("Singular matrix in routine ludcmp\n"); } + vv[i] = 1.0/big; + } + + for(int j=0;jcontrol_pressed) { break; } + for(int i=0;i= big){ + big = dum; + imax = i; + } + } + if(j != imax){ + for(int k=0;kerrorOut(e, "LinearAlgebra", "ludcmp"); + exit(1); + } +} + +/*********************************************************************************************************************************/ + +void LinearAlgebra::lubksb(vector >& A, vector& index, vector& b){ + try { + float total; + int n = (int)A.size(); + int ii = 0; + + for(int i=0;icontrol_pressed) { break; } + int ip = index[i]; + total = b[ip]; + b[ip] = b[i]; + + if (ii != 0) { + for(int j=ii-1;j=0;i--){ + total = b[i]; + for(int j=i+1;jerrorOut(e, "LinearAlgebra", "lubksb"); + exit(1); + } +} + /*********************************************************************************************************************************/