gpt4 book ai didi

r - 将线性方程转换为 R 中矩阵形式的函数?

转载 作者:行者123 更新时间:2023-12-04 18:40:40 25 4
gpt4 key购买 nike

我想知道是否有任何包或其他预建的 R 解决方案能够将线性方程组转换为矩阵形式(例如通过 Gauss Seidel algorithm 解决方案),类似于 equationsToMatrix(eqns,vars) function in Matlab ?

来自 Matlab 的一个例子:

[A, b] = equationsToMatrix([x - y == 0, x + 2*y == 3, [x, y])

A =
[ 1, -1]
[ 1, 2]

b =
0
3

对构建块的建议也会非常有帮助。

最佳答案

1) 这不完全是您所要求的,但也许无论如何它都会有所帮助:

library(Ryacas)
x <- Sym("x")
y <- Sym("y")
Simplify(Solve(List(x - y == 0, x + 2*y == 3), List(x, y)))

给予:
expression(list(list(x - y == 0, y - 1 == 0)))

2) 如果我们知道这些是问题中所示形式的线性方程,那么试试这个。两人 strapply调用执行正则表达式与 args 的组件的匹配, 捕获与括号内正则表达式部分匹配的字符串,并使用捕获的字符串作为参数调用指定为第三个参数的函数。我们结合了 strapply使用 rbind.fill 的输出并将其生成的任何 NA 替换为零。
library(gsubfn) # strapply
library(plyr) # rbind.fill

eqn <- function(...) {
args <- c(...)
x2num <- function(x, y) { # determine coefficient value as a numeric
z <- gsub(" ", "", x)
setNames(if (z == "-") -1 else if (z == "") 1 else as.numeric(z), y)
}
lhs <- strapply(args, "(-? *\\d*)[ *]*([a-z])", x2num)
lhs <- do.call(rbind.fill, lapply(lhs, function(x) as.data.frame(t(x))))
lhs <- as.matrix(lhs)
lhs[] <- ifelse(is.na(lhs), 0, lhs)
list(lhs = lhs, rhs = strapply(args, "== *(\\d)", as.numeric, simplify = TRUE))
}

# test it out
eqn("x - y == 0", "2*y == 3")

给予:
$lhs
x y
[1,] 1 -1
[2,] 0 2

$rhs
[1] 0 3

更新:概括为现在不是所有的变量都需要在每个方程中,而且变量在不同的方程中可以有不同的顺序。

关于r - 将线性方程转换为 R 中矩阵形式的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27076935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com