给个初值,用牛顿法解多项式的根;
#include<iostream>
#include<math.h>
#include<vector>
using namespace std;
struct Newton {
public:
double ini_para;
// 最高n次,系数列表,初值
double resultNewton(int n,std::vector<double> coffer,double ini_para) {
int c = 0;
double x = ini_para, x2 = 0;
while (true) {
c++;
double b;
int i = 0;
double yuanf = 0, daof = 0;
while( i < n+1 ){
yuanf += coffer[i] * pow(x,n-i); // 原函数
if(i<n)
daof += (n-i)*coffer[i]*pow(x,n-i-1); //导函数
i++;
}
double chu = yuanf / daof; //原函数/导函数
x2 = x - chu;
if (abs(x2 - x) < 0.00001)
break;
x = x2;
}
int i = 0;
double reslt = 0;
while (i < n + 1) {
reslt += coffer[i] * pow(x2, n - i); // 原函数
i++;
}
cout << "总共迭代了:" << c << " "<< reslt;
return x2;
}
};
int main() {
std::vector<double> coff = { 1,0 ,0,0,5,6};
Newton newton;
int a = newton.resultNewton(coff.size()-1, coff,-10);
cout << "\n结果为:\n" << a << endl;
system("pause");
return 0;
}