2017-05-08 146 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

令人惊叹!谢谢,那完美的作品! –