【问题标题】:R define a matrix without valuesR定义一个没有值的矩阵
【发布时间】:2016-02-17 23:01:48
【问题描述】:

我正在尝试在 R 中编写一个函数,该函数将采用具有某种结构的矩阵和一个列向量来赋予该矩阵。

比如这样的:

         X^2 aXY 0                X^2  0   0
 Mat=    aYX Y^2 bYZ    or Mat1=  0   2X^2 0
         0   bZY Z^2              0    0   3X^2



c(X=1,Y=2,Z=3, a=.3,b=.2)   or   c(X=1)

然后矩阵将被赋予向量中的值,我可以对给定的矩阵进行数学运算。

我很难定义矩阵。我似乎无法只定义一个空变量矩阵,这些变量稍后会被赋值。

我试过了

x=as.integer
y=as.integer
z=as.integer


Mat=matrix(c(x,0,0,0,y,0,0,0,z),nrow=3)
values=c(x=.5,y=2,z=3)  

但我不知道是否可以为矩阵提供这些值。

我可以先定义变量的值,然后定义矩阵,但我认为这不是我想要的。即-

x=.5;y=2,z=3;

Mat=matrix(c(x,0,0,0,y,0,0,0,z),nrow=3)

我的函数需要知道矩阵的结构以及值。我想要的唯一约束是它应该是一个协方差矩阵。 干杯

编辑-我应该指出,理想情况下,我的矩阵不仅仅是 3*3,而是任何大小的正方形,我可能希望下三角形中的每个位置都有一个变量。 (我的矩阵总是对称的。)

【问题讨论】:

  • 你对x=as.integer这行的意图是什么?除非您知道自己在做什么,否则这在 R 语言中应该是有问题的。您是否要声明一个变量?
  • 矩阵会一直是正方形的吗?
  • 我输入 as.integer 的唯一原因是它不能接受 x 或 y,除非我做了一些东西。

标签: r matrix


【解决方案1】:

运用你的推理:

f <- function(a,b,x,y,z){matrix(c(x^2, a*x*y, 0, a*x*y, y^2, b*y*z, 0, b*z*y, z^2), nrow=3, ncol=3)}
# Use it!
f(.3,.2,1,2,3)

>
     [,1] [,2] [,3]
[1,]  1.0  0.6  0.0
[2,]  0.6  4.0  1.2
[3,]  0.0  1.2  9.0

应该直接在函数体内添加if 语句来检查输入变量是否只定义了 X 并返回替代形式。

请注意,可以使用cov() 内置函数导出协方差矩阵。

【讨论】:

  • 这适用于特定的矩阵结构,但我希望能够只用一个函数制作任何结构。否则,我将重新编写一个庞大的函数列表,这些函数代表了协方差矩阵在我的问题中的各种不同构造方式。我会看看 cov() 不敢相信我还没有遇到过。干杯。
  • 你能举一个例子说明你想用同样的函数生成第二种格式吗?
【解决方案2】:

在与其他人交谈后,我认为最简单的解决方案就是按照建议使用可编辑的 make.matrix 函数。这样,使用代码的人只需编辑 make.matrix 函数以适合他们的设计,然后稍后调用它。谢谢你的帮助。

【讨论】:

    【解决方案3】:

    我相信这就是你所追求的,你可能想玩一下将实际矩阵传递给函数,在这里,我已经将矩阵框架变成了一个向量。

    MakeMatrix<-function(X=0,Y=0,Z=0,MatrixForm){
        #Get the number of entrys in the matrix
        n<-length(MatrixForm)
        #create a matrix with sqrt(n) rows and columns (ie make it square)
        m<-matrix(nrow =sqrt(n), ncol = sqrt(n))
    
        #Start stroing data
        count = 1
        for(i in 1:sqrt(n)){
            for(j in 1:sqrt(n)){
                #Evaluates the line with the given values provided
                m[i,j]<-eval(parse(text=MatrixForm[count]))
    
            count = count + 1
            }
        }
        return(m)
    }
    
    MF<-c("X^2",0,0,0,"2*X^2",0,0,0,"3*X^2")
    MakeMatrix(X=1,MatrixForm=MF)
    
    >      
          [,1] [,2] [,3]
    [1,]    1    0    0
    [2,]    0    2    0
    [3,]    0    0    3
    

    【讨论】:

      猜你喜欢
      • 2018-10-20
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-01
      相关资源
      最近更新 更多