алгоритм — C ++: как вычислить интеграл с границами интервала?

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

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

class Polynomial {

private:
double* Coefficients;  //Array of coefficients in order of ascending power
int Degree; //The degree of the polynomial

...

Класс должен иметь метод для нахождения интеграла многочлена в пределах нижней и верхней границ. Но я действительно не знаю, как с этим работать.

Поскольку не показывать, что я сделал, плохая практика, это то, что у меня есть в настоящее время, и, вероятно, это не имеет большого смысла, но, пожалуйста, если вы можете, указать мне правильное направление?

Polynomial Polynomial::ComputeIntegral(double lower, double upper) {
//Values needed to create new polynomial
//degree will be one more than the original polynomial
int degree = Degree + 1;
double* coefficients = new double[degree + 1];

coefficients[0] = 0;

for (int i = 0; i < degree +1; i++) {
coefficients[i + 1] = Coefficients[i] / (double)(i + 1);
}

Polynomial integral(degree, coefficients);
return integral;
}

То, что я могу видеть себя, все испорчено, потому что а) я не использую границы, и б) я вполне уверен, что согласно описанию присваивания я должен получить значение, а не новый многочлен.

Google говорит мне, что есть алгоритмы для поиска интегралов (например, Trapezoid), но я не могу сопоставить это с моим представлением полинома.

-1

Решение

Несколько указателей:

  1. использование std::vectors вместо указателей и new, (Если вы новичок в C ++, очень мало обстоятельств, когда вам действительно нужно использовать new.)
  2. ComputeIntegral(double, double) нужно будет возвращать двойной, так как он явно вычисляет определенный интеграл. (Функция, которая у вас есть на данный момент, будет GetPrimitive(), так как он возвращает примитив многочлена, который является другим поли.
  3. Определенный интеграл — это разность примитива, оцененного на границах (Первая фундаментальная теорема исчисления).
  4. Существует несколько способов представления полинома в виде структуры данных, но я бы предложил один std::vector<double> coeffs который представляет все коэффициенты вплоть до степени поли, то степень можно рассчитать по coeffs.size(), В некоторых случаях могут быть нули в этом coeffs хоть.
3

Другие решения


По вопросам рекламы [email protected]