2017-05-08 73 views
0

我試圖一些代碼從MATLAB轉換爲R.從MATLAB代碼轉換至R

我有特別的問題轉換微分方程的這一部分:

在MATLAB:

dA.*(A*N - N.*sum(A,2)) 

其中,Da是一個整數,A是10×10矩陣,而N是一個10×矩陣(參見下面的示例代碼)

就R到目前爲止我這有:

dA*(A*N - N*colSums(A)) 

但由於某種原因,它似乎沒有給出相同的結果。有沒有人有任何想法,我做錯了什麼?數據的

實施例我使用以下:

在MATLAB

dA = 0.1; 
N = 120000*ones(1,nN); 
seq = [0 1 0 0 0 1 0]; 
seq2 = repmat(seq,1,20); 
seq100 = seq2(1:100) 
A = AA-diag(diag(AA)); 

在R:

dA <- 0.1       
N <- c(120000, 120000, 120000, 120000, 120000, 120000, 120000, 120000, 120000, 120000) 
num_zeros_int <- zeros(70, 1) 
num_ones_int <- ones(30, 1) 
seq <- c(0,1,0,0,0,1,0) 
seq2<- rep(seq, times = 20) 
seq100 <- seq2[0:100] 
int_mat <- matrix(seq100, nests, nests)        
+1

好,'*'和'*'在MATLAB不同mathemathical操作,但您可把它們都翻譯成'*'給R,所以我認爲這是問題所在。此外,你的矩陣是隨機的,所以我希望它總是給出不同的結果!否則你破壞了隨機數。 –

+1

這可能有所幫助:http://mathesaurus.sourceforge.net/octave-r.html – coffeinjunky

+0

@AnderBiguri謝謝!我會看看那個。啊,是的,抱歉,我應該包括我正在測試的非隨機數據 - 我現在就改變它。 –

回答

1

Matlab的表達:

dA.*(A*N - N.*sum(A,2)) 

其中

dA: real number 
A: 10 x 10 matrix 
N: 10 X 1 matrix 
A*N: matrix multiplication 
sum(A,2): sum of rows in A (10x1 matrix) 
N.*sum(A,2): element by element multiplication (10 x 1 matrix) 

讓我們建立了下面的例子中R:

A = matrix(data = 1:100,nrow = 10) 
N = matrix(data = 1:10) 
dA = 0.1 

> A 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1 11 21 31 41 51 61 71 81 91 
[2,] 2 12 22 32 42 52 62 72 82 92 
[3,] 3 13 23 33 43 53 63 73 83 93 
[4,] 4 14 24 34 44 54 64 74 84 94 
[5,] 5 15 25 35 45 55 65 75 85 95 
[6,] 6 16 26 36 46 56 66 76 86 96 
[7,] 7 17 27 37 47 57 67 77 87 97 
[8,] 8 18 28 38 48 58 68 78 88 98 
[9,] 9 19 29 39 49 59 69 79 89 99 
[10,] 10 20 30 40 50 60 70 80 90 100 

> N 
     [,1] 
[1,] 1 
[2,] 2 
[3,] 3 
[4,] 4 
[5,] 5 
[6,] 6 
[7,] 7 
[8,] 8 
[9,] 9 
[10,] 10 

的第一項是:

z1 = A %*% N 

第二項:

srow = rowSums(A) 
z2 = srow * N 

這導致了最終結果:

result = dA * (z1-z2) 

最終方程

result = dA * (A %*% N - rowSums(A)*N) 

這應該給你相同的答案Matlab的dA.*(A*N - N.*sum(A,2))

+0

令人驚歎!謝謝,那完美的作品! –