双点弦截法迭代程序

来源:互联网 发布:淘宝有哪些冷门的类目 编辑:程序博客网 时间:2024/06/08 02:49
// 双点弦截法迭代#include "stdafx.h"#include <cmath>#include <iostream>#include <iomanip>double fx(double x){double f = log(x) +2.0/9/(x - 1) - 4.697;//注意用2.0/9, 而不是2/9return f; //f(x) = 0中的f(x)函数形式}void main(){using namespace std;int N = 100,//迭代次数最大值k = 0;//迭代次数实际值double a = 1.04,//(a, b)为x取值区间,可以先用Excel试算法确定大概的范围b = 1.05,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;//控制台停留}

原创粉丝点击