|
为了方便用户进行线性代数与矢量分析,金字塔提供了一整套封装的高度矢量优化线性代数方面函数,用户可以不借助Python也可以在PEL中进行简易矩阵及向量计算。金字塔会根据用户CPU自动启用SSE,AVX,AVX-512指令集,以及高度并行化执行,可以发挥CPU最大利用率,执行效率大大提升。
使用事项说明
1、该类函数的向量及矩阵的输入参数只能是VARIABLE申明的数组类型,使用前应注意转换。
2、函数计算需依赖科学计算组件,该组件您需要单独安装部署,使用前请先进行在线安装。
安装步骤 : PEL公式编辑器界面->插入菜单->安装扩展科学计算组件。
3、该类库函数还在不断扩充中,如果你有其他的功能函数需求,欢迎及时在本贴中提出,以便我们进行扩充安排。
1、Mfsum(X,N)
计算向量x的元素大小之和
函数实现功能: y=∑x
参数维度说明: x为向量(n*1)(矩阵也可以看做向量)
- VARIABLE:x[]=0;
- x:=c;
- rets:Mfsum(x,5);
复制代码
2、Mfxpy(x,y,alpha,n)
计算向量与标量的积,然后加到结果上
函数实现功能:y:=a*x+y
x : 向量
y : 向量(输出参数)
alpha : 标量
n : 指定向量x,y的元素个数
返回值 : 最终更新到向量y
- alpha:=1;
- VARIABLE : x[5]=(0,1,2,3,4);
- VARIABLE : y[5]=(1,2,3,4,5);
- If IsLastbar Then
- Begin
- MFXPY(x,y,ALPHA,5);
- for i = 1 to 5 do
- mSGout(1,numtostr(y[i],0));//结果将输出 1,3,5,7,9
- End
复制代码
3、Mfdot(x,y,n)
计算向量-向量的点乘
x : 向量
y : 向量
n:向量x,y数量
- VARIABLE : x[5]=(0,1,2,3,4);
- VARIABLE : y[5]=(1,2,3,4,5);
- RETS:MFDOT(x,y,5);//结果将输出40
复制代码
4、Mfnrm2(x,n)
计算一个向量的欧几里得范数(Euclidean norm)
函数实现功能:res = ||x||
x:向量
n:向量x个数
- VARIABLE : x[5]=(1,2,3,4,5);
- RETS:MFNRM2(x,5); //结果将输出 7.416
复制代码
5、Mfscal(x,a,n)
计算向量和标量的乘积
函数实现功能:x=a*x
x : 向量(输入/输出参数)
a : 标量a
n: 向量x个数
返回值:最终更新到向量x
- VARIABLE : x[5]=(1,2,3,4,5);
- a:=0.1;
- If IsLastbar Then
- Begin
- MFSCAL(x,a,5);
- for i = 1 to 5 do
- Msgout(1,numtostr(x[i],1)); //结果将输出 0.1,0.2,0.3,0.4,0.5
- End
复制代码
6、Mfswap(x,y,n)
交换向量值, 完成向量x和y的交换
x : 向量
y : 向量
n:向量x,y数量
- VARIABLE : x[5]=(0,1,2,3,4);
- VARIABLE : y[5]=(1,2,3,4,5);
- If IsLastbar Then
- Begin
- Mfswap(x,y,5);
- for i = 1 to 5 do
- msgout(1,numtostr(y[i],0)); //输出交换后的y数组
- End
复制代码
7、mfamax(x,n)
找到绝对值最大的元素的索引
x: 向量
n: 向量x个数
返回值:基于1索引的向量元素位置
- VARIABLE : x[5]=(0,1,2,3,4);
- Rets:MFAMAX(x,5); //结果将返回5
复制代码
8、Mfamin(x,n)
找到绝对值最小的元素的索引
x: 向量
n: 向量x个数
返回值:基于1索引的向量元素位置
例:见Mfamax函数
9、mfAdd(a,b,r,n)
向量元素相加
a : 向量
b : 向量
r:向量(输出值)
n: 向量a,b,r个数
- VARIABLE : a[5]=(1,2,3,4,5);
- VARIABLE : b[5]=(1,2,3,4,5);
- VARIABLE : r[5]=0;
- If IsLastbar Then
- Begin
- MFADD(a,b,r,5);
- for i = 1 to 5 do
- msgout(1,numtostr(r[i],0)); //结果将返回2,4,6,8,10
- End
复制代码
10、MfSub(a,b,r,n)
向量元素相减
a : 向量;b : 向量;r : 向量(输出值);n: 向量a,b,r个数
例:见mfAdd函数
11、MfMul(a,b,r,n)
向量元素相乘
a : 向量;b : 向量;r:向量(输出值);n: 向量a,b,r个数
例:见mfAdd函数
12、Mfgemv(a,x,y,t,m,n,alpha,beta)
矩阵与向量的乘积
函数实现功能:
t =0 y := alpha*A*x + beta*y,
t =1 y := alpha*A'*x + beta*y,
t =2 y := alpha*conjg(A')*x + beta*y,
a : m*n的矩阵
x : 向量;y : 向量(输入和输出参数)
m : 矩阵A的行数;n : 矩阵A的列数(向量x维度)
alpha : 标量;beta : 标量
返回值:最终更新到向量y
- m:=2;//矩阵行数
- n:=5;//矩阵列数
- alpha:=1;
- mbeta:=1;
- VARIABLE : a[m*n]=( 0,1,2,3,4,5,6,7,8,9 ); //定义一个2行5列矩阵
- VARIABLE : x[n]=(1,2,3,4,5); //向量数组
- VARIABLE : y[m]=0;
- If IsLastbar Then
- Begin
- //2*5的矩阵与5*1的向量相乘
- MFGEMV(a,x,y,0,m,n,alpha,mbeta);
- for i = 1 to m do
- msgout(1,numtostr(y[i],0)); //结果将输出40, 115
- End
复制代码 |
|