用好blas和lapack库,dtrsm举例
最近要使用 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举例相关推荐
- BLAS+BLACS+LAPACK+SCALAPACK安装
最快的安装是用下面的scalapack_installer,它将自动联网安装SCALAPACK以及所需要的BLAS, BLACS,LAPACK. 下面是简短说明: INTRODUCTION The S ...
- linux下安装blas和lapack
相关链接:http://blog.csdn.net/mlnotes/article/details/9676269 http://blog.sina.com.cn/s/blog_5f350c96010 ...
- Linux Blas安装方法,科研1-linux下安装blas和lapack
相关链接:http://blog.csdn.net/mlnotes/article/details/9676269 http://blog.sina.com.cn/s/blog_5f350c96010 ...
- linux编译blas,科学网—Linux下安装blas和lapack包小记 - 徐博伦的博文
系统是centOS6.5,机器上已有gfortran编译器 从网上搜索下载blas.cblas.lapack的tar压缩文件包 1.编译blas 先解压文件 tar xvf blas.tgz cd b ...
- linux编译lapack,blas、lapack、cblas在Ubuntu上的安装
这是整合借鉴几篇别人的文章,但是做了一点修改.(最初是谁的,忘记了) 1.确保机器上安装了gfortran编译器,如果没有安装的话,可以使用 sudo apt-get install gfortran ...
- 【QMT】给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码)
给QMT量化交易软件安装和调用第三方库(举例通达信pytdx,MyTT,含代码) 一.安装QMT 二.给QMT安装python 三.给QMT的python环境安装第三方库 1.准备python虚拟环境 ...
- Intel Visual Fortran Compiler 11调用lapack库实现并行多处理计算
Intel Visual Fortran Compiler 11调用lapack库实现并行多处理计算 采用fortran进行数值计算的朋友们都应该听说过大名鼎鼎的lapack库,我就不多做介绍了,在此 ...
- 腾讯云tcp题库包含哪些知识点?腾讯云tcp题库试题举例
腾讯云tcp认证是腾讯公司针对于云计算.云运维.云架构等人员的高级工程师认证,为了考取腾讯tcp认证,当然需要学习腾讯云tcp题库.那么,腾讯云tcp题库包含哪些知识点?我从网上找了些腾讯云tcp题库 ...
- blas、lapack、atlas在Ubuntu上的安装
最近想使用atlas,可是在网上找了好些教程,自己编译源码atlas总是报错.经过Google,查看一些国外大神的帖子,在自己艰辛的测试下,终于安装上了atlas. 1.使用到的安装包主要有blas, ...
最新文章
- final关键字的这8个小细节,你get到几个?
- LeetCode之283. Move Zeroes
- Del.icio.us应用工具杂烩
- 如何成为一个合格的 Java程序员
- css设置字符长度,在css中设置最大字符长度
- 微信小程序知识点GET
- 齐头并进(51Nod-1649)
- 存数字,储未来——新华三2018存储瞄准闪存、海量、AI与超融合
- MyBatis学习笔记(1)-MyBatis介绍
- 设置谷歌浏览器和Edge浏览器为黑色背景
- 全国大学生智能汽车竞赛-室外光电组无人驾驶挑战赛-2019
- jQuery实现打地鼠游戏
- 论文笔记:Pointing Novel Objects in Image Captioning
- jQuery实现密保互斥问题
- Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?一文教会你 | 超级详细,建议收藏
- torch.norm-L2范数
- c32循迹小车c语言程序,stm32篇--小车循迹
- QQ号码很危险 后果很严重
- MongoDB-Java的两个基本操作Upsert和insertMany
- 无边框透明窗口设置鼠标穿透与不穿透功能