【发布时间】:2021-12-01 21:02:42
【问题描述】:
我想编写一个函数来计算方阵的行列式是 2x2 或 3x3 在一个函数中,这样如果它的用户只提供 4 个元素,它将把它变成 2x2,如果它的用户提供 9 个元素,它将使用 3x3 函数。以下是我对 2x2 和 3x3 的功能:
matrix(1:4, ncol=2)
# [,1] [,2]
#[1,] 1 3
#[2,] 2 4
A_22 <- function(x11, x12, x21, x22) {
(x11 * x22) - (x12 * x21)
}
A_22(x11 = 1, x12 = 2, x21 =3, x22 = 4)
#[1] -2
cbind(1,1:3,c(2,0,1))
# [,1] [,2] [,3]
#[1,] 1 1 2
#[2,] 1 2 0
#[3,] 1 3 1
A_33 <- function(x11, x12, x13, x21, x22, x23, x31, x32, x33) {
(x11 * x22 * x33) + (x12 * x23 * x31) + (x13 * x21 * x33) - (x31 * x22 * x13) - (x32 * x23 * x11) - (x33 * x21 * x12)
}
A_33(x11 = 1, x12 = 1, x13 = 2, x21 = 1, x22 = 2, x23 = 0, x31 = 1, x32 = 3, x33 = 1)
#[1] -1
我看过这个solution,但它只适用于用不同的方法解决一个问题,而不喜欢这个处理不同情况的问题。
将A_22 和A_33 的两种不同情况组合到父函数的优雅方式是什么?
【问题讨论】:
-
stat.ethz.ch/R-manual/R-devel/library/base/html/det.html — 请注意,这会产生与您的
A_33函数不同的结果。 -
@KonradRudolph 感谢您的建议,但我正在努力学习而不是寻找现成的解决方案。我使用行列式创建问题,只是作为案例研究来学习并能够将该方法应用于其他情况。
-
在这种情况下,您需要转向行列式的定义,并根据对通用算法的理解创建通用函数。 ——你不能只是将两个任意函数合并为一个:它们之间没有明显的关系。不幸的是,编写一个通用的矩阵行列式函数并不是那么简单。你可以应用 Sarrus 的规则,但这需要你找到所有矩阵对角线,据我所知,R 没有内置的方法(推导它们并不难,但它 是 i> 繁琐)。
-
diagonals 结合
lengths,使用@20650 方法和split得到正向和反向对角线。尝试申请Gbemi扩展nxn,n=5,断断续续。 -
@DanielJames 请检查我的解决方案是否符合您的需求...我使用递归来解决问题并计算行列式。弄清楚如何去做很有趣......