VC2005中测试Taucs库通过

来源:互联网 发布:网络剧主题曲好听 编辑:程序博客网 时间:2024/05/01 22:08

      所使用的TaucsOpenMesh中的版本。将之拷贝到一个目录,如D:/DevTools/taucs-win32.然后修改创建的Project 的属性,在Code Generation选择Multithread ReleaseMultithread Debug,然后加上附加的路径(这个可以在Tools->Options中一次性地添加).

然后,将下面的例子放于一个源代码文件中编译。

 

/* Solve a trivial symmetric Ax=b system :

 

[ 1.0 0.5 0.0 0.0 ]       [ 1.0 ]

[ 0.5 1.0 0.5 0.0 ]       [ 2.0 ]

[ 0.0 0.5 1.0 0.5 ] X   = [ 3.0 ]

[ 0.0 0.0 0.5 1.0 ]       [ 4.0 ]

 

*/

 

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <assert.h>

#define TAUCS_CORE_DOUBLE

#include <taucs.h>

 

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

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

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

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

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

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

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

 

 

int main(int argc, char* argv[])

  {

  int m = 4,n = 4,nnz = 7, i, used;

  taucs_double x[4]; 

  taucs_double b[4]; 

  taucs_ccs_matrix * pMatrix; 

  taucs_logfile ("stdout");

  pMatrix = taucs_ccs_create( m, n, nnz, TAUCS_DOUBLE );

  pMatrix->colptr[0] = 0;

  pMatrix->colptr[1] = 2; 

  pMatrix->colptr[2] = 4; 

  pMatrix->colptr[3] = 6; 

  pMatrix->colptr[4] = 7;   

  used = 0;

  for (i = 0; i < 4; i++ )   

    {

    pMatrix->rowind[used] = i;

    pMatrix->taucs_values[used] = 1.0;

    used++;

    if (i+1 <= 3)

      {

      pMatrix->rowind[used] = i+1;

      pMatrix->taucs_values[used] = 0.5;

      used++;

      } 

    }

  pMatrix->flags += TAUCS_SYMMETRIC; 

  pMatrix->flags += TAUCS_LOWER;

  i = taucs_ccs_write_ijv(pMatrix, "test.txt" );       

 

  b[0] = 1.0; b[1] = 2.0; b[2] = 3.0; b[3] = 4.0;

  char* options[] = { "taucs.factor.LLT=true","taucs.factor.ordering=metis",NULL };   

  i = taucs_linsolve (pMatrix,NULL,1,x,b,options,NULL); 

  if (i != TAUCS_SUCCESS)

    {

    printf ("Solution error./n");

    if (i==TAUCS_ERROR)

      printf ("Generic error.");

    if (i==TAUCS_ERROR_NOMEM)

      printf ("NOMEM error.");   

    if (i==TAUCS_ERROR_BADARGS)

      printf ("BADARGS error.");  

    if (i==TAUCS_ERROR_MAXDEPTH)

      printf ("MAXDEPTH error.");   

    if (i==TAUCS_ERROR_INDEFINITE)

      printf ("NOT POSITIVE DEFINITE error.");        

    }

  else

    {

    printf ("Solution success./n");   

    for (i = 0; i < 4; i++)

      printf ("%f/n",x[i]);     

    }

  taucs_dccs_free(pMatrix);

  return 0;

  }

运行的结果如下:

 

原创粉丝点击