我有一个想在 R 中解决的问题。
我看到我可以使用lsei
包中的函数limSolve
来最小化以矩阵形式写成 Ax=b 的线性方程组,受等式约束 Ex=f 和不等式约束 Gx>=h 的约束。
然而,我现在拥有的不是一个线性方程组,而是一个二次方程组,可以写成 t(x)Ax=b。
我看到有quadprog
二次案例的包,但它似乎不允许一组二次方程,只有一个方程。
有谁知道在等式和不等式约束下我可以用什么来最小化二次方程组?
这是我的例子。我正在尝试组合 3 个概率 P(A)、P(B)、P(C) - 这会创建 7 个段 v1 到 v7,其中 v1 是 P(A solus) 等... v4 是 P((A AND B) 不是 C) 等等。而 v7 是 P(A AND B AND C)。
我试图最小化的功能是:
obj.fc<-function(x){
f<-rep(NA,4)
v1<-x[1]
v2<-x[2]
v3<-x[3]
v4<-x[4]
v5<-x[5]
v6<-x[6]
v7<-x[7]
f[1]<-(v4+v7)*(1-(v1+v2+v4+v5+v6+v7))-2*(v1+v6)*(v2+v5)
f[2]<-(v5+v7)*(1-(v2+v3+v4+v5+v6+v7))-13*(v2+v4)*(v3+v6)
f[3]<-(v6+v7)*(1-(v1+v3+v4+v5+v6+v7))-11*(v1+v4)*(v3+v5)
f[4]<-(v4+v5+v6)*(1-(v1+v2+v3+v4+v5+v6+v7))-4*(v1+v2+v3)*v7
return(f)
}
我的平等约束是:
v1+v4+v6+v7=0.14
v2+v4+v5+v7=0.01
v3+v5+v6+v7=0.08
我的不等式约束是 Vi 必须介于 0 和 1 之间,并且它们的总和不能超过 1。