首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >余因子矩阵

余因子矩阵
EN

Code Golf用户
提问于 2015-12-16 13:14:29
回答 2查看 1.4K关注 0票数 19

辅助因子矩阵是调整矩阵的转置矩阵。这个矩阵的元素是原始矩阵的协因子

辅助因子

(即在第I行和第j列处的辅助因子矩阵的元素)是从原始矩阵中删除ith行和jth列所形成的子矩阵的行列式,乘以(-1)^(i+j)。

例如,对于矩阵

第1行和第2栏中的辅助因素矩阵的元素是:

您可以找到关于矩阵的行列式是什么以及如何计算它们这里的信息。

挑战

您的目标是输出输入矩阵的辅助因子矩阵。

注:内置的评估辅助因素矩阵,或调整矩阵,或决定因素或任何类似的东西是被允许的。

输入

矩阵可以作为命令行参数或函数参数输入到STDIN中,或者以最适合您使用的语言的任何方式输入。

矩阵将被格式化为列表列表,每个子列表对应于一行,其中包含从左到右排序的因素。行在列表中从上到下排序。

例如,矩阵

代码语言:javascript
运行
复制
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]]

输出:

代码语言:javascript
运行
复制
[[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]]

评分

这是密码-高尔夫,所以以字节为单位的最短答案获胜。

EN

回答 2

Code Golf用户

回答已采纳

发布于 2015-12-21 03:53:58

J,29字节

代码语言:javascript
运行
复制
3 :'<.0.5+|:(-/ .**%.)1e_9+y'

相同的epsilon/反向/行列式。从右到左:

  • 1e_9+添加了一个epsilon,
  • (-/ .**%.)是行列式(-/ .*)乘以逆(%.),
  • |:转座子
  • <.0.5+子弹。
票数 1
EN

Code Golf用户

发布于 2015-12-18 07:34:32

空隙,246号拜特斯

通过三重嵌套的for-循环可以看出这是很好的编码。

很简单。GAP实际上没有其他面向数学的语言那样处理矩阵的工具。这里唯一真正使用的是内置行列式运算符。

代码语言:javascript
运行
复制
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;

未打高尔夫球的:

代码语言:javascript
运行
复制
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;
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/66781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档