Я работаю пару часов, пытаясь понять, что я делаю неправильно. Все, что мне нужно сделать, это найти один корень из полинома, представленного массивом, используя метод Ньютона. Кажется, что две функции (поливал и полидер) дают мне правильные ответы, и я чувствую, что основной код правильно выполняет метод Ньютона. Я надеялся, что кто-то испытает, может дать мне несколько советов.Я новичок, пытаясь написать функцию, которая находит корень функции массива
#include <iostream>
#include <cmath>
using namespace std;
float polyval(float*, int, float);
void polyder(float*, int, float*);
int main(void) {
int n;
float x=-1,f;
float tol=pow(10,-5);
cout << "Enter polynomial order:" << endl;
cin >> n;
float* p=new float[n+1];
float* dp=new float[n];
cout << "Enter coefficients, starting with the highest power:" << endl;
for (int k=0;k<n+1;k++) {
cin >> p[k];
}
polyder(p,n,dp);
f=polyval(p,n,x);
while (fabs(f)>tol) {
x=x-f/polyval(dp,n,x);
f=polyval(p,n,x);
cout << x << endl;
cout << f << endl;
}
cout << "A real root is at x= " << x << endl;
cout << "To verify: p(" << x << ") = " << polyval(p,n,x) << endl;
return 0;
}
float polyval(float* p, int n, float x) {
float px;
px=0;
for (int k=0;k<n+1;k++) {
px=px+p[k]*pow(x,n-k);
}
return px;
}
void polyder(float* p, int n, float* dp) {
for(int k=0;k<n;k++) {
dp[k] = p[k+1] * (k+1);
}
}
Если все дает вам правильный ответ, с чем вы столкнулись? – Rakete1111
Ну, полидерные и поливальные функции дают мне числовые правильные ответы. Но проблема лежит где-то в основной функции, так как значения для x и f продолжают экспоненциально возрастать, когда я вхожу в многочлен. – Christian
Где находится C++ в этом C-коде наряду с использованием C++? –