Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/iksolver/intern/TNT/lu.h')
-rw-r--r--intern/iksolver/intern/TNT/lu.h208
1 files changed, 0 insertions, 208 deletions
diff --git a/intern/iksolver/intern/TNT/lu.h b/intern/iksolver/intern/TNT/lu.h
deleted file mode 100644
index f64172bd31f..00000000000
--- a/intern/iksolver/intern/TNT/lu.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/**
- */
-
-/*
-
-*
-* Template Numerical Toolkit (TNT): Linear Algebra Module
-*
-* Mathematical and Computational Sciences Division
-* National Institute of Technology,
-* Gaithersburg, MD USA
-*
-*
-* This software was developed at the National Institute of Standards and
-* Technology (NIST) by employees of the Federal Government in the course
-* of their official duties. Pursuant to title 17 Section 105 of the
-* United States Code, this software is not subject to copyright protection
-* and is in the public domain. The Template Numerical Toolkit (TNT) is
-* an experimental system. NIST assumes no responsibility whatsoever for
-* its use by other parties, and makes no guarantees, expressed or implied,
-* about its quality, reliability, or any other characteristic.
-*
-* BETA VERSION INCOMPLETE AND SUBJECT TO CHANGE
-* see http://math.nist.gov/tnt for latest updates.
-*
-*/
-
-
-
-#ifndef LU_H
-#define LU_H
-
-// Solve system of linear equations Ax = b.
-//
-// Typical usage:
-//
-// Matrix(double) A;
-// Vector(Subscript) ipiv;
-// Vector(double) b;
-//
-// 1) LU_Factor(A,ipiv);
-// 2) LU_Solve(A,ipiv,b);
-//
-// Now b has the solution x. Note that both A and b
-// are overwritten. If these values need to be preserved,
-// one can make temporary copies, as in
-//
-// O) Matrix(double) T = A;
-// 1) LU_Factor(T,ipiv);
-// 1a) Vector(double) x=b;
-// 2) LU_Solve(T,ipiv,x);
-//
-// See details below.
-//
-
-
-// for fabs()
-//
-#include <cmath>
-
-// right-looking LU factorization algorithm (unblocked)
-//
-// Factors matrix A into lower and upper triangular matrices
-// (L and U respectively) in solving the linear equation Ax=b.
-//
-//
-// Args:
-//
-// A (input/output) Matrix(1:n, 1:n) In input, matrix to be
-// factored. On output, overwritten with lower and
-// upper triangular factors.
-//
-// indx (output) Vector(1:n) Pivot vector. Describes how
-// the rows of A were reordered to increase
-// numerical stability.
-//
-// Return value:
-//
-// int (0 if successful, 1 otherwise)
-//
-//
-
-
-namespace TNT
-{
-
-template <class MaTRiX, class VecToRSubscript>
-int LU_factor( MaTRiX &A, VecToRSubscript &indx)
-{
- assert(A.lbound() == 1); // currently for 1-offset
- assert(indx.lbound() == 1); // vectors and matrices
-
- Subscript M = A.num_rows();
- Subscript N = A.num_cols();
-
- if (M == 0 || N==0) return 0;
- if (indx.dim() != M)
- indx.newsize(M);
-
- Subscript i=0,j=0,k=0;
- Subscript jp=0;
-
- typename MaTRiX::element_type t;
-
- Subscript minMN = (M < N ? M : N) ; // min(M,N);
-
- for (j=1; j<= minMN; j++)
- {
-
- // find pivot in column j and test for singularity.
-
- jp = j;
- t = fabs(A(j,j));
- for (i=j+1; i<=M; i++)
- if ( fabs(A(i,j)) > t)
- {
- jp = i;
- t = fabs(A(i,j));
- }
-
- indx(j) = jp;
-
- // jp now has the index of maximum element
- // of column j, below the diagonal
-
- if ( A(jp,j) == 0 )
- return 1; // factorization failed because of zero pivot
-
-
- if (jp != j) // swap rows j and jp
- for (k=1; k<=N; k++)
- {
- t = A(j,k);
- A(j,k) = A(jp,k);
- A(jp,k) =t;
- }
-
- if (j<M) // compute elements j+1:M of jth column
- {
- // note A(j,j), was A(jp,p) previously which was
- // guarranteed not to be zero (Label #1)
- //
- typename MaTRiX::element_type recp = 1.0 / A(j,j);
-
- for (k=j+1; k<=M; k++)
- A(k,j) *= recp;
- }
-
-
- if (j < minMN)
- {
- // rank-1 update to trailing submatrix: E = E - x*y;
- //
- // E is the region A(j+1:M, j+1:N)
- // x is the column vector A(j+1:M,j)
- // y is row vector A(j,j+1:N)
-
- Subscript ii,jj;
-
- for (ii=j+1; ii<=M; ii++)
- for (jj=j+1; jj<=N; jj++)
- A(ii,jj) -= A(ii,j)*A(j,jj);
- }
- }
-
- return 0;
-}
-
-
-
-
-template <class MaTRiX, class VecToR, class VecToRSubscripts>
-int LU_solve(const MaTRiX &A, const VecToRSubscripts &indx, VecToR &b)
-{
- assert(A.lbound() == 1); // currently for 1-offset
- assert(indx.lbound() == 1); // vectors and matrices
- assert(b.lbound() == 1);
-
- Subscript i,ii=0,ip,j;
- Subscript n = b.dim();
- typename MaTRiX::element_type sum = 0.0;
-
- for (i=1;i<=n;i++)
- {
- ip=indx(i);
- sum=b(ip);
- b(ip)=b(i);
- if (ii)
- for (j=ii;j<=i-1;j++)
- sum -= A(i,j)*b(j);
- else if (sum) ii=i;
- b(i)=sum;
- }
- for (i=n;i>=1;i--)
- {
- sum=b(i);
- for (j=i+1;j<=n;j++)
- sum -= A(i,j)*b(j);
- b(i)=sum/A(i,i);
- }
-
- return 0;
-}
-
-} // namespace TNT
-
-#endif // LU_H
-