12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #include "optimization/AdditionalIceUtils.h"
- //#include "vectort.h" // ICE
- // #include "ludecomp.h" //ICE
- // #include "mateigen.h" //ICE
- #include <cassert>
- #include <core/algebra/LUDecomposition.h>
- #include <core/algebra/EigValues.h>
- using namespace opt;
- //using namespace ice;
- 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);
- }
- // LU-Zerlegung mit Pivotisierung
- NICE::LUDecomposition luDecomp;
- luDecomp.decomposePacked(A, LU, indx, true);
-
- // Lösung M*x1=i1
- 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;
- // int n= A.cols();
- // L = matrix_type(n,1);
- // V = matrix_type(n,n);
- //
- // NICE::Vector l(n);
- //
- // NICE::EVArnoldi eig;
- // eig.getEigenvalues (A, l, V, n);
- // for(int i=0; i < n;++i)
- // {
- // L(i,0) = l[i];
- // }
- }
|