我有以下问题: 我想编写一个计算收支平衡点的函数,并绘制两个线性方程。 到目前为止我写的函数使用while循环,并且能够计算偶数量的收支平衡点。这是功能:
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.canDisplayBannerAds = true
}
我的固定成本为Kf,可变成本为kv,价格为p。 当我用
测试功能时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")
}
一切正常,我得到一个很好的情节。 当我将while循环中的函数更改为
时bep(15000,50,300)
该功能无止境地运行。我在循环中检查了一个print(x)参数,它只是超过了60的收支平衡点...... 循环继续下去。 有没有办法解决像
这样的两个线性方程x <- x + 0.01
使用solve()函数,所以我不必使用while循环? solve函数应该计算x(所有其他变量作为参数传递给函数)。 我试过解决但无法弄明白。 感谢您的帮助!
答案 0 :(得分:1)
问题在于,当您索引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)