R Как получить коэффициенты полиномиального выражения?

Привет и спасибо за ваше время,

Я понимаю, что мой вопрос на самом деле очень похож на вопрос в этой теме: Как получить коэффициенты полиномиального выражения

Однако я хотел бы остановиться на этом вопросе.

Я написал программу, которая при задании вектора, заполненного коэффициентами полинома в возрастающей степени относительно мономов внутри этого полинома, будет аналогичным образом выводить вектор, заполненный коэффициентами примитива этого полинома. Например, когда я хочу узнать примитив выражения y = 54s^2 - 36s + 3, я бы ввел вектор (3, -36, 54) в мою программу, и он вернул бы вектор (0, 3, -18, 18) так как примитив этого у составляет 18 с ^3 - 18 с ^2 + 3 с.

Код для этой программы выглядит следующим образом:

# 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)
}

Теперь это, вероятно, не безупречно само по себе, но работает нормально. Однако теперь у меня есть проблема в том, что я хочу иметь возможность вычислять итерации Пикара дифференциальных уравнений в форме полинома. Теперь я совершенно уверен, что могу написать этот код сам, поэтому я буду только спрашивать, что для меня важно, чтобы продолжить свою работу.

По сути, я хочу иметь возможность упростить любое выражение до полиномиальной формы (если выражение допускает это, но мы предполагаем, что это так). Например, если мое выражение равно 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". Однако я понятия не имею, что делает эта функция и как она работает. Я не мог на всю жизнь понять, что именно мне нужно было бы ввести в эту функцию, чтобы получить нужный мне вектор. Мне не нравится писать код, который я не понимаю. Пожалуйста, помогите и объясните!

0 ответов

Другие вопросы по тегам