R中的四元数乘法示例

时间:2015-11-07 10:58:23

标签: r quaternions

我的问题 multiplying numbers and symbols in R得到了回答,在这里我想举一个使用它进行四元数乘法的例子。实际上,我在一个更大的集合(一组256个元素)上使用它,但原理是相同的。我对使用data.tables非常陌生,所以我们非常感谢任何其他提示。

groupMult = data.table(
               e = c("i","j","k", "e"),
               i = c("-e","-k","j", "i"), 
               j = c("k","-e","-i", "j"), 
               k = c("-j","i","-e", "k")
               );
row.names(groupMult) = c("i", "j", "k", "e");
setkey(groupMult);

# Find X*Y with X = 2i - 3j, Y = k - 4e
X = data.table(i = 2, j = -3);
Y = data.table(k = 1, e = -4); 

# reduce groupMult to the vectors we need for multiplication
multMa = groupMult[names(X), names(Y), with = F];

# repeat values of Y ncol(X) times
multY = Y[rep(seq_len(nrow(Y)),   each=ncol(X)),];
# repeat values of X ncol(Y) times
multX = t(X[rep(seq_len(nrow(X)), each=ncol(Y)),]);

# coefficient matrix
multMaNum = multY*multX;
row.names(multMaNum) = names(X);

# elementwise multiplicaton of multMaNum with multMa
res = mapply(paste, multMaNum, multMa, MoreArgs=list(sep='*') )
res[] <- sapply(res , function(x) sub("(.*)([-])(.*)", "\\2\\1\\3", x));

# collapse all elements of the data.table to get final result 
res = paste(lapply(res, paste, collapse = " "), collapse = " + ");
> res
[1] "-2*j + -3*i + -8*i + 12*j"

0 个答案:

没有答案
相关问题