12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "optimization/AdditionalIceUtils.h"
- #include <cassert>
- #include <core/algebra/LUDecomposition.h>
- #include <core/algebra/EigValues.h>
- using namespace opt;
- matrix_type & MatrixAddVal ( matrix_type & mat, double val )
- {
- for(int i=0; i< mat.rows(); ++i)
- {
- for(int j =0; j<mat.cols(); ++j)
- {
- mat(i,j) += val;
- }
- }
- return mat;
- }
- double MatrixSum(const matrix_type &mat)
- {
- double sum=0.0;
- for(int i=0; i< mat.rows(); ++i)
- {
- for(int j =0; j<mat.cols(); ++j)
- {
- sum += mat(i,j);
- }
- }
- return sum;
- }
- void linSolve(const OPTIMIZATION::matrix_type &A, OPTIMIZATION::matrix_type &x, const OPTIMIZATION::matrix_type b)
- {
- int n=A.cols();
- assert(x.rows() == n && b.rows() == n );
- matrix_type LU;
- NICE::VectorT<int> indx;
- NICE::Vector xv(n);
- NICE::Vector iv(n);
- for(int i=0; i < n;++i)
- {
- iv[i] = b(i,0);
- }
-
- NICE::LUDecomposition luDecomp;
- luDecomp.decomposePacked(A, LU, indx, true);
-
-
- xv = luDecomp.solve(LU,indx,iv);
-
- x=matrix_type(n,1);
- for(int i=0; i < n;++i)
- {
- x(i,0) = xv[i];
- }
-
- }
- void getEig(const OPTIMIZATION::matrix_type &A, OPTIMIZATION::matrix_type &L, OPTIMIZATION::matrix_type &V)
- {
- std::cerr << "This feature is not supported currently" << std::endl;
- }
|