最近要使用 dtrsm 进行解方程,试用了一两个例子,但总是有误,归根结底还是对fortran的一些性质不熟悉,这里做一下记录

1、  XTRSM(SIDE, UPLD, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)

主要用来解方程,而且花样很多

op( A )*X = alpha*B,   or   X*op( A ) = alpha*B,

op( A ) = A   or   op( A ) = A**T.

我使用了别人x学习BLAS库 -- DTRSM_cocoonyang的专栏-CSDN博客

写的一个例子,错误颇多,这里做一些订正

2、fortran中数组 是按列排列的, 二维在内存也是按列排列的,所以 它经常用的 LDA or LDB 就是说的 行数,或者说一段内存按列 走排列,碰到 LDX个就立刻卡断弯折

所以 数组的大小是 A(LDA,列数),B(LDB,列数)

给数组赋值的时候:

a = (double *) malloc(lda * m * sizeof(double));// a size lda *m
    b = (double *) malloc(ldb * n * sizeof(double));// b size ldb *n

for (i = 0; i < lda; i++)//lda =4
    {
        for (j = 0; j <m ; j++)//m =4
        {           
            a[i + j * lda] = xxx; // 列优先,如果是行优先,这个地方变成  a[i*lda + j]

}

}

3 、具体的里一个例子:

void dtrsm_test()
{
    double *a;
    double alpha;
    double *b;
    char diag;
    int i;
    int j;
    int lda;
    int ldb;
    int m;
    int n;
    char side;
    char transa;
    char transb;
    char uplo;
 
    char functionName[] = "DTRSM";
    printf("================================================ \n");
    printf("Testing BLAS library function -- %s \n", functionName);
 
    printf("\n");
    //printf ( "TEST DTRSM\n" );
    printf("  DTRSM solves a linear system involving a triangular\n");
    printf("  matrix A and a rectangular matrix B.\n");
    printf("\n");
    printf("  1: Solve A  * X  = alpha * B;\n");
    printf("  2: Solve A' * X  = alpha * B;\n");
    printf("  3: Solve X  * A  = alpha * B;\n");
    printf("  4: Solve X  * A' = alpha * B;\n");
 
    /*
     Solve A * X = alpha * B.
     */
    side = 'L';
    uplo = 'U';
    transa = 'N';
    diag = 'N';
    m = 4;
    n = 5;
    alpha = 2.0;
    lda = m;
    ldb = m;

//全部按列排列!
    // a(lda,m) = 4 *4 or a(m,m)
    // b(ldb,n)  =4 *5 or b(m,n)

a = (double *) malloc(lda * m * sizeof(double));
    b = (double *) malloc(ldb * n * sizeof(double));

for (i = 0; i < lda; i++)//lda =4
    {
        for (j = 0; j <= i; j++)//m =4
        {
            
            a[i + j * lda] = 0.0;
        }
        for (j = i ; j < m; j++)
        {
            a[i + j * lda] = (double) (i + j + 2);
        }
    }
 
    transb = 'N';
 
    for ( i = 0; i < ldb; i++ )//ldb=4
    {
         for ( j = 0; j <n; j++ )//n=5
         {
             b[i+j*ldb] = 10 * (i+1) + (j+1);
         }
    }
 
    printf("Test matrix \n");
    r8mat_print(m, m, a, "  A = ");
    r8mat_print(m, n, b, "   B:");
 
    dtrsm_(&side, &uplo, &transa, &diag, &m, &n, &alpha, a, &lda, b, &ldb);
 
    r8mat_print(m, n, b, "  X = inv ( A ) * alpha * B:");
 
    free(a);
    free(b);
}

4、DTRSM 中 单元三角阵的研究

XTRSM(SIDE, UPLD, TRANSA, DIAG, M, N, ALPHA, A, LDA, B, LDB)

其他参数其实说的都很明白,只有这个

DIAG
          DIAG is CHARACTER*1
           On entry, DIAG specifies whether or not A is unit triangular
           as follows:
              DIAG = 'U' or 'u'   A is assumed to be unit triangular.
              DIAG = 'N' or 'n'   A is not assumed to be unit
                                  triangular.

试验了一下,如果 DIAG 为U,就是单元三角阵,那么A的主对角线都将设为1

你比如A 原本是

但如果你 设定 DIAG 为 u,那么A会自动变成下面,不管你A的主对角线初值是什么

用好blas和lapack库,dtrsm举例相关推荐

  1. BLAS+BLACS+LAPACK+SCALAPACK安装

    最快的安装是用下面的scalapack_installer,它将自动联网安装SCALAPACK以及所需要的BLAS, BLACS,LAPACK. 下面是简短说明: INTRODUCTION The S ...

  2. linux下安装blas和lapack

    相关链接:http://blog.csdn.net/mlnotes/article/details/9676269 http://blog.sina.com.cn/s/blog_5f350c96010 ...

  3. Linux Blas安装方法,科研1-linux下安装blas和lapack

    相关链接:http://blog.csdn.net/mlnotes/article/details/9676269 http://blog.sina.com.cn/s/blog_5f350c96010 ...

  4. linux编译blas,科学网—Linux下安装blas和lapack包小记 - 徐博伦的博文

    系统是centOS6.5,机器上已有gfortran编译器 从网上搜索下载blas.cblas.lapack的tar压缩文件包 1.编译blas 先解压文件 tar xvf blas.tgz cd b ...

  5. linux编译lapack,blas、lapack、cblas在Ubuntu上的安装

    这是整合借鉴几篇别人的文章,但是做了一点修改.(最初是谁的,忘记了) 1.确保机器上安装了gfortran编译器,如果没有安装的话,可以使用 sudo apt-get install gfortran ...

  6. 【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)

    给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码) 一.安装QMT 二.给QMT安装python 三.给QMT的python环境安装第三方库 1.准备python虚拟环境 ...

  7. Intel Visual Fortran Compiler 11调用lapack库实现并行多处理计算

    Intel Visual Fortran Compiler 11调用lapack库实现并行多处理计算 采用fortran进行数值计算的朋友们都应该听说过大名鼎鼎的lapack库,我就不多做介绍了,在此 ...

  8. 腾讯云tcp题库包含哪些知识点?腾讯云tcp题库试题举例

    腾讯云tcp认证是腾讯公司针对于云计算.云运维.云架构等人员的高级工程师认证,为了考取腾讯tcp认证,当然需要学习腾讯云tcp题库.那么,腾讯云tcp题库包含哪些知识点?我从网上找了些腾讯云tcp题库 ...

  9. blas、lapack、atlas在Ubuntu上的安装

    最近想使用atlas,可是在网上找了好些教程,自己编译源码atlas总是报错.经过Google,查看一些国外大神的帖子,在自己艰辛的测试下,终于安装上了atlas. 1.使用到的安装包主要有blas, ...

最新文章

  1. final关键字的这8个小细节,你get到几个?
  2. LeetCode之283. Move Zeroes
  3. Del.icio.us应用工具杂烩
  4. 如何成为一个合格的 Java程序员
  5. css设置字符长度,在css中设置最大字符长度
  6. 微信小程序知识点GET
  7. 齐头并进(51Nod-1649)
  8. 存数字,储未来——新华三2018存储瞄准闪存、海量、AI与超融合
  9. MyBatis学习笔记(1)-MyBatis介绍
  10. 设置谷歌浏览器和Edge浏览器为黑色背景
  11. 全国大学生智能汽车竞赛-室外光电组无人驾驶挑战赛-2019
  12. jQuery实现打地鼠游戏
  13. 论文笔记:Pointing Novel Objects in Image Captioning
  14. jQuery实现密保互斥问题
  15. Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?一文教会你 | 超级详细,建议收藏
  16. torch.norm-L2范数
  17. c32循迹小车c语言程序,stm32篇--小车循迹
  18. QQ号码很危险 后果很严重
  19. MongoDB-Java的两个基本操作Upsert和insertMany
  20. 无边框透明窗口设置鼠标穿透与不穿透功能

热门文章

  1. qeephp内容分页
  2. Hbase-之StoreFile的Compaction(手动major compaction、管理compaction、compaction的策略以及相关配置参数)
  3. java防止xff伪造ip
  4. 查看网络计算机端口,怎么查网络端口被占用?如何查看某个端口被谁占用
  5. 2019秋招C++软件开发笔经面经个人总结
  6. 用IOS手机看小说,阅读器APP怎么选
  7. W32/Pate.a 病毒处理小记
  8. 【AIOQuant量化交易框架】第1讲-高频交易介绍
  9. 女生高考712分查完分就睡觉了
  10. 百问网七天物联网课程笔记(第七天)