使用 R 求解方程組
我正在嘗試將 R 用於我的宏觀實踐和模型求解反向需求曲線 PD(q) 和供給曲線 P 的均衡價格。
我該怎麼做呢?謝謝!
注 1:回答後編輯問題是不禮貌的;我必須進行重大修改以使我的答案保持一致。
注 2:這不是方程組。定義了兩個函式,但只有一個方程: $$ P_D(q) - P_S(q) = 0 $$
這裡有幫助的是逆向需求在減少數量,而逆向供應在增加。所以給定任何 $ q $ , 如果 $ P_D(q) > P_S(q) $ 我們知道 $ q $ 低於均衡值 $ q^* $ , 而如果 $ P_D(q) < P_S(q) $ 然後 $ q > q^* $ .
您還可以縮小範圍 $ q^* $ 可以找到。顯然 $ q^* \geq 0 $ .
還 $ P_D(q) $ 不應該陷入負面領域,所以你可以找到一個非常大的 $ \bar{q} $ 為此 $ P_D(q) \leq 0 $ . 一個人可以很容易地做到這一點,從 $ \bar{q} = 1 $ , 評估 $ P_D(\bar{q}) $ , 並加倍 $ \bar{q} = 1 $ 當且當 $ P_D(\bar{q}) > 0 $ .
給定區間 $ I = [0, \bar{q}] $ 我們知道包含 $ q^* $ ,您現在可以應用間隔減半。
一種近似算法 $ q^* $ 具有所需的精度 $ \epsilon $ :
定義間隔 $ I = [0, \bar{q}] $ .
Start of LOOP
選擇區間的中點作為“猜測” $ q^* $ . (在第一次迭代中,這是 $ q = \bar{q}/2 $ .)
評估陳述 $ P_D(q) > P_S(q) $ .
如果為真,那麼
$ q^* $ 應該更小,解決方案在區間的下半部分,所以在下一次迭代中,我們將使用它作為我們的新區間 $ I $ .
如果為假,則
$ q^* $ 應該更大,解決方案在區間的上半部分,所以在下一次迭代中,我們將使用它作為我們的新區間 $ I $ .
評估語句新的區間非常小,即長度小於 $ 2\epsilon $ .
如果為 true,則
選擇它的中點並說你已經近似 $ q^* $ 以合理的精度,結束程序。
如果為 false,則
轉到 LOOP 的開始。
這建立在@Giskard 上面的回答之上。
一旦你知道可行的市場出清數量的範圍, $ q \in [ 0, \bar q ] $ ,您可以直接應用 R 的
uniroot
函式(R 手冊),該函式在給定的區間中搜尋函式的零點。# What are my demand and supply functions? 1 - q and q, because economics. P_D <- function ( q ) { 1 - q } P_S <- function ( q ) { q } # Set @Giskard's upper bound for the search qbar <- 1 # Find the equilibrium quantity uniroot( function ( q ) { P_D( q ) - P_S( q ) }, lower = 0, upper = qbar ) ########## # OUTPUT # ########## # # $root # [1] 0.5 # # $f.root # [1] 0 # # $iter # [1] 1 # # $init.it # [1] NA # # $estim.prec # [1] 0.5
找到交點後,驗證
$.root == 0
或 是否在零容差範圍內。如果你很懶惰,你可以設置
qbar <- 1e9
(例如)它仍然會表現得相當不錯。如果您採用這種方法,請務必謹慎,以防您的需求和供應函式在與經濟無關的區間上是非單調的。根據我對@Giskard 回答的評論,您也可以將此搜尋實現為
optimize( function ( q ) { abs( P_D( q ) - P_S( q ) ) }, interval = c( 0, qbar ) )
但是,R 有一個內置的求根函式 (
uniroot
),所以為什麼不使用它。