Процедура генерации полиномиальных коэффициентов и функция для ее вычисления - PullRequest
1 голос
/ 27 апреля 2020

Итак, по сути, я пытаюсь закодировать небольшой блок, который должен создавать или генерировать коэффициенты для полиномиальной n-степени, которые могут быть представлены через вектор, который равен a = [a0, a1..an] с учетом базовых c формула:

formula of polynomial

Ну, проблема в том, что при выполнении функции для получения значения полинома P из точки "x" it возвращает значение, полностью используя правило Хорнера, которое не соответствует ожидаемому результату, хотя и не уверено, какое из них мне следует надеть. Математическое обоснование c говорит мне, по крайней мере, кое-что из:

Например: n = 2; ( A [i] суммирует члены на 4, 2, 1) и вычисляет P ( значение x ) = 4 * x ^ 0 - 2 * x ^ 1 + 1 * x ^ 2 = 4 - 2x + x2 = x2 - 2x + 4 = 4

Другими словами, не удается найти виновного, когда для значения "x" подразумевается go через "i "переменная неправильно пронумерована показателем степени, и результат получает вывод для P (0) = 7, тогда как он не должен быть конкретным, как в P (0) = 0 ^ 2 - 2 * 0 + 4 = 4

Вот небольшой отрывок, который был пройден до сих пор, я был бы признателен, если бы кто-то мог указать мне правильное направление.

double horner(const double&x, const int& n, const double& nn) {
    if (n < 0)
        return nn;
     else {
        double m; cin>>m;
        return horner(x, n-1, nn*x+m);
     }
}
int main() {
    int n;double x;
    cout << "n=";cin >> n;
    cout << "x=";cin >> x;
    cout << "P(0)=" << horner(x, n, 0);
    return 0;
}

Редактировать: Мой мозг пукнул где-то на мгновение, пока кодировал и постоянно пересматривал дело, я забыл упомянуть, какие именно части каждой переменной для программы, чтобы избежать путаницы, да, так:

  • n, полиномиальная оценка;
  • p, полиномиальный коэффициент;
  • x, точка, в которой оценивается;

И здесь приведено уравнение степени для полинома

enter image description here

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

Редактировать: через несколько часов удалось исправить проблему с полиномиальной оценкой, остается только вопрос, как я могу предположить, чтобы генерировать коэффициенты, используя метод std :: vector ?

float honer(float p[], int n, float x)
{
    int i;
    float val;
    val = p[n];
    for (i = n - 1; i >= 0; i--)
        val = val * x + p[i];
    return val;
}
int main()
{

    float p[20]; // Coefficient of the initial polynomial
    int n;       // Polynomial degree -n
    float x;     // Value that evaluates P -> X
    cout << "(n) =  ";
    cin >> n;
    for (int i = n; i >= 0; i--)
    {
        cout << "A[" << i << "]=";
        cin >> p[i];
    }
    cout << "x:= ";
    cin >> x;
    cout << "P(" << x << ")=" << honer(p, n, x);

    //Result (input):
    //n: 2,
    //P[i]: 4, -2, 1 -> x: 0, 1
    // Result (output):
    //P() = 4
}

Ожидайте некоторый определенный выходной сценарий ios, приведенный ниже ввод, если назначен:

enter image description here

...