R:不一致阵列中的错误
问题描述:
我看了几篇关于这个错误的文章。但是,我发现我的矩阵是适当的大小,我仍然得到这个错误。我接下来认为这个问题是阶级,但他们是矩阵对象。我不确定发生了什么事。这是我写的函数:R:不一致阵列中的错误
library(Matrix)
library(MASS)
modify <- function(Vandermonde) {
s = svd(Vandermonde)
k = which(s$d < 1e-1)
u = matrix(s$u[,-k], nrow = nrow(s$u), byrow = FALSE)
v = matrix(s$v[,-k], nrow = nrow(s$v), byrow = FALSE)
modify = u * diag(s$d[-k]) * t(v)
}
基本上,我正在写一个函数,一个长方形矩阵,检查是否是单数。如果是,请将其设为非单数。我检查的矩阵是范德蒙德,我在这个函数之外创建。它是矩形的,因为我有N行和m个功率。这些由任何人指定。我需要范德蒙解决问题
V(N)×X = F(n)的
其中V由n的= {1,2,3,4,...,N}和f(n)是整数序列的对应项。一个示例序列是H =
Place Value
1 1.000000e+00
2 3.000000e+00
3 1.300000e+01
4 8.700000e+01
5 1.053000e+03
6 2.857600e+04
7 2.141733e+06
8 5.081471e+08
9 4.021353e+11
10 1.073376e+15
11 9.700385e+18
12 2.984343e+23
13 3.147936e+28
14 1.147438e+34
我创建范德蒙与
mat = matrix(0,n, m + 1)
for (i in 1:n) {
for (j in 1:(m + 1)) {
mat[i,j] = input[i]^(j - 1)
}
}
其中在H的情况下的n = 14的我让米= 10。要说明的,输入是H $地点和预期产出是H $价值。
答
基于我们在评论谈话,你需要使用
modify = u %*% diag(s$d[-k]) %*% t(v)
在功能
为了执行矩阵乘法。在R(对比MATLAB),*
表示Hadamard乘积(的elementwise乘法,.*
在MATLAB),其可以仅在基质上进行与相同尺寸,而%*%
表示普通的矩阵乘法,这仅ncol(A)==nrow(B)
需要A %*% B
。
您可以请包括数据和/或代码,将为我们提供一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example )? –
@BenBolker:谢谢你的关注。我修改了我的问题以包含数据和代码,以帮助您了解我所看到的内容。 – user1723196
dim(diag(s $ d [-k]))'是9x9; 'dim(t(v))'是9x11。你的意思是矩阵乘法('%*%')而不是采用Hadamard(元素)乘积? (你来自MATLAB,其中'*'表示矩阵乘法?) –