当我已经知道所有系数时,如何求解 R 中的线性方程?
How can I solve a linear equation in R when I already know all the coefficients?
这可能是个愚蠢的问题,但我不知道该怎么做。
我有一个已知系数的方程,我想求解变量。
所以基本上,它会像:
3050 + .05(B-250) = 1088 + .1(B-500)
我知道如何手动解决这个问题并且已经解决了 B = 40150,但我想要的是一种在 R (tidyverse) 中解决 B 的方法,因为我需要在 30 倍左右做这个,稍微改变一下数字。
我如何在 tidyverse 中执行此操作?以前我做了下面的操作,确实给了我截距,但我认为这些是错误的,因为它是对系数的估计,而在我的情况下,我知道系数,我只是不知道如何将它们放入 R将解决。
感谢您的推荐!
我之前做的我认为是错误的:
lmIntx <- function(fit1, fit2, rnd=2) {
b1<- fit1$coefficient[1] #y-int for fit1
m1<- fit1$coefficient[2] #slope for fit1
b2<- fit2$coefficient[1] #y-int for fit2
m2<- fit2$coefficient[2] #slope for fit2
if(m1==m2 & b1==b2) {print("Lines are identical")
} else if(m1==m2 & b1 != b2) {print("Lines are parallel")
} else {
x <- (b2-b1)/(m1-m2) #solved general equation for x
y <- m1*x + b1 #plug in the result
data.frame(x=round(x, rnd), y=round(y, rnd))
}
}
line1 <- data.frame(x=allplan_t1$bill, y=allplan_t1$ppt)
line2 <- data.frame(x=allplan_t1$bill, y=allplan_t1$spt)
line3 <- data.frame(x=allplan_t1$bill, y=allplan_t1$vpt)
lmIntx(lm(line1$y~line1$x), lm(line2$y~line2$x))
# intersection of lines 1 and 2
lmIntx(lm(line2$y~line2$x), lm(line3$y~line3$x))
# intersection of lines 2 and 3
lmIntx(lm(line1$y~line1$x), lm(line3$y~line3$x))
# intersection of lines 1 and 3
最简单的方法是做代数:
a1 + a2 * (B - a3) = a4 + a5 * (B - a6)
意思是
a1 <- c(3050, ...)
a2 <- c(0.05, ...)
etc.
B <- (a4 - a1 + a2 * a3 - a4 * a6) / (a2 - a5)
将在没有循环的情况下一次解决所有问题。
这可能是个愚蠢的问题,但我不知道该怎么做。
我有一个已知系数的方程,我想求解变量。
所以基本上,它会像: 3050 + .05(B-250) = 1088 + .1(B-500)
我知道如何手动解决这个问题并且已经解决了 B = 40150,但我想要的是一种在 R (tidyverse) 中解决 B 的方法,因为我需要在 30 倍左右做这个,稍微改变一下数字。
我如何在 tidyverse 中执行此操作?以前我做了下面的操作,确实给了我截距,但我认为这些是错误的,因为它是对系数的估计,而在我的情况下,我知道系数,我只是不知道如何将它们放入 R将解决。
感谢您的推荐!
我之前做的我认为是错误的:
lmIntx <- function(fit1, fit2, rnd=2) {
b1<- fit1$coefficient[1] #y-int for fit1
m1<- fit1$coefficient[2] #slope for fit1
b2<- fit2$coefficient[1] #y-int for fit2
m2<- fit2$coefficient[2] #slope for fit2
if(m1==m2 & b1==b2) {print("Lines are identical")
} else if(m1==m2 & b1 != b2) {print("Lines are parallel")
} else {
x <- (b2-b1)/(m1-m2) #solved general equation for x
y <- m1*x + b1 #plug in the result
data.frame(x=round(x, rnd), y=round(y, rnd))
}
}
line1 <- data.frame(x=allplan_t1$bill, y=allplan_t1$ppt)
line2 <- data.frame(x=allplan_t1$bill, y=allplan_t1$spt)
line3 <- data.frame(x=allplan_t1$bill, y=allplan_t1$vpt)
lmIntx(lm(line1$y~line1$x), lm(line2$y~line2$x))
# intersection of lines 1 and 2
lmIntx(lm(line2$y~line2$x), lm(line3$y~line3$x))
# intersection of lines 2 and 3
lmIntx(lm(line1$y~line1$x), lm(line3$y~line3$x))
# intersection of lines 1 and 3
最简单的方法是做代数:
a1 + a2 * (B - a3) = a4 + a5 * (B - a6)
意思是
a1 <- c(3050, ...)
a2 <- c(0.05, ...)
etc.
B <- (a4 - a1 + a2 * a3 - a4 * a6) / (a2 - a5)
将在没有循环的情况下一次解决所有问题。