gpt4 book ai didi

r - 找到总和为 n 的所有 m 元组

转载 作者:行者123 更新时间:2023-12-02 06:57:40 25 4
gpt4 key购买 nike

我想找到方程 i+j+k+l+m=n 的所有非负整数解,其中 n 是一个非负整数。也就是说,我想在 R 中找到关于某个 n 的所有可能的 5 元组 (i,j,k,l,m)。

我编写的代码无法正常工作。我怀疑循环中有问题。

为了您的方便,我取 n=3,所以我基本上是在尝试计算所有向量 (i,j,k,l,m),它们的数量为 35,矩阵 a(35 x 5) 是应该显示这些向量的矩阵。整个事情都在函数“sample(n)”中,如果我把 n=3 即 sample(3) 在调用时给我矩阵 a。请注意,a (35 x 5) 是预先定义的,所有条目均为 0。

sample=function(n){
i=0
j=0
k=0
l=0
m=0
for(p in 1:35){
while(i<=3){
while(j<=3){
while(k<=3){
while(l<=3){
m=n-(i+j+k+l)
if(m>-1){
a[p,]=c(i,j,k,l,m)
}
l=l+1}
k=k+1}
j=j+1}
i=i+1}
}
return(a)
}

当我调用 sample(3) 时,我得到了原来的 a,即所有元素为 0 的矩阵。这段代码有什么问题?请改正。

最佳答案

我不认为蛮力方法会给您带来完成这项任务的乐趣。相反,您应该寻找可以使用且高效的现有函数(即用 C/C++ 实现)。

n <- 3
library(partitions)
blockparts(rep(n, 5), n)
#[1,] 3 2 1 0 2 1 0 1 0 0 2 1 0 1 0 0 1 0 0 0 2 1 0 1 0 0 1 0 0 0 1 0 0 0 0
#[2,] 0 1 2 3 0 1 2 0 1 0 0 1 2 0 1 0 0 1 0 0 0 1 2 0 1 0 0 1 0 0 0 1 0 0 0
#[3,] 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 2 0 0 1 0 0 0 0 1 1 2 0 0 1 0 0 0 1 0 0
#[4,] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 2 2 2 3 0 0 0 0 0 0 1 1 1 2 0 0 0 1 0
#[5,] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 3

关于r - 找到总和为 n 的所有 m 元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28137243/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com