2016-06-08 5 views
2

나는이 오류에 대한 여러 글에서 보았다. 그러나, 나는 나의 매트릭스가 적절한 크기이고 아직도이 오류가 발생하는 것을 발견하고있다. 다음으로 문제가 클래스라고 생각했지만 행렬 객체입니다. 나는 무슨 일이 일어나고 있는지 잘 모르겠습니다.오류 : 비 정합 배열

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) 
} 

기본적으로, I는 직사각형 행렬을 얻어가 단수인지를 확인하는 기능을 쓰고있다 : 여기서 I는 쓰고 함수이다. 그렇다면 비표준으로 만드십시오. 내가 점검하는 매트릭스는 Vandermonde이며,이 함수 밖에서 생성합니다. 그것은 N 개의 행과 m 개의 힘이 있기 때문에 직사각형입니다. 이들은 누구든지 지정합니다. I 문제점을

V (n)을 해결하기 반데 몬드 필요 * X = F (n)은 V는 N 이루어지는

= {1, 2, 3, 4, ..., N}와 f (n)은 정수열의 해당항이다. 예 서열

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 

= H이고, I는

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으로 반데 몬드를 생성하고 I은 m = (10)은 주목하는하자 입력 H $입니다 장소와 예상 출력은 H $ 값입니다.

+1

당신은 [재현 예] 우리에게 제공 할 것입니다 데이터 및/또는 코드 (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example를 포함시겠습니까)? –

+0

@BenBolker : 관심을 가져 주셔서 감사합니다. 데이터 및 코드를 포함하도록 질문을 수정하여 현재보고있는 내용을 볼 수 있도록 도와줍니다. – user1723196

+0

'dim (diag (s $ d [-k]))'는 9x9입니다. 'dim (t (v))'는 9x11입니다. Hadamard (엘레멘트 와이즈) 제품을 가져 오는 대신 매트릭스 곱하기 ('% * %')를 원하십니까? ('*'행렬 곱셈을 나타낸다는 MATLAB에서 오는?) –

답변

2

는 코멘트에 우리의 대화를 바탕으로, 당신은 행렬을 곱셈을 수행하기 위해 함수에

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

를 사용해야합니다. %*%A %*% Bncol(A)==nrow(B) 필요 정규 행렬 곱셈을 나타내고, 반면 (MATLAB는 대조적으로) R에서 *동일 치수 행렬에서 수행 될 수 마드 생성물 (elementwise 곱셈 MATLAB에서 .*)를 나타낸다.