# MFADD 向量元素相加
向量元素相加。
mfAdd(a,b,r,n)
参数
参数 | 说明 |
---|---|
a | 必需,向量 |
b | 必需,向量 |
r | 必需,向量(输出值) |
n | 必需,向量; a,b,r个数(n取值范围:0<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
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# MFAMAX 绝对值最大的元素的索引
查找绝对值最大的元素的索引。
mfamax(x,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
x | 必需,向量 |
n | 必需,向量x个数 (n取值范围:0<n<=x的数组长度). |
返回值:基于1索引的向量元素位置
示例
VARIABLE:x[5]=(0,1,2,3,4);
Rets:MFAMAX(x,5); //结果将返回5
1
2
2
# MFAMIN 绝对值最小的元素的索引
查找绝对值最小的元素的索引。
MFAMIN(x,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
x | 必需,向量 |
n | 必需,向量x个数 (n取值范围:0<n<=x的数组长度). |
返回值:基于1索引的向量元素位置
示例
VARIABLE:x[5]=(0,1,2,3,4);
Rets:MFAMIN(x,5); //结果将返回0
1
2
2
# MFDIV 向量元素相除
向量元素相除。
MFDIV(a,b,r,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
a | 必需,向量 |
b | 必需,向量 |
r | 必需,向量(输出值) |
n | 必需,向量; a,b,r个数(n取值范围:0<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
MFDIV(a,b,r,5);
for i = 1 to 5 do
msgout(1,numtostr(r[i],0)); //结果将返回1,1,1,1,1
End
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# MFDOT 向量元素点乘
计算两个向量元素的点积。算法:xy=x1y1+...+xn*yn。
MFDOT(x,y,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
x | 必需,向量 |
y | 必需,向量 |
n | 必需,向量; x,y数量(n取值范围:0<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
1
2
3
2
3
# MFFFT 快速傅立叶变换
矩阵与矩阵乘积。算法:C=alpha*op(A)op(B) + betaC,
MFFFT(X,Y,N,T)
参数
参数 | 说明 |
---|---|
X | 必需,输入源向量数组 |
Y | 必需,输出向量数组,以复数方式返回(由2个数字组成),因此数组申明大小必须为X的2倍 |
N | 必需,X向量变换源数组大小 |
T | 必需,0向前变换 1向后变换. |
示例
n:=16; //16点信号变换
VARIABLE : x[n]=(15, 32, 9, 222, 118, 151, 5, 7, 56, 233, 56, 121, 235, 89, 98, 111);
VARIABLE : y[n*2]=0; //以复数方式返回结果,因此需要2倍容量
If IsLastbar Then
Begin
MFFFT(x,y,n,0);
for i = 1 to n*2 do
msgout(1,numtostr(y[i],3));
End
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# MFGEMM 矩阵与矩阵乘积
矩阵与矩阵乘积。算法:C=alpha*op(A)op(B) + betaC,
MFGEMM(A,B,C,alpha,beta,m,n,k)
参数
参数 | 说明 |
---|---|
A | 必需,矩阵 |
B | 必需,矩阵 |
C | 必需,矩阵(输入和输出参数) |
alpha | 必需,标量 |
beta | 必需,标量 |
m | 必需,矩阵A和矩阵C的行数, |
n | 必需,矩阵B和矩阵C的列数 |
k | 必需,矩阵A的列数和矩阵B的行数, |
返回值:最终更新到矩阵C.
示例
m:=2;//矩阵A和矩阵C的行数
n:=3;//矩阵B和矩阵C的列数
k:=2;//矩阵A的列数和矩阵B的行数
alpha:=1;
betas:=1;
VARIABLE : a[m*n]=(1,2,3, 4,5,6); //矩阵维度 2*3
VARIABLE : b[n*k]=(1,1, 1,1, 1,1); //矩阵维度 3*2(计算时候转置)
VARIABLE : x[m*k]=(0,1, 2,3); //矩阵维度 2*2
If IsLastbar Then
Begin
MFGEMM(a,b,x,alpha,betas,m,n,k);
for i = 1 to m*k do
msgout(1,numtostr(x[i],0));
End
//结果将输出矩阵为
//6 7
//1718
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# MFGEMV 矩阵与向量的乘积
矩阵与向量的乘积。
mfgemv(A,X,Y,T,M,N,alpha,beta)
参数
参数 | 说明 |
---|---|
A | 必需,m*n的矩阵 |
X | 必需,向量 |
Y | 必需,向量(输入和输出参数) |
T | 必需,计算方式。 T=0时 Y:= alphaAX + betaY, T=1时 Y:= alphaA'X + betaY, T=2时 Y := alpha*conjg(A')X + betaY, |
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的向量相乘
FGEMV(a,x,y,0,m,n,alpha,mbeta);
for i = 1 to m do
msgout(1,numtostr(y[i],0)); //结果将输出40, 115
End
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# MFGER 矩阵的一阶更新
矩阵的一阶更新(矩阵-向量乘积)算法:A=alphaxy'+ A,
MFGER(X,Y,A,M,N,alpha)
参数
参数 | 说明 |
---|---|
X | 必需,向量(m行) |
Y | 必需,向量(n列) |
A | 必需,m×n 的矩阵(输入和输出参数) |
M | 必需,矩阵A的行数 |
N | 必需,矩阵A的列数 |
alpha | 必需,标量 |
返回值:最终更新到矩阵a.
示例
m:=2;//矩阵行数
n:=5;//矩阵列数
alpha:=1;
VARIABLE : x[m]=(1,2);
VARIABLE : y[n]=(2,3,4,5,6);
VARIABLE : a[m*n]=( 1,1,1,1,1, 1,1,1,1,1 ); //定义一个2行5列矩阵
If IsLastbar Then
Begin
//5*1向量乘以1*5向量,加上5*5矩阵
MFGER(x,y,a,m,n,alpha);
for i = 1 to m*n do
msgout(1,numtostr(a[i],0));
End
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
结果将输出矩阵为:
3 4 5 6 7
5 7 9 11 13
# MFMUL 向量元素相乘
向量元素相乘。
MFMUL(a,b,r,n);
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
a | 必需,向量 |
b | 必需,向量 |
r | 必需,向量(输出值) |
n | 必需,向量; a,b,r个数(n取值范围:0<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
MFMUL(a,b,r,5);
for i = 1 to 5 do
msgout(1,numtostr(r[i],0)); //结果将返回1,2,9,16,25
End
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# MFNRM2 欧几里得范数
计算一个向量的欧几里得范数。算法:|x| = √( x[1]2 + x[2]2 + … + x[n]2 )。
MFMUL(a,b,r,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
x | 必需,向量 |
n | 必需,向量x个数;(n取值范围:0<n<=x的数组长度). |
示例
VARIABLE : x[5]=(1,2,3,4,5);
RETS:MFNRM2(x,5); //结果将输出 7.416
1
2
2
# MFSCAL 计算向量和标量的乘积
计算向量和标量的乘积。算法:x=a*x。
mfscal(x,a,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
x | 必需, 向量(输入/输出参数) |
n | 必需,标量a, n:向量x个数(n取值范围:0<n<=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
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# MFSUB 向量元素相减
向量元素相减。
mfSub(a,b,r,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
a | 必需,向量 |
b | 必需,向量 |
r | 必需,向量(输出值) |
n | 必需,向量; a,b,r个数(n取值范围:0<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
mfSub(a,b,r,5);
for i = 1 to 5 do
msgout(1,numtostr(r[i],0)); //结果将返回0,0,0,0,0
End
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# MFSUM 向量元素之和
计算向量x的元素大小之和
MFSUM(X,N)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
x | 必需, X为向量(n*1)(矩阵也可以看做向量) |
n | 必需,N为向量数组数量,(N取值范围:0<N<=数组数量)。 |
示例
VARIABLE:x[]=0;
x:=c;
rets:Mfsum(x,5);
1
2
3
2
3
# MFSWAP 交换向量值
交换向量值, 完成向量x和y的交换。
mfswap(x,y,n)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
X | 必需,向量 |
Y | 必需,向量 |
N | 必需,向量; x,y数量(n取值范围:0<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
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# MFXPY 迭代求取向量标量乘积之和
计算向量-标量的积,并将结果迭代累加。算法如下: y:=alpha*x+y。
MFXPY(X,Y,alpha,N)
- 向量运算为兼容pel架构,其向量计算均从右向左运算。
参数
参数 | 说明 |
---|---|
X | 必需,向量 |
Y | 必需,向量(输出参数,即存储结果) |
alpha | 必需,标量 |
N | 必需,指定向量x,y的元素个数(n取值范围:0<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
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9