我正在學習在c/C++中使用petsc以便在其中使用稀疏矩陣分解函數(MatICCFactor)。我做的第一步是將玩具矩陣讀入petsc中以創建一個稀疏矩陣並在我做任何事情之前查看矩陣。我是一個用c/C++編寫的BTW初學者。 這裏是我使用的代碼:使用Petsc庫構造具有向量的稀疏矩陣
static char help[] = "Tests Petscmat functions.\n\n";
#include<petscmat.h>
#include <petscsys.h>
int main(int argc,char **args)
{
PetscInitialize(&argc,&args,(char*)0, help);
Mat *A;
PetscInt m = 3;
PetscInt n = 3;
//to build sparse matrix(CSR)
/*
* 1 0 0
* 2 0 3
* 4 5 6
*/
PetscInt Iv[4]={0,1,3,6}; //i vec size nrow+1
PetscInt Jv[6]={0,0,2,0,1,2}; //j vec size nnz
PetscScalar vv[6]={1,2,3,4,5,6}; //v vec size nnz
PetscInt nzrv[3]={1,2,3}; // nnz per row
PetscViewer viewer;
//MatSeqAIJSetPreallocation(A,n,nzrv);//If nnz is given then nz is ignored
MatCreateSeqAIJWithArrays(PETSC_COMM_WORLD, m, n, Iv,Jv,vv, A);
MatView(A,viewer);
PetscViewerDestroy(&viewer);
MatDestroy(&A);
PetscFinalize();
return 0;
}
它編譯,但會導致違反分割運行時。我發現MatView()是分段錯誤的根源。任何人都可以幫助我如何正確使用MatView?