【弦割法】多项式方程求解的迭代程序
用弦割法求解方程式:f (x)= x^3-3x-1
取x0=2,x1=2.1
#include <cmath>
#include <iostream>
#include <iomanip>
double fx(double x)
{
double f = x*x*x-3*x-1;//原函数
return f; //f(x) = 0中的f(x)函数形式
}
void main()
{
using namespace std;
int N = 100,//迭代次数最大值
k = 0;//迭代次数实际值
double a = 2,//(a, b)为x取值区间
b = 2.1,
epsilon = 0.00001,//允许精度
x = b, //初始化
delta = b - a,//初始化
Oldfx = fx(a),//初始化
Newfx = fx(x);//初始化
cout<<"x0 = "<<a<<endl;
cout<<setw(15)<<"delta"<<setw(15)<<"x"<<setw(15)<<"f(x)"<<endl;
cout<<setw(15)<<0<<setw(15)<<a<<setw(15)<<Oldfx<<endl;
cout<<setw(15)<<delta<<setw(15)<<x<<setw(15)<<Newfx<<endl;
for(int i = 0; i<N; i++)//迭代步骤
{
delta *= -Newfx/(Newfx - Oldfx);
x += delta;
k++;
if(fabs(delta) > epsilon)
{
Oldfx = Newfx;
Newfx = fx(x);
cout<<setw(15)<<delta<<setw(15)<<x<<setw(15)<<Newfx<<endl;
}
else
{
cout<<setw(15)<<delta<<setw(15)<<x<<endl;
break;
}
}
cout<<"迭代次数:"<<k<<endl<<"x = "<<x<<endl;
cin>>x;//控制台停留
}