Есть ли способ, которым я могу хранить многочлен или коэффициенты многочлена в одном элементе в векторе R? - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу создать функцию R, которая генерирует циклическую c конечную группу F [x].

По сути, мне нужно найти способ хранения полиномов или, по крайней мере, коэффициентов полинома в одном элементе в R-векторе.

Например, если у меня есть набор F = {0,1, x, 1 + x}, я бы хотел сохранить эти четыре полинома в вектор R, например

F[1] <- 0 + 0x
F[2] <- 1 + 0x
F[3] <- 0 + x
F[4] <- 1 + x

Но я получаю сообщение об ошибке: «количество заменяемых элементов не кратно длине замены»

Есть ли способ, по которому я могу, по крайней мере, сделать что-то вроде:

F[1] <- (0,0)
F[2] <- (1,0)
F[3] <- (0,1)
F[4] <- (1,1)

Для справки, если кто-то интересуется математической проблемой, с которой я пытаюсь работать, вся моя функция R до сих пор равна

gf <- function(q,p){

  ### First we need to create an irreducible polynomial of degree p
  poly <- polynomial(coef=c(floor(runif(p,min=0,max=q)),1)) #This generates the first polynomial of degree p with coefficients ranging between the integer values of 0,1,...,q
  for(i in 1:(q^5*p)){ #we generate/check our polynomial a sufficient amount of times to ensure that we get an irreducible polynomial
    poly.x <- as.function(poly) #we coerce the generated polynomial into a function
    for(j in 0:q){ #we check if the generated polynomial is irreducible
      if(poly.x(j) %% q == 0){ #if we find that a polynomial is reducible, then we generate a new polynomial
        poly <- polynomial(coef=c(floor(runif(p,min=0,max=q)),1)) #...and go through the loop again
      }
    }
  }
  list(poly.x=poly.x,poly=poly)

  ### Now, we need to construct the cyclic group F[x] given the irreducible polynomial "poly"
  F <- c(rep(0,q^p)) #initialize the vector F
  for(j in 0:(q^p-1)){
    #F[j] <- polynomial(coef = c(rep(j,p)))
    F[j] <- c(rep(0,3))  
  }
  F
}

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

Вам придется хранить их как строки, так как в противном случае R попытается интерпретировать операторы. Вы можете иметь

F[1] <- "0 + 0x"

или даже матрицу, более гибкую для применения и других операций, которые вы, возможно, захотите выполнить

mat <- matrix(c(0,1,0,1,0,0,1,1), ncol=2)
1 голос
/ 28 апреля 2020

Убедитесь, что F является списком, а затем используйте [[]] для размещения значений

F<-list()
F[[1]] <- c(0,0)
F[[2]] <- c(1,0)
F[[3]] <- c(0,1)
F[[4]] <- c(1,1)

Списки могут содержать разнородные типы данных. Если все будет константой и коэффициентом для х, то вы также можете использовать матрицу. Просто установите значение каждой строки с помощью подмножества типа [row, col]. Вам нужно будет инициализировать размер во время его создания. Он не будет автоматически расти как список.

F <- matrix(ncol=2, nrow=4)
F[1, ] <- c(0,0)
F[2, ] <- c(1,0)
F[3, ] <- c(0,1)
F[4, ] <- c(1,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...