我有一个3x3矩阵Omega,其元素未知,以及一个定义的3x1参数矢量alpha。我想定义一个3x1矢量delta,其元素仍然未知,但依赖于alpha和Omega,如下图所示:
括号中对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中的数字?
答案 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