一般matlab是自带umfpack的lib的,所以应该可以直接用,如果不可以,就先安装MinGW64等,再点击umfpack_install安装就可以了
在C和fortran中,umfpack是使用CSC格式储存稀疏矩阵的,在matlab中,只要对COO格式的矩阵使用sparse就可以使用umfpack函数了。
umfpack函数使用
上图是官方手册,对照着function在matlab使用umfpack
umfpack函数参数
我暂时就只需要umfpack函数,就研究了这个,只能说以我的理解来用吧。点开umfpack.m
% opts.prl >= 0, default 1 (errors only)
% opts.strategy 'auto', 'unsymmetric', 'symmetric', default auto
% opts.ordering 'amd' AMD for A+A', COLAMD for A'A
% 'default' use CHOLMOD (AMD then METIS; take best fount)
% 'metis' use METIS
% 'none' no fill-reducing ordering
% 'given' use Qinit (this is default if Qinit present)
% 'best' try AMD/COLAMD, METIS, and NESDIS; take best
% opts.tol default 0.1
% opts.symtol default 0.001
% opts.scale row scaling: 'none', 'sum', 'max' default:'sum'.
% opts.irstep max # of steps of iterative refinement, default 2
% opts.singletons 'enable','disable' default 'enable'
%
里面有这样的预设,如果你使用x = umfpack(A,'\',b) 或者 x = umfpack(A,'\',b,umfpack)都是使用的默认设置。如果想要自己自定义,就需要
Control.prl = 0 ;
Control.strategy = 'auto';
Control.ordering = 'amd';
Control.tol = 0.1;
Control.symtol = 0.001;
Control.scale = 'max';
Control.irstep = 3;
Control.singletons ='enable';
以上就举个例子,参数随便写的,再x = umfpack(A,'\',b,Cotrol)这样函数就会用自定义的设置求解。这些参数的含义再其自带的UserGuide都有说明,我就说几个。
prl:应该是设置RCOND分界线,设置默认为1,设置为0编译器就不会对奇异值报错
irstep:尝试的迭代优化步骤的最大次数。
strategy:这是最重要的控制参数。它决定了UMFPACK应该使用哪种排序和旋转策略。有3种选择:auto unsymmetic symmetric
scale:选择对矩阵缩放的方法,下图是解释。
一般就设置成默认就可以了。
使用手册都是英文的,想了解更多用法,可以去看下。