将代码从 MATLAB 转换为 R
Converting code from MATLAB to R
我正在尝试将一些代码从 MATLAB 转换为 R。
我在转换这部分微分方程时遇到特殊问题:
在 MATLAB 中:
dA.*(A*N - N.*sum(A,2))
其中 dA 是整数,A 是 10x10 矩阵,N 是 10x1 矩阵(参见下面的示例代码)
到目前为止,在 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)
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))
相同的答案
我正在尝试将一些代码从 MATLAB 转换为 R。
我在转换这部分微分方程时遇到特殊问题:
在 MATLAB 中:
dA.*(A*N - N.*sum(A,2))
其中 dA 是整数,A 是 10x10 矩阵,N 是 10x1 矩阵(参见下面的示例代码)
到目前为止,在 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)
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))