我看了几篇关于这个错误的帖子。但是,我发现我的矩阵是合适的大小,我仍然得到这个错误。我接下来认为问题是类,但它们是矩阵对象。我不知道发生了什么。这是我写的功能:
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)
}
基本上,我正在编写一个带有矩形矩阵的函数,检查它是否是单数。如果是,请将其设为非单数。我正在检查的矩阵是Vandermonde,我在这个函数之外创建。它是矩形的,因为我有N行和m次幂。这些是由任何人指定的。我需要Vandermonde解决问题
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
我用
创建了Vandermondemat = 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,我让m = 10.注意,输入是H $ Place,预期输出是H $ Value。
答案 0 :(得分:2)
根据评论中的对话,您需要使用
modify = u %*% diag(s$d[-k]) %*% t(v)
在函数中以执行矩阵乘法。在R中(与MATLAB相反),*
表示Hadamard乘积(元素乘法,MATLAB中为.*
),只能在相同维度的矩阵上完成,而%*%
表示普通矩阵乘法,ncol(A)==nrow(B)
只需要A %*% B
。