#include "mkl.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i = 0;
double A[6] = { 1.0, 2.0, 1.0, -3.0, 4.0, -1.0 };
double b[2] = { 1.0, 2.0};
double a[3] = { 0.0 };
//在列展开下,不管A是否转置,lbda:A矩阵的行数
//在行展开下,不管A是否转置,lbda:A矩阵的列数
/*按列主序展开*/
//1、无转置
cout << "按列主序展开,无转置:" << endl;
cblas_dgemv(CblasColMajor, CblasTrans, 2, 3, 1.0, A, 2, b, 1, 0.0, a, 1);
for (i = 0; i <3; i++)
printf("%lf ", a[i]);
printf("\n");
/*A = [1.0 1.0 4.0; 2.0 -3.0 -1.0];
A'= [1 2; 1 -3; 4 -1]; //和矩阵间的乘法不同,此处表示A的转置
a = A'* b */
//2、转置
cout << "按列主序展开,转置:" << endl;
cblas_dgemv(CblasColMajor, CblasNoTrans, 3, 2, 1.0, A, 3, b, 1, 0.0, a, 1);
for (i = 0; i < 3; i++)
printf("%lf ", a[i]);
printf("\n");
/*A = [1.0 -3.0; 2.0 4.0; 1.0 -1.0];
a = A * b */
cin.get();
}
结果:
将注释部分的表达式代入matlab 中计算结果与上述一致。