2015-11-02 134 views
0

我有以下問題: 我想寫一個函數來計算平衡點並畫出兩個線性方程。 迄今爲止我寫的函數使用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 

使用解決()函數,所以我沒有使用while循環的一種方式?求解函數應該計算x(所有其他變量作爲參數傳遞給函數)。 我試過解決,但無法弄清楚。 感謝您的幫助!

回答

1

問題是,當您索引x它可能不會完全解決方程式。 Kf + kv*x = p*x的替代方案是明確解決xx = 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) 
+0

謝謝!有時顯而易見的是如此接近... – Carlos

相關問題