当前位置: 首页 > news >正文

成都美食网站设计论文公司营销网络

成都美食网站设计论文,公司营销网络,怎么样推广网站,wordpress 文件下载功能前言 前面介绍了各种向量-向量#xff0c;矩阵-向量#xff0c;矩阵-矩阵的函数简介。根据自身目前状况#xff0c;主要使用实数域的操作#xff0c;也就是说关注单精度float类型的s和双精度double类型的d。还有就是用的基本都是全矩阵#xff0c;没有经过压缩#xff0…前言 前面介绍了各种向量-向量矩阵-向量矩阵-矩阵的函数简介。根据自身目前状况主要使用实数域的操作也就是说关注单精度float类型的s和双精度double类型的d。还有就是用的基本都是全矩阵没有经过压缩也不是对称、三角、带状的某一种情况。所以主要还是总结一般的乘法、加法操作。 【注】代码都以单精度float的情况书写主要流程要记住使用mkl_malloc申请内存使用mkl_free释放内存。n年没用过C了凑合看看吧。 学MKL的肯定对编程有一定程度了解智能提示是一个很好的工具在VS中输入cblas_s以后会自动补全所有的单精度操作函数那么根据常规经验就能判断出它到底用于做什么以及需要的参数比如提示axpby意思就是a*x加b*y。还有就是函数有两种一种是有返回值一种无返回值怎么办只能提示看函数的声明是void还是float或者是double类型即可。 向量-向量 加法 运算 ya∗xb∗yy=a*x+b*y代码#includestdio.h #includestdlib.h #includemkl.h int main() {float *A, *B;//两个向量int a1, b1;//标量int n 5;//向量大小A (float *)mkl_malloc(n * 1 * sizeof(float), 64);B (float *)mkl_malloc(n * 1 * sizeof(float), 64);printf(The 1st vector is );for (int i 0; i n; i){A[i] i;printf(%2.0f, A[i]);}printf(\n);printf(The 2st vector is );for (int i 0; i n; i){B[i] i1;printf(%2.0f, B[i]);}printf(\n);//计算a*Ab*Bcblas_saxpby(n, a, A, 1, b, B, 1);printf(The a*Ab*B is );for (int i 0; i n; i){printf(%2.0f, B[i]);}printf(\n);mkl_free(A);mkl_free(B);getchar();return 0; } 结果 The 1st vector is 0 1 2 3 4 The 2st vector is 1 2 3 4 5 The a*Ab*B is 1 3 5 7 9 乘法 运算向量点乘 代码 //乘法 #includestdio.h #includestdlib.h #include mkl.hint main() {float *A, *B;//两个向量int a 1, b 1;//标量int n 5;//向量大小float res;A (float *)mkl_malloc(n * 1 * sizeof(float), 64);B (float *)mkl_malloc(n * 1 * sizeof(float), 64);printf(The 1st vector is );for (int i 0; i n; i){A[i] i;printf(%2.0f, A[i]);}printf(\n);printf(The 2st vector is );for (int i 0; i n; i){B[i] i 1;printf(%2.0f, B[i]);}printf(\n);//乘法:对应元素乘积的加和rescblas_sdot(n, A, 1, B, 1);printf(点乘结果 %2.0f,res);printf(\n);mkl_free(A);mkl_free(B);getchar();return 0; } 结果 The 1st vector is 0 1 2 3 4 The 2st vector is 1 2 3 4 5 点乘结果 40 二范数 运算二范数或者欧几里得范数是所有元素平方和开根号 代码 //计算向量二范数 #includestdio.h #includestdlib.h #includemkl.h void main() {float *A;int n 5;float res;A (float *)mkl_malloc(n*sizeof(float), 64);printf(The original vector\n);for (int i 0; i n; i){A[i] i 1;printf(%2.0f , A[i]);}printf(\n);res cblas_snrm2(n, A, 1);//计算二范数printf(The norm2 of vector is:%2.6f, res);mkl_free(A);getchar(); } 结果 The original vector1 2 3 4 5 The norm2 of vector is:7.416198 旋转 运算将空间中一个点绕原点旋转的角度 代码以二维坐标点(2,0)(2,0)绕原点旋转45°为例。代码有点问题一释放内存就出错具体原因是对两个向量开辟空间以后又让它们指向了别的地址造成了开辟空间无用。所以调用Cblas函数可以直接把指向数组的指针丢进去。暂时先这样理解吧等把C复习一遍再来看看分析的对不对。 //旋转以二维空间中的一个点(20)绕原点旋转45° #includestdio.h #includestdlib.h #includemkl.h #includemath.h #define M_PI 3.14159265358979323846int main() {float *A, *B;//A是坐标点B是旋转矩阵float point1[] { 2 };//旋转点x坐标float point2[] { 0 };//旋转点y坐标float rotpoint[] { cos(45.0*M_PI / 180), sin(45.0*M_PI / 180) };//A (float *)mkl_malloc(1 * sizeof(float), 64);//B (float *)mkl_malloc(1 * sizeof(float), 64);A point1;B point2;printf(The point is (%2.0f,%2.0f),point1[0],point2[0]);printf(\n);//计算旋转后的点cblas_srot(1, A, 1, B, 1, rotpoint[0], rotpoint[1]);printf(The rotated is (%2.6f,%2.6f), A[0], B[0]);printf(\n);//mkl_free(A);//mkl_free(B);getchar();return 0; }结果还是比较正确的 The point is ( 2, 0) The rotated is (1.414214,-1.414214) 缩放 运算 xa∗xx=a*x代码//计算向量缩放 #includestdio.h #includestdlib.h #includemkl.h void main() {float *A;int n 5;float scal0.1;A (float *)mkl_malloc(n*sizeof(float), 64);printf(The original vector\n);for (int i 0; i n; i){A[i] i 1;printf(%2.0f , A[i]);}printf(\n);cblas_sscal(n, scal, A, 1);//缩放printf(The scaled vector\n);for (int i 0; i n; i){printf(%2.1f , A[i]);}mkl_free(A);getchar(); } 结果 The original vector1 2 3 4 5 The scaled vector 0.1 0.2 0.3 0.4 0.5 交换 运算交换两个向量 代码 //交换 #includestdio.h #includestdlib.h #includemkl.hint main() {float *A, *B;//两个向量int a 1, b 1;//标量int n 5;//向量大小A (float *)mkl_malloc(n * 1 * sizeof(float), 64);B (float *)mkl_malloc(n * 1 * sizeof(float), 64);printf(The 1st vector is );for (int i 0; i n; i){A[i] i;printf(%2.0f, A[i]);}printf(\n);printf(The 2st vector is );for (int i 0; i n; i){B[i] i 1;printf(%2.0f, B[i]);}printf(\n);//交换ABcblas_sswap(n, A, 1, B, 1);printf(The 1st swapped vctor is);for (int i 0; i n; i){printf(%2.0f, A[i]);}printf(\n);printf(The 2st swapped vctor is);for (int i 0; i n; i){printf(%2.0f, B[i]);}printf(\n);mkl_free(A);mkl_free(B);getchar();return 0; } 结果 The 1st vector is 0 1 2 3 4 The 2st vector is 1 2 3 4 5 The 1st swapped vctor is 1 2 3 4 5 The 2st swapped vctor is 0 1 2 3 4 最值 运算求最大最小值 代码 //求最大最小值 #includestdlib.h #includestdio.h #includemkl.h void main() {float *A;//向量int n 5;//向量大小int max, min;A (float *)mkl_malloc(n * 1 * sizeof(float), 64);printf(The 1st vector is );for (int i 0; i n; i){A[i] i;printf(%2.0f, A[i]);}printf(\n);//计算最值位置maxcblas_isamax(n, A, 1);min cblas_isamin(n, A, 1);printf(The max value is %2.0f, position is %d\n, A[max], max 1);printf(The min value is %2.0f, position is %d\n, A[min], min 1);mkl_free(A);getchar(); } 结果 The 1st vector is 0 1 2 3 4 The max value is 4, position is 5 The min value is 0, position is 1 矩阵-向量 乘法1 运算: y:α∗A∗xβ∗yy := \alpha*A*x + \beta*y代码//矩阵-向量乘积 #includestdio.h #includestdlib.h #includemkl.h int main() {float *A, *B,*C;//A是矩阵B是向量,C是向量int m 2;//矩阵行数int n 5;//向量维度矩阵列数int a 1, b 1;//缩放因子A (float *)mkl_malloc(m*n*sizeof(float), 64);B (float *)mkl_malloc(n*sizeof(float), 64);C (float *)mkl_malloc(m*sizeof(float), 64);//赋值,按行存储?printf(数组为\n);for (int i 0; i m*n; i){if (i%n 0 i ! 0)printf(\n);A[i] i;printf(%2.0f,A[i]);} printf(\n);printf(向量为\n);for (int i 0; i n; i){B[i] i 1;printf(%2.0f, B[i]);}printf(\n);for (int i 0; i m*n; i)C[i] 0;//2*5的矩阵与5*1的向量相乘cblas_sgemv(CblasRowMajor, CblasNoTrans, m, n, a, A, n, B, 1, b, C, 1);printf(矩阵-向量乘法结果\n);for (int i 0; i m; i){printf(%2.0f , C[i]);}mkl_free(A);mkl_free(B);mkl_free(C);getchar();return 0; } 结果 数组为0 1 2 3 45 6 7 8 9 向量为1 2 3 4 5 矩阵-向量乘法结果 40 115 乘法2 运算 A:α∗x∗y′A,A := \alpha*x*y'+ A,代码//矩阵-向量乘积 #includestdio.h #includestdlib.h #includemkl.h int main() {float *A, *B, *C;//A是矩阵B是向量int m2,n 5;//B,C向量维度int a 1;//缩放因子A (float *)mkl_malloc(m*n*sizeof(float), 64);B (float *)mkl_malloc(m*sizeof(float), 64);C (float *)mkl_malloc(n*sizeof(float), 64);//赋值,按行存储?printf(数组为\n);for (int i 0; i m*n; i){if (i%n 0 i ! 0)printf(\n);A[i] 1;printf(%2.0f, A[i]);}printf(\n);printf(向量1为\n);for (int i 0; i m; i){B[i] i 1;printf(%2.0f, B[i]);}printf(\n);printf(向量2为\n);for (int i 0; i n; i){C[i] i2;printf(%2.0f, C[i]);}printf(\n);//5*1向量乘以1*5向量加上5*5矩阵cblas_sger(CblasRowMajor, m, n, a, B, 1, C, 1, A, n);printf(向量-向量相乘矩阵的结果\n);for (int i 0; i m*n; i){if (i%n 0 i ! 0)printf(\n);printf(%2.0f , A[i]);}mkl_free(A);mkl_free(B);mkl_free(C);getchar();return 0; } 结果 数组为1 1 1 1 11 1 1 1 1 向量1为1 2 向量2为2 3 4 5 6 向量-向量相乘矩阵的结果3 4 5 6 75 7 9 11 13 矩阵-矩阵 乘法1 运算 C:α∗op(A)∗op(B)β∗C,C := \alpha*op(A)*op(B) + \beta*C,代码#includestdio.h #includestdlib.h #includemkl.h int main() {float *A, *B, *C;int m 2, n 3, k 2;//A维度2*3,B维度2*3(计算时候转置),C维度2*2int a 1, b 1;//缩放因子A (float *)mkl_malloc(m*n*sizeof(float), 64);B (float *)mkl_malloc(n*k*sizeof(float), 64);C (float *)mkl_malloc(m*k*sizeof(float), 64);printf(矩阵1为\n);for (int i 0; i m*n; i){if (i ! 0 i%n 0)printf(\n);A[i] i 1;printf(%2.0f, A[i]);}printf(\n);printf(矩阵2为\n);for (int i 0; i n*k; i){if (i ! 0 i%k 0)printf(\n);B[i] 1;printf(%2.0f, B[i]);}printf(\n);printf(矩阵3为\n);for (int i 0; i m*k; i){if (i ! 0 i%k 0)printf(\n);C[i] i;printf(%2.0f, C[i]);}printf(\n);printf(结果矩阵\n);cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, k, n, a, A, n, B, k, b, C, k);//注意mkn的顺序☆for (int i 0; i m*k; i){if (i ! 0 i%k 0)printf(\n);printf(%2.0f, C[i]);}printf(\n);mkl_free(A);mkl_free(B);mkl_free(C);getchar();return 0; } 结果 矩阵1为1 2 34 5 6 矩阵2为1 11 11 1 矩阵3为0 12 3 结果矩阵6 7 1718 乘法2 依旧是上述的功能此处尝试一下 #includestdio.h #includestdlib.h #includemkl.h int main() {float *A, *B, *C;int m 2, n 3, k 2;//A维度2*3,B维度2*3(计算时候转置),C维度2*2int a 1, b 1;//缩放因子A (float *)mkl_malloc(m*n*sizeof(float), 64);B (float *)mkl_malloc(k*n*sizeof(float), 64);C (float *)mkl_malloc(m*k*sizeof(float), 64);printf(矩阵1为\n);for (int i 0; i m*n; i){if (i ! 0 i%n 0)printf(\n);A[i] i 1;printf(%2.0f, A[i]);}printf(\n);printf(矩阵2为\n);for (int i 0; i k*n; i){if (i ! 0 i%n 0)printf(\n);B[i] 1;printf(%2.0f, B[i]);}printf(\n);printf(矩阵3为\n);for (int i 0; i m*k; i){if (i ! 0 i%k 0)printf(\n);C[i] i;printf(%2.0f, C[i]);}printf(\n);printf(结果矩阵\n);cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasTrans, m, k, n, a, A, n, B, n, b, C, k);//注意mkn的顺序☆for (int i 0; i m*k; i){if (i ! 0 i%k 0)printf(\n);printf(%2.0f, C[i]);}printf(\n);mkl_free(A);mkl_free(B);mkl_free(C);getchar();return 0;} 结果 矩阵1为1 2 34 5 6 矩阵2为1 1 11 1 1 矩阵3为0 12 3 结果矩阵6 7 1718 注意点 最主要的是记住参数顺序首先是矩阵op(A)op(A)和的C行数opop代表操作乘法2中的opop就是转置然后是矩阵op(B)op(B)和CC的列数;随后才是op(A)op(A)的列数和op(B)op(B)的行数。对于乘法2中的第二个矩阵也就是Bscript typemath/tex idMathJax-Element-399B/script矩阵虽然转置了但是还是以不转置时候以行存储方式的引导维度也就是列数为输入参数。 而且丢入函数的参数并不一定是mkl_malloc开辟的空间也可以是其它数组用指针指向数组地址然后丢到函数就行了。 奉上codevs2013: MKL -C基本操作
http://www.zqtcl.cn/news/119874/

相关文章:

  • 扬州市住房和城乡建设网站html5 后台网站模板
  • 网站建设与设计意义宜兴做宠物的网站
  • 苏州建设工程人才招聘网信息网站wordpress前端库加速
  • 浙江手机版建站系统信息应用商店下载app
  • 广告投放网站动画设计模板
  • 网站发外链的好处页面跳转 英文
  • 黑链 对网站的影响网页小游戏网站有哪些
  • wordpress 网站卡做百度移动网站排名
  • 金融企业网站整站源码网站需要写哪些内容
  • 重庆做网站的网络公司河北建设厅官方网站八大员考试
  • 网站域名缴费服装企业网站建设现状
  • 南阳建设网站哪家好做金融网站
  • 挖矿网站怎么做域名注册需要多少钱?
  • 哈尔滨制作网站企业各位给推荐个网站
  • 程序员做网站类的网站犯法吗wordpress源码系统下载
  • 西安注册公司在哪个网站国际知名工程咨询公司
  • 重庆市网站备案材料做网站和做新媒体运营
  • 大岭山网站建设公司网站建设需要具备的能力
  • 网站建设接外包流程网上可以报警备案吗
  • 建筑网站接单WordPress文章数据转emlog
  • 海口网络平台网站开发wordpress on lnmp
  • 手机怎么登录自己做的网站免费注册域名网站知乎
  • 万宁市住房和城乡建设局网站网页游戏制作过程的
  • 网站建设批复意见浏览有关小城镇建设的网站 记录
  • 做国际贸易做什么网站遵义做网站优化
  • 电商平台正在建设中网站页面提示开发手机网站用什么好
  • 电商设计素材网站推荐百度云app下载安装
  • 网站怎样和首页做链接地址百度怎么打广告在首页
  • 眉县做网站网站开发技术可行性分析
  • 深圳求职网站哪个好网站上面的在线咨询是怎么做的