UMFPACK的使用

UMFPACK的使用

2008-3-25       Jingwenlai

UMFPACK是求解线性方程组AX=B的函数库。其使用也比较简单。以下先给个原UserGuide中简单的例子:

#include <iostream>

#include "umfpack.h"

using namespace std;

 

#pragma comment(lib,"libamd.lib")

#pragma comment(lib,"libatlas.lib")

#pragma comment(lib,"libf77blas.lib")

#pragma comment(lib,"libg 2c .lib")

#pragma comment(lib,"libgcc.lib")

#pragma comment(lib,"libumfpack.lib")

 

int n = 5;

int Ap[] = {0,2,5,9,10,12};

int Ai[] = {0,1,0,2,4,1,2,3,4,2,1,4};

double Ax[] = {2.0,3.,3.,-1.,4.,4.,-3.,1.,2.,2.,6.,1.};

double b[] = {8.,45.,-3.,3.,19.};

double x[5];

 

int main()

{

    double * null = (double*)NULL;

   

    void * Symbolic,*Numeric;

    (void)umfpack_di_symbolic(n,n,Ap,Ai,Ax,&Symbolic,null,null);

    (void)umfpack_di_numeric(Ap,Ai,Ax,Symbolic,&Numeric,null,null);

 

    umfpack_di_free_numeric(&Symbolic);

    umfpack_di_solve(UMFPACK_A,Ap,Ai,Ax,x,b,Numeric,null,null);

    umfpack_di_free_numeric(&Numeric);

    for(int i = 0; i < n; i++)

       cout<<"x["<<i<<"]="<<x[i]<<endl;

    return 0;

}

UMFPACKTaucs一样,为节省存储空间,都采用Compressed Column Storage来存储。这种存储只需要2nnz+n+1的存储空间,而传统的二维方式存储则需要n*n的存储空间。有关Compressed Column Storage的描述请先参见以下的Compressed Row StorageCCS的介绍:

CCS实际上可以看成A^TCRS:

 

相对于TAUCS来说,UMFPACK可能较少人使用,但是,TAUCS在我看来,对求解AXB时输入A不方便,而UMFPACK除提供了如上面的例子那样的CCS格式外,还提供了另外一种称为triplet的格式作为输入,然后可以通过umfpack_triplet_to_col来将triplet格式转换成CCS格式,继而使用UMFPACK中的函数进行求解。Triplet格式可以看成(i ,j ,Aij).若一个稀疏阵有nnz个非零元素,则Ti[nnz],Tj[nnz],Tx[nnz]可以保存所有的非零元素。例,若Ti[k] = I,Tj[k] = j, Tx[k] = a,则表示Aij列为元素a

在输入完矩阵的元素并进行转换之后,用UMFPACK求解的步骤只包括三步,即SymbolicFactorization,NumericalFactorization,Solve.

本文只是对UMFPACK的简单介绍,详细的使用请参见UserGuide.

 
### 回答1: 这个错误通常是因为编译器无法找到 umfpack.h 文件或目录。您需要确保您的编译器可以找到该文件或目录。您可以尝试在编译器的 include 路径中添加 umfpack.h 文件所在的路径,或者确保您已经正确安装了 UMFPACK 库。 ### 回答2: "umfpack.h没有那个文件或目录"这个错误通常发生在尝试编译和构建程序时。这个错误表明找不到名为umfpack.h的文件或目录。 umfpack.h是一种用于稀疏矩阵计算的库文件的头文件。要解决这个错误,你可以采取以下步骤: 1. 确保你已经正确安装了umfpack库。可以在相关文档中找到安装说明。检查库文件是否正确安装并位于你的计算机上。 2. 确保你在编译过程中正确地指定了umfpack库的路径。在编译和构建命令中,应该包含正确的库路径和链接选项。如果未正确设置,编译器将无法找到umfpack.h文件。 3. 检查你的代码中是否正确包含了umfpack.h头文件。确认头文件的名称和路径是否正确拼写和指定。 4. 如果你是在Windows环境下编译程序,请确保你已经正确设置了环境变量。有时候,库文件的路径需要手动添加到系统的环境变量中,以便编译器能够找到它。 总之,"umfpack.h没有那个文件或目录"错误通常是由库文件未正确安装、路径设置不正确或代码中未正确包含头文件引起的。通过检查这些方面,你应该能够解决此问题并成功编译你的程序。 ### 回答3: 当你收到"umfpack.h没有那个文件或目录"的错误消息时,这意味着编译器无法找到你所需要的"umfpack.h"头文件。 "umfpack"是一个开源的稀疏线性代数库,用于求解稀疏线性方程组。它包含了一系列的头文件和库文件,而"umfpack.h"头文件包含了库的函数和结构的声明和定义。 出现"umfpack.h没有那个文件或目录"错误消息有以下几种可能的原因: 1. 你没有正确地安装"umfpack"库。在编译代码之前,你需要确保已经正确地安装了该库,包括头文件和库文件。 2. 头文件的路径没有正确地配置。你需要在编译器的编译选项中包含正确的"umfpack.h"头文件的路径,以便编译器可以找到并包含该头文件。 3. 头文件的名称不正确。确保你使用的是正确的头文件名称,如果名称大小写不匹配,编译器也会报错。 解决这个问题的方法是: 1. 确保你已经正确地安装了"umfpack"库,包括头文件和库文件。可以查看该库的文档以获取安装指南。 2. 检查你的编译器选项是否正确地配置了"umfpack.h"头文件的路径。你可能需要通过添加"-I"选项来指定该头文件的路径。 3. 确保你使用的是正确的头文件名称,大小写要匹配。 总之,"umfpack.h没有那个文件或目录"错误消息表明编译器无法找到所需的"umfpack.h"头文件。你需要检查安装和配置是否正确,以确保头文件能够被正确地找到和包含。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值