R中未知数的方程组

时间:2016-07-20 17:11:28

标签: r equation equation-solving

我有一个3x3矩阵Omega,其元素未知,以及一个定义的3x1参数矢量alpha。我想定义一个3x1矢量delta,其元素仍然未知,但依赖于alpha和Omega,如下图所示:

Formula

括号中对2的幂的项简化为数K,所以我写了这个函数:

Alpha=c(-0.248,1.092,-0.518)
K=function(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13){
    (1+Alpha[1]*(Alpha[1]+Alpha[2]*gamma12/(gamma1*gamma2)+Alpha[3]*gamma13/(gamma1*gamma3)))^(-1/2)
    }

gamma1, gamma2, gamma3是3x3矩阵Omega的对角线中的元素,而gamma12, gamma13, gamma23是非对角线元素(每个元素重复两次,例如gamma12=gamma21)。因此,通过在K()中放置6个任意值,我得到了标量。到目前为止很清楚。

其余的我不确定。我希望R返回一个如上所示定义的矢量增量。如何编写一个执行此代数计算的函数,并返回一个3x1向量delta,其元素与Omega中的未知数相同,但是移位/乘以alpha中的数字?

1 个答案:

答案 0 :(得分:1)

这就是你想要的吗?:

#generate the triangular matrix
set.seed(234)
og<-matrix(runif(9,1,2),3)
og[lower.tri(og)] = t(og)[lower.tri(og)]
#K(og[1,1],og[2,2],og[3,3],og[1,2],og[2,3],og[1,3])

#delta = (1 + alpha' * Omega * alpha)^(-1/2) * Omega * alpha
as.numeric((1+Alpha%*%og%*%Alpha)^(-1/2))*og%*%Alpha

> as.numeric((1+Alpha%*%og%*%Alpha)^(-1/2))*og%*%Alpha
           [,1]
[1,]  0.7264204
[2,] -0.2365427
[3,]  0.5709528

修改

如果你想要一个功能

Kf=function(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13,Alphav=Alpha){
  ogm<-matrix(c(gamma1,gamma12,gamma13,gamma12,gamma2,gamma23,
                gamma13,gamma23,gamma3),3)
  KF<-as.numeric((1+t(Alphav)%*%ogm%*%Alphav)^(-1/2))
  Delt<-KF*ogm%*%Alphav
  list(Delta=Delt,K=KF,Om=ogm)
}

#taking the same random values for consistency
gamma1=og[1,1]; gamma2=og[2,2]; gamma3=og[3,3];
gamma12=og[1,2]; gamma23=og[2,3]; gamma13=og[1,3]

Kf(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13)$Delta

> Kf(gamma1,gamma2,gamma3,gamma12,gamma23,gamma13)$Delta
           [,1]
[1,]  0.7264204
[2,] -0.2365427
[3,]  0.5709528