R: решение для переменной - PullRequest
0 голосов
/ 31 мая 2019

Интересно, есть ли какая-нибудь функция, которая может решить переменную в уравнении в терминах других значений.

Например, у меня есть:

(a-1/3)/(a+b-2/3)==0.3

Выход этой функции должен быть:

(0.3*b+0.1333333)/(0.7)

Или что-то в этом роде.

Спасибо

1 Ответ

0 голосов
/ 31 мая 2019

Вы можете использовать Yacas через пакет Ryacas:

library(Ryacas)
a <- Sym("a")
b <- Sym("b")
Solve((a-1/3)/(a+b-2/3)==0.3, a)
# Yacas vector:
# [1] a == -((-0.3 * b - 0.1333333333)/0.7)

Чтобы получить решение как выражение, выполните:

solution <- Solve((a-1/3)/(a+b-2/3)==0.3, a)
yacas(paste0("a Where ", solution))
# expression(-((-0.3 * b - 0.1333333333)/0.7))

Вы можетеОпределите функцию, возвращающую решение в функции b следующим образом:

f <- function(b) {}
body(f) <- yacas(paste0("a Where ", solution))$text
f
# function (x) 
# -((-0.3 * b - 0.1333333333)/0.7)

Также обратите внимание, что вы делаете рациональное исчисление для получения точных значений:

q1 <- Sym(1)/Sym(3)
q2 <- Sym(2)/Sym(3)
solution <- Solve((a-q1)/(a+b-q2)==0.3, a)
solution
# [1] a == -(3 * (-0.3 * b - 1.2/9)/2.1)
Simplify(solution)
# [1] a + (-0.9 * b/2.1 - 3.6/18.9) == 0
...