R

使用 R 求解方程組

  • May 18, 2021

我正在嘗試將 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 &lt;- function ( q ) { 1 - q }
P_S &lt;- function ( q ) { q }

# Set @Giskard's upper bound for the search
qbar &lt;- 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 &lt;- 1e9(例如)它仍然會表現得相當不錯。如果您採用這種方法,請務必謹慎,以防您的需求和供應函式在與經濟無關的區間上是非單調的。


根據我對@Giskard 回答的評論,您也可以將此搜尋實現為

optimize( function ( q ) { abs( P_D( q ) - P_S( q ) ) }, interval = c( 0, qbar ) )

但是,R 有一個內置的求根函式 ( uniroot),所以為什麼不使用它。

引用自:https://economics.stackexchange.com/questions/43994