我特别想知道如何在不使用for循环的情况下创建它。另外,如何做一般的N维Levi-Civita matrix?如何在MATLAB中轻松构建Levi-Civita 3x3x3矩阵?
4
A
回答
0
好吧,我很无聊,所以我采取了扭曲的路线。它并没有回答这个问题,因为这不是“容易”,但我分享这个,因为我很开心。
从wikipedia定义,你可以建立一个功能,让你从指数的CEVI-Levita符号的值:
LC_value = @(v) round(prod(prod(triu(repmat(v,[numel(v) 1])-repmat(v',[1 numel(v)]),1) ...
./repmat(factorial([1:numel(v)]'),[1 numel(v)])+tril(ones(numel(v))))));
这实现了一般的n维嵌套的产品定义。小心,因子函数可能会导致高维度的问题。 round
函数在那里,因为你正在做浮点运算来生成整数。
下一步是将此函数应用于所有可能的索引组合。尽管如此,仅将其应用于[1 2 3]
的排列更快。
sites = perms([1 2 3]);
values = arrayfun(@(i)LC_value(sites(i,:)),(1:size(sites,1))');
lcMat = zeros(3,3,3);
lcMat(sub2ind(size(lcMat),sites(:,1),sites(:,2),sites(:,3))) = values;
就是这样。它在三个维度上工作,它应该适用于更高维度,尽管我没有测试过它。
1
我在文件交换中发现至少两个函数 - #1和#2。你检查过他们吗?两者都使用循环。
对于3D矩阵,您可以直接输入并避免循环。
这将是很好,包括对该问题的主题的某种解释。这里是一个链接到Wiki页面:http://en.wikipedia.org/wiki/Levi-Civita_symbol
3
这里有一个非循环解决方案,专为3×3×3 Levi-Civita matrix使用linear indexing:
lcMat = zeros(3,3,3);
lcMat([8 12 22]) = 1;
lcMat([6 16 20]) = -1;
编辑:
这里是一个N-dimensional Levi-Civita matrix更普遍和简洁的非循环方案:
[mats{1:N}] = ndgrid(1:N);
pairsIndex = nchoosek(1:N,2);
lcMat = sign(prod(cat(N+1,mats{pairsIndex(:,2)})-...
cat(N+1,mats{pairsIndex(:,1)}),N+1));
当然有一个权衡。尽管它不使用循环,但可能会创建大量的临时变量。更大的N
是,这种内存成本将越高禁止。
相关问题
- 1. 如何从差异向量中轻松创建差异矩阵?
- 2. 如何轻松创建xml架构
- 3. 从Matlab中的矩阵构建地图
- 4. 如何在MATLAB中构建这些渐变和发散矩阵?
- 5. 如何轻松和优雅地做PHP矩阵操作?
- 6. 如何在Matlab矩阵
- 7. MATLAB - 用子矩阵创建矩阵
- 8. MatLab的矩阵结构
- 9. 矩阵矩阵在Matlab中的数组?
- 10. 在MATLAB矩阵
- 11. 在MATLAB中创建符号矩阵R2009b
- 12. 如何在MATLAB中采样矩阵?
- 13. 如何在MATLAB中将灰度矩阵转换为RGB矩阵?
- 14. 如何矢量化在MATLAB中指数为矩阵的矩阵?
- 15. 如何在matlab中轻松应用二次增强
- 16. 在Matlab中用矢量构建加权矩阵
- 17. 使用指数矩阵在MATLAB中构建SIFT特征矢量
- 18. 块矩阵建筑matlab
- 19. 如何在numpy中创建3维矩阵,如matlab a(:,:,:)
- 20. 在matlab中递增矩阵
- 21. 在MATLAB中转换矩阵
- 22. Zeropad在matlab中的矩阵
- 23. 在matlab中更改矩阵
- 24. 在matlab中拼贴矩阵
- 25. 在Matlab中绘制矩阵
- 26. 在Matlab中访问矩阵
- 27. cellarray在矩阵matlab
- 28. 如何在MATLAB中创建一个相似矩阵?
- 29. 如何在MATLAB中创建Mahalanobis距离矩阵?
- 30. 如何在MATLAB中创建三对角矩阵?
我不认为这是他所希望的答案,但它符合要求。 – Adrien 2010-12-07 23:33:44
@Adrien:找出一个潜在的通用解决方案需要我多一点时间,所以我首先回答了问题中较简单的部分。 ;) – gnovice 2010-12-08 04:10:28