百科问答小站 logo
百科问答小站 font logo



R语言,累计求和号连续几个∑∑∑∑这样的怎么编码? 第1页

  

user avatar   liu-yang-zhou-23 网友的相关建议: 
      

献丑了。期待看到更好的方案。

高维数据的存储

如果是问高维数据如何存储,我建议用列表:

        A = list(1:3, 4:6, 7:9)  B = list(11:13, 14:16, 16:19)  C = list(21:23, 24:26, 27:29)  T = list(A, B, C) > T [[1]] [[1]][[1]] [1] 1 2 3  [[1]][[2]] [1] 4 5 6  [[1]][[3]] [1] 7 8 9   [[2]] [[2]][[1]] [1] 11 12 13  [[2]][[2]] [1] 14 15 16  [[2]][[3]] [1] 17 18 19   [[3]] [[3]][[1]] [1] 21 22 23  [[3]][[2]] [1] 24 25 26  [[3]][[3]] [1] 27 28 29     

这样我们就得到一个 的立方阵,至于求和那就很简单了:

       > sum(as.vector(unlist(T))) [1] 405     

可以验证

       S = 0 for(i in 1:3)for(j in 1:3)for(k in 1:3) S = S + T[[i]][[j]][[k]] > S [1] 405     

指标的排列

如何将多重求和转化为如下的形式,

这需要将求和指标 按某种顺序不重不漏地排列。

       #可重复元素的树形图,以矩阵形式列出 CC<-function(n,m) {   M = n^m; N = m*M     C = rep(0, N); C = matrix(C, ncol = m)       a = 1:n     for(i in m:1)     {   B = c()         for(j in a) {copy = n^(m - i); b = rep(j, copy); B = c(B, b)}         B = rep(B, M/(n*copy))         C[,i] = t(B)     }     C  } #例:3 表示每层求和次数,2 表示求和重数 > CC(3,2)       [,1] [,2]  [1,]    1    1  [2,]    1    2  [3,]    1    3  [4,]    2    1  [5,]    2    2  [6,]    2    3  [7,]    3    1  [8,]    3    2  [9,]    3    3     

这样一来,求和指标就完美地排列下来,然后在构造计算 的函数时,定义自变量为指标向量 的函数:

       P <- function(I) expr     

于是,无论是求几重的求和,都可以用 重循环就搞定了(尽管是形式上的):

       # n 表示每层求和次数,m 表示求和重数 S = 0; L = n^m; C = CC(n, m) for(i in L){ I = C[i, ]; S = S + P(I) } S     

副产品

我以前写过不可重复元素的树形图的函数:

       #树形图,n  size, m 为初始数 #树形图采用矩阵形式表示  #这里本来直接定义阶乘函数就行了,但不知道当时抽了什么筋,非要定义成 gamma 函数 gamma <- function(n) {   g = 1     for(i in 2:(n-1)){ g = g*i }     g }  #在Tree的基础上转化为矩阵形式 TT<-function(n,m) {   M = gamma(n); N = n*M     TT = rep(0,N); TT = matrix(TT,ncol = n); TT[,1] = m     a = 1:n     T = list(c(m),a[which(a != m)])     TT[,2] = T[[2]]; TT[,2] = sort(TT[,2])     for(i in a[-(1:2)])     {         p = n - i + 2         T[[i]] = 0         q = length(T[[i - 1]])/p         for(j in 1:q)         {   t = T[[i-1]][((j-1)*p+1):(j*p)]             r = length(t)             for(k in 1:r) T[[i]] = c(T[[i]],t[which(t != t[k])])         }         T[[i]] = T[[i]][-1]         L = length(T[[i]])         TT[,i] = as.vector(t(matrix(rep(T[[i]],M/L),L)))     }     TT  } #例: TT(4,4) 表示以 4 为起始,123 作为分叉的树形图 > TT(4,4)      [,1] [,2] [,3] [,4] [1,]    4    1    2    3 [2,]    4    1    3    2 [3,]    4    2    1    3 [4,]    4    2    3    1 [5,]    4    3    1    2 [6,]    4    3    2    1     

如果去掉第一列,

       > TT(4,4)[,-1]       [,1] [,2] [,3]  [1,]    1    2    3  [2,]    1    3    2  [3,]    2    1    3  [4,]    2    3    1  [5,]    3    1    2  [6,]    3    2    1     

就可以得到 的全排列。




  

相关话题

  物理专业学生应该具备哪些数学素养? 
  为什么样本方差(sample variance)的分母是 n-1? 
  如何比较 cos 38° 和 tan 38° 的大小? 
  如何评价上海交通大学数学系不提供就业辅导&要学生走纯数学之路? 
  全国范围内出现频率高的街道名都有哪些? 
  圆周率 π 是否隐藏了本个宇宙的设计者留给这个宇宙的智慧文明的某种信息? 
  如何证明牛顿―莱布尼兹公式? 
  复变函数、实分析、复分析、数学分析是什么关系? 
  你的科研之路是怎样的? 
  将一部分复变函数、傅里叶变换加入高考数学,一部分哈密顿力学拉格朗日变分法加入高考物理,大家是否赞同? 

前一个讨论
《七龙珠》的占卜婆婆、天神、孙悟空的“瞬间移动”有什么区别?
下一个讨论
孤独终老和勉强结婚,你会选什么?





© 2024-11-23 - tinynew.org. All Rights Reserved.
© 2024-11-23 - tinynew.org. 保留所有权利