用R求解一系列简单方程

时间:2017-02-19 02:55:10

标签: r

即使阅读了一些基本的示例和文档,我也无法理解R中的solve命令。

假设我有以下公式描述经济增长率:

Y = K^α * (AL)^1−α

设为α= 1/3。让我们读一个虚拟数据框

data <- read.table(text = "
Economy Year y k L
A 1960 100 1 1000
A 2000 1350 27 2000
B 1960 20 2 4000
B 2000 1350 54 8000
", header = TRUE)

现在,我如何使用solve命令(或更合适的东西)计算每一行中“A”的值?这样的事情显然不起作用:

with(data, solve(y, k^(1/3), L^(2/3))

1 个答案:

答案 0 :(得分:1)

我使用了ompr优化建模包。您需要重新排列等式以使其有效。

library(ROI)
library(ROI.plugin.glpk)
library(ompr)
library(ompr.roi)
library(dplyr)

f <- function(y, k, L, alpha){
    MIPModel() %>%
    add_variable(A) %>%
    set_objective(0) %>%
    add_constraint((((y/(k^alpha))^(1/((1-alpha))))/L) == A) %>%
    solve_model(with_ROI(solver = "glpk")) %>% 
    get_solution(A)
}

apply(data[,3:5], 1, function(x) f(y=x['y'],k=x['k'],L=x['L'], alpha=0.3))
#[1] 0.71968567 0.35984284 0.17992142 0.08996071
apply(data[,3:5], 1, function(x) f(y=x['y'],k=x['k'],L=x['L'], alpha=1/3))
#[1] 1.00000000 4.77297077 0.01581139 0.84375000

这可能对这个例子来说太过分了。但是可扩展。