辅助因子矩阵是调整矩阵的转置矩阵。这个矩阵的元素是原始矩阵的协因子。
辅助因子
(即在第I行和第j列处的辅助因子矩阵的元素)是从原始矩阵中删除ith行和jth列所形成的子矩阵的行列式,乘以(-1)^(i+j)。
例如,对于矩阵
第1行和第2栏中的辅助因素矩阵的元素是:
您可以找到关于矩阵的行列式是什么以及如何计算它们这里的信息。
您的目标是输出输入矩阵的辅助因子矩阵。
注:内置的评估辅助因素矩阵,或调整矩阵,或决定因素或任何类似的东西是被允许的。
矩阵可以作为命令行参数或函数参数输入到STDIN
中,或者以最适合您使用的语言的任何方式输入。
矩阵将被格式化为列表列表,每个子列表对应于一行,其中包含从左到右排序的因素。行在列表中从上到下排序。
例如,矩阵
a b
c d
将由[[a,b],[c,d]]
表示。
如果方括号和逗号适合您的语言,并且是合理的(例如,((a;b);(c;d))
),则可以将其替换为其他内容。
矩阵将只包含整数(可以是负数)。
矩阵总是正方形的(即相同的行数和列数)。
您可以假设输入总是正确的(即没有格式化问题,除了整数,没有空矩阵)。
生成的辅助因子矩阵可以输出到STDOUT
,从函数返回,写入文件,或者类似于您使用的语言。
辅助因子矩阵的格式必须与给定输入矩阵的方式完全相同,例如[[d,-c],[-b,a]]
。如果读取字符串,则必须返回/输出矩阵格式与输入中完全相同的字符串。如果您使用类似的列表作为输入,那么您也必须返回列表列表。
[[1]]
输出:[[1]]
[[1,2],[3,4]]
输出:[[4,-3],[-2,1]]
[[-3,2,-5],[-1,0,-2],[3,-4,1]]
输出:[[-8,-5,4],[18,12,-6],[-4,-1,2]]
[[3,-2,7,5,0],[1,-1,42,12,-10],[7,7,7,7,7],[1,2,3,4,5],[-3,14,-1,5,-9]]
输出:
[[9044,-13580,-9709,23982,-9737],[-1981,1330,3689,-3444,406],[14727,7113,2715,-9792,414],[-28448,-2674,-707,16989,14840],[-2149,2569,-2380,5649,-3689]]
这是密码-高尔夫,所以以字节为单位的最短答案获胜。
发布于 2015-12-21 03:53:58
3 :'<.0.5+|:(-/ .**%.)1e_9+y'
相同的epsilon/反向/行列式。从右到左:
1e_9+
添加了一个epsilon,(-/ .**%.)
是行列式(-/ .*
)乘以逆(%.
),|:
转座子<.0.5+
子弹。发布于 2015-12-18 07:34:32
通过三重嵌套的for-循环可以看出这是很好的编码。
很简单。GAP实际上没有其他面向数学的语言那样处理矩阵的工具。这里唯一真正使用的是内置行列式运算符。
f:=function(M)local A,B,i,j,v;A:=StructuralCopy(M);if not Size(M)=1 then for i in [1..Size(M)] do for j in [1..Size(M)] do B:=StructuralCopy(M);for v in B do Remove(v,j);od;Remove(B,i);A[i][j]:= (-1)^(i+j)*DeterminantMat(B);od;od;fi;Print(A);end;
未打高尔夫球的:
f:=function(M)
local A,B,i,j,v;
A:=StructuralCopy(M);
if not Size(M)=1 then
for i in [1..Size(M)] do
for j in [1..Size(M)] do
B:=StructuralCopy(M);
for v in B do
Remove(v,j);
od;
Remove(B,i);
A[i][j]:= (-1)^(i+j)*DeterminantMat(B);
od;
od;
fi;
Print(A);
end;
https://codegolf.stackexchange.com/questions/66781
复制相似问题