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