我有两个联合方程式,我想用r来解决。除了其中一个方程有一个自然的记录:
等式1:U(x; y; z)= 5 ln x + 8 ln y + 12 ln z (将获得最大化,因此设置为0)
等式2:10x + 15y + 30z = 3000
按照上一篇文章: Solving simultaneous equations with R
我正在尝试:
a <- rbind(c(5*log, 2*log, 3*log),
c(10, 15, 30))
b <- c(0, 3000)
solve(a, b)
我得到一个非数字参数错误,因为我没有插入日志函数中的x。
答案 0 :(得分:1)
您尝试使用的求解函数仅适用于线性耦合方程。如果要解决非线性耦合方程,则需要使用nleqslv库。
然后G5W是对的,你的系统缺乏一种关系。
我举一个用对数求解耦合方程的例子和一个带解的系统:
library(nleqslv)
dslnex <- function(x) {
y <- c(0,30)
y[1] <- 5*log(x[1]) - x[2]
y[2] <- 10*x[1] + 15*x[2]
y
}
xstart <- c(0.5,1)
fstart <- dslnex(xstart)
nleqslv(xstart,dslnex)
给出
$x
[1] 0.8883046 -0.5922030
作为解决方案。如果您想尝试不同的分辨率方法:
> z <- testnslv(xstart,dslnex)
> print(z)
Call:
testnslv(x = xstart, fn = dslnex)
Results:
Method Global termcd Fcnt Jcnt Iter Message Fnorm
1 Newton cline 1 4 4 4 Fcrit 8.106e-20
2 Newton qline 1 4 4 4 Fcrit 8.106e-20
3 Newton gline 1 4 4 4 Fcrit 8.106e-20
4 Newton pwldog 1 4 4 4 Fcrit 8.106e-20
5 Newton dbldog 1 4 4 4 Fcrit 8.106e-20
6 Newton hook 1 4 4 4 Fcrit 8.106e-20
7 Newton none 1 4 4 4 Fcrit 8.106e-20
8 Broyden cline 1 6 1 6 Fcrit 2.473e-24
9 Broyden qline 1 6 1 6 Fcrit 2.473e-24
10 Broyden gline 1 6 1 6 Fcrit 2.473e-24
11 Broyden pwldog 1 6 1 6 Fcrit 2.473e-24
12 Broyden dbldog 1 6 1 6 Fcrit 2.473e-24
13 Broyden hook 1 6 1 6 Fcrit 2.473e-24
14 Broyden none 1 6 1 6 Fcrit 2.473e-24
为您提供方法,告诉您是否已收敛的消息,以及与解决方案的距离Fnorm