我有以下问题:我想写一个函数来计算盈亏平衡点,并绘制两个线性方程。到目前为止,我编写的函数使用while循环,能够计算偶数的盈亏平衡点。以下是功能:
bep <- function(Kf,kv,p){
x <- 1
K <- Kf + kv * x
U <- p * x
while(K != U){
x <- x + 1
K <- Kf + kv * x
U <- p * x
print(x)
}
bep <- x
print(bep)
print(p*bep)
x <- seq(0, 100, by=10)
K <- Kf + kv * x
U <- p * x
plot(x, K, type="l", col="red", ylim=c(0,20000))
lines(x, U, col="green")
points(bep, Kf+kv*bep)
segments(x0 = 0, y0 = p * bep, x1 = bep, y1= p * bep, lty = "dotted")
segments(x0 = bep, y0 = 0, x1 = bep, y1 = p * bep, lty = "dotted")
}
论点是Kf表示我的固定成本,kv表示可变成本,p表示价格。当我用测试功能时
bep(15000,50,300)
一切都正常进行,我得到了一个不错的情节。当我将while循环中的函数更改为时
x <- x + 0.01
函数运行时不结束。我在循环中检查了print(x)参数,它刚好超过了60的盈亏平衡点…循环将永远持续下去。有没有一种方法可以像一样求解这两个线性方程
Kf + kv * x = U * x
使用solve()函数这样我就不必使用while循环了?求解函数应该计算x(所有其他变量都作为参数传递给函数)。我试着解决,但没能解决。谢谢你的帮助!
问题是,当您对x
进行索引时,它可能无法精确求解方程。CCD_ 2的替代方案是将CCD_ 3显式求解为CCD_ 4。这样可以避免迭代,而且应该更快。
bep <- function(Kf,kv,p){
x <- Kf/(p-kv)
bep <- x
print(bep)
print(p*bep)
x <- seq(0, 100, by=10)
K <- Kf + kv * x
U <- p * x
plot(x, K, type="l", col="red", ylim=c(0,20000))
lines(x, U, col="green")
points(bep, Kf+kv*bep)
segments(x0 = 0, y0 = p * bep, x1 = bep, y1= p * bep, lty = "dotted")
segments(x0 = bep, y0 = 0, x1 = bep, y1 = p * bep, lty = "dotted")
}
bep(15000,50,300)