3

このエラーに関するいくつかの投稿を見ました。ただし、マトリックスが適切なサイズであることがわかりましたが、まだこのエラーが発生しています。次に問題はクラスだと思いましたが、それらは行列オブジェクトです。何が起こっているのかわかりません。ここに私が書いている関数があります:

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乗があるため、長方形です。これらは誰によって指定されます。問題を解決するにはヴァンデルモンドが必要です

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 で、m = 10 とします。入力は H$Place であり、期待される出力は H$Value です。

4

1 に答える 1

2

コメントでの会話に基づいて、使用する必要があります

modify = u %*% diag(s$d[-k]) %*% t(v)

行列の乗算を実行するために関数で。R では (MATLAB とは対照的に)*はアダマール積 (MATLAB では要素ごとの乗算) を示し、これは同じ次元の.*行列でのみ実行できます。%*%ncol(A)==nrow(B)A %*% B

于 2016-06-08T02:15:16.027 に答える