初始化
将实数数组都填成0或者某个值,其中n是元素个数。
void dSetZero (dReal *a, int n);
void dSetValue (dReal *a, int n, dReal value);
向量点积
返回两个n维向量的点积,如果n<=0返回0
dReal dDot (const dReal *a, const dReal *b, int n);
矩阵乘法
rows\columns | 1 | 2 | n |
---|---|---|---|
1 | 1,1 | 1,2 | 1,n |
2 | 2,1 | 2,2 | 2,n |
m | m,1 | m,2 | m,n |
上面描述一个m*n矩阵,ODE内部一个矩阵是一整块线性内存。第一行在开始,然后一段用来对齐。
以4的倍数对齐边界(dPAD(n)),然后是第二行,一直到第m行。这种存储叫做row format。
column format指的是存储方式不同,比如同样上面的m*n矩阵,第一行变成第一列。第二行变成第二列。
其他对齐保存不变,这时候是(dPAD(m))。
- dMultiply0 A = B * C (A:p*r B:p*q C:q*r)
- dMultiply1 A = B’ * C (A:p*r B:p*q C:q*r)
- dMultiply2 A = B * C’ (A:p*r B:p*q C:q*r)
上诉运算中加’的标示一个存储格式是column format的矩阵。
B’就是B的转置矩阵,这样增加两个函数可以减少转置矩阵的操作。这样效率略微提高点。
void dMultiply0 (dReal *A, const dReal *B, const dReal *C, int p,int q,int r);
void dMultiply1 (dReal *A, const dReal *B, const dReal *C, int p,