华为手环3-webservice调用
![boost库](/uploads/image/0875.jpg)
2023年4月4日发(作者:epson打印头清洗)
ThefollowingcodeinvertsthematrixinputusingLU-decompositionwith
nce:NumericalRecipiesinC,2nd
ed.,byPress,Teukolsky,Vetterling&Flannery.
#ifndefINVERT_MATRIX_HPP
#defineINVERT_MATRIX_HPP
//REMEMBERtoupdate""headerincludesfromboost-CVS
#include
#include
#include
#include
#include
#include
namespaceublas=boost::numeric::ublas;
/*Matrixinversionroutine.
Useslu_factorizeandlu_substituteinuBLAStoinvertamatrix*/
template
boolInvertMatrix?(constublas::matrix
inverse){
usingnamespaceboost::numeric::ublas;
typedefpermutation_matrix
//createaworkingcopyoftheinput
matrix
//createapermutationmatrixfortheLU-factorization
pmatrixpm(1());
//performLU-factorization
intres=lu_factorize(A,pm);
if(res!=0)returnfalse;
//createidentitymatrixof"inverse"
(ublas::identity_matrix
//backsubstitutetogettheinverse
lu_substitute(A,pm,inverse);
returntrue;
}
#endif//INVERT_MATRIX_HPP
s,FredrikOrderud.
MatrixinversionwithSingularityDetection
omplexandprobably
inefficientversionisatthesecondsectionofEffectiveUBLAS/Matrix
Inversion.
#include
#include
#include
#include
#include
int_tmain(intargc,_TCHAR*argv[])
{
//可不要与std::vector混在一起啊.
//可考虑usingnamespaceboost::numeric;
//然后用ublas::vector
usingnamespaceboost::numeric::ublas;
constintn=4;
permutation_matrix
matrix
vector
vector
v(0)=5;
v(1)=3;
v(2)=2;
v(3)=2;
m(0,0)=1;
m(0,1)=2;
m(0,2)=1;
m(0,3)=1;
m(1,0)=2;
m(1,1)=1;
m(1,2)=0;
m(1,3)=0;
m(2,0)=1;
m(2,1)=0;
m(2,2)=1;
m(2,3)=0;
m(3,0)=1;
m(3,1)=0;
m(3,2)=0;
m(3,3)=1;
try{
lu_factorize(m,P);
x=v;
lu_substitute(m,P,x);
std::cout<<"解向量:"<
}
catch(...){
std::cout<<"奇异矩阵(无解或无穷解)."<
}
getchar();
return0;
}
m=[1,2,1,1;2,1,0,0;1,0,1,0;1,0,0,1];
lu_factorize(m)的结果如下:
m=[1,2,1,1;2,-3,-2,-2;1,2/3,4/3,1/3;1,2/3,1/4,5/4];
其中L,U阵为
L=[1,0,0,0;2,1,0,0;1,2/3,1,0;1,2/3,1/4,1];即L=tril(m,-1)+eye(1);m的下三角阵与单位矩阵之和
U=[1,2,1,1;0,-3,-2,-2;0,0,4/3,1/3;0,0,0,4/5];即U=tril(m);m的上三角阵
可得m=L*U;
lu_factorize(m,P)的结果
P=[1,1,2,3];注意P是一permutation_matrix
m=[2,1,0,0;1/2,3/2,1,1;1/2,-1/3,4/3,1/3;1/2,-1/3,1/4,5/4];
L=[1,0,0,0;1/2,1,0,0;1/2,-1/3,1,0;1/2,-1/3,1/4,1];
U=[2,1,0,0;0,3/2,1,1;0,0,4/3,1/3;0,0,0,5/4];
Pm=LU,P=[1,1,2,3]
Pm=A,A的0行为m的1行,A的1行为新的1行(m的第0行),A的2行为m的2行,
A的3的行为m的3行。
更多推荐
boost库
发布评论