1) Dies ist nicht genau das, was Sie fordern, aber vielleicht hilft es sowieso:
library(Ryacas)
x <- Sym("x")
y <- Sym("y")
Simplify(Solve(List(x - y == 0, x + 2*y == 3), List(x, y)))
geben:
expression(list(list(x - y == 0, y - 1 == 0)))
2) Wenn wir diese wissen linear sind Gleichungen genau der Form in der Frage gezeigt dann versuchen Sie dies. Die beiden Aufrufe strapply
führen Übereinstimmungen des regulären Ausdrucks mit den Komponenten von args
aus, erfassen die Strings, die von den Teilen der regulären Ausdrücke übereinstimmen, in Klammern und rufen die als drittes Argument angegebene Funktion mit diesen erfassten Strings als Argumente auf. Wir kombinieren die strapply
Ausgänge unter Verwendung rbind.fill
und ersetzen alle NAs, die es mit Null generiert.
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")
geben:
$lhs
x y
[1,] 1 -1
[2,] 0 2
$rhs
[1] 0 3
Update: generali so dass jetzt nicht alle Variablen in jeder Gleichung sein müssen und auch können Variablen in verschiedenen Ordnungen in unterschiedlichen Gleichungen.
Wofür würden Sie das verwenden? Es ist weniger Tipparbeit, um die Matrix direkt einzugeben. – Roland