MKL 函数 pdgemv:双精度矩阵向量乘法
MKL 函数 pdgemv 用于执行双精度精度的矩阵向量乘法。其函数原型为:
void pdgemv(char trans, int m, int n, double alpha, const double *a, int lda, const double *x, int incx, double beta, double *y, int incy);
函数参数解释如下:
trans:指定矩阵a的转置方式,取值为'N'、'T'或'C',分别表示不转置、转置和共轭转置。m:矩阵a的行数。n:矩阵a的列数。alpha:标量乘数。a:指向矩阵a的存储位置。lda:矩阵a的列宽。x:指向向量x的存储位置。incx:x中相邻元素之间的间隔。beta:标量乘数。y:指向向量y的存储位置。incy:y中相邻元素之间的间隔。
函数功能:执行矩阵向量乘法计算 y = alpha * A * x + beta * y。
注意事项:
- 矩阵
a在存储时需要按列存储,也就是说,第一列元素存储在a[0]到a[m-1],第二列元素存储在a[m]到a[2*m-1],以此类推。 incx和incy可以为负值,表示x和y的存储顺序与a不同。
示例代码:
#include <mkl.h>
#include <stdio.h>
int main()
{
const int m = 3;
const int n = 2;
const int lda = m;
const int incx = 1;
const int incy = 1;
double a[m*n] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
double x[n] = {1.0, 2.0};
double y[m] = {0.0, 0.0, 0.0};
const double alpha = 1.0;
const double beta = 0.0;
char trans = 'N';
pdgemv(trans, m, n, alpha, a, lda, x, incx, beta, y, incy);
for (int i = 0; i < m; i++)
{
printf("y[%d] = %.2f\n", i, y[i]);
}
return 0;
}
该示例代码执行矩阵向量乘法计算 y = A * x。其中,矩阵 A 为:
1.0 4.0
2.0 5.0
3.0 6.0
向量 x 为:
1.0
2.0
计算结果为:
y[0] = 5.00
y[1] = 11.00
y[2] = 17.00
原文地址: https://www.cveoy.top/t/topic/onOl 著作权归作者所有。请勿转载和采集!