0

嗨,谢谢你的时间,

我意识到我的问题实际上与此线程中的问题非常相似:如何获取多项式表达式的系数

但是,我想详细说明这个问题。

我编写了一个程序,当给定一个向量,该向量填充了多项式内的单项式的升序系数时,将以类似的方式输出一个填充了该多项式基元系数的向量。例如,当我想知道表达式 y = 54s^2 - 36s + 3 的原语时,我会将向量 (3, -36, 54) 输入到我的程序中,它会返回向量 (0, 3, -18, 18) 因为这个 y 的原语是 18s^3 - 18s^2 + 3s。

该程序的代码如下:

# Define function degree
degree <- function() {

  # First asks for degree
  m1 <- readline("Please input the degree of your polynomial.")

  # Checks if degree is integer and non-negative
  m2 <- as.integer(m1)
  if ((m2 == m1)&(m1>0)) {
    print(paste("The degree of your polynomial is", m1))
  }
  if(m2 != m1) {
    print("The degree of a polynomial must be an integer.")
    degree()
  }
  if(m1 < 0) {
    print("The degree of a polynomial must be non-negative.")
    degree()
  }

  # Last output of degree is defining numeric m
  m <- as.numeric(m1)
}

# Define function polynomial
polynomial <- function() {

  # First calls on the degree function
  m <- degree()

  # Then asks for coefficients
  a <- readline("Please input the coefficients of your polynomial in order of their 
ascending degree separated by a space, such as: a[0] a[1] a[2] ... a[m]")

  # Creates vector a filled with these coefficients
  a <- strsplit(a, " ")
  a <- a[[1]]
  a <- as.numeric(a)

  # Checks if any non-numeric values were entered for the coefficients
  if (is.na(sum(a)) == TRUE) {
    print("The program does not allow for non-numeric coefficients.")
    polynomial()
  }

  # Checks if length of vector is equal to degree + 1
  if ((length(a) == m+1)) {
      print("Your polynomial can be represented by the vector:")
      print(a)
    }
  if ((length(a) != m+1)) {
    print("Please input a coefficient for the degree of each separate monomial within 
your polynomial.")
    polynomial()
  }

  # Last output of polynomial is defining numeric a
  a <- as.numeric(a)
}

# Define function primitive
primitive <- function() {

  # Call on function polynomial
  a <- polynomial()

  # Calculate the primitive
  p <- c()
  p[1] <- 0
  for (i in 1:length(a)){
    p[i + 1] <- a[i]/i 
  }
  print(paste("The degree of your primitive is", (length(p) - 1)))
  print("The primitive of your polynomial can be represented by the vector")
  print(p)
}

现在这本身可能并非完美无缺,但它工作正常。然而,我现在遇到的问题是我希望能够以多项式的形式计算微分方程的 Picard 迭代。现在,我非常有信心自己可以编写这段代码,所以我只会询问与我继续工作相关的内容。

我本质上希望能够将任何表达式简化为多项式形式(如果表达式允许这样做,但我们假设它确实如此)。比如我的表达式是6(3s - 1)^2,那么我想让R把它简化为54s^2 - 36s + 6,并把它变成向量形式(6, -36, 54),这样我就可以用我写的程序原语运行它。我尝试使用包 rSympy 来获得以下内容:

sympy("expand(6*(3*s - 1)**2)")

这给了我输出

[1] "6 - 36*s + 54*s**2"

但是我不知道如何从此输出中获取(数字)向量 (6, -36, 54)。

在我链接的线程中,我看到他们使用了函数“gregexpr”。然而,我不知道这个函数做什么以及它是如何工作的,我一生都无法弄清楚我必须在这个函数中输入什么才能获得我需要的向量。我不喜欢编写我不理解的代码。请帮忙解释一下!

4

0 回答 0