我有以下问题:我想写一个函数,计算平衡点,绘制两个线性方程组。到目前为止,我编写的函数使用了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使用so ()函数,这样我就不用使用while循环了?求解函数应该计算x(所有其他变量都作为参数传递给函数)。我试着解决,但没能弄清楚。谢谢你的帮助!
发布于 2015-11-02 22:02:48
问题是,当你索引x时,它可能并不能精确地解出方程。Kf + kv*x = p*x的一个替代方法是将x显式地解决为x = Kf/(p - kv)。这样可以避免迭代,而且应该更快。
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)https://stackoverflow.com/questions/33487455
复制相似问题