1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,6.2 类与对象作业,(H6_1),割线法方程求根,割线法原理:,设在某个区间非线性函数f(x)有直至二阶连续导数,且不等于0,则区间内选取初值x,k-1,x,k,利用牛顿迭代思想可求方程f(x)=0根。,第1页,第1页,迭代公式:,x,k+1,=x,k,+(x,k-1,-x,k,)/(f(x,k,)-f(x,k-1,)*f(x,k,),误差为:,x=(x,k-1,-x,k,)/(f(x,k,)-f(x,k-1,)*f(x,k,),代换规律:,1.首先用迭代公式得出x,k+1,,f(x,k+1,)。,2.当
2、x 或f(x,k+1,)=0 则结束。,3.不然,用(x,k,f(x,k,)代替(x,k-1,f(x,k-1,),(x,k+1,f(x,k+1,)代替(x,k,f(x,k,),继续迭代。,第2页,第2页,设计并测试一个方程类Function和割线法求方程根类Secant。要求:,Function类体外定义名为Fun组员函数,用于返回待求解方程式值;,定义Secant类数据组员:初值Var1,Var2,及函数值LowVal,UpVal,绝对值后者大,误差精度ErrPre,方程根Solut,预设迭代次数MaxIt,实际迭代次数RealIt;,定义Secant数组组员:,Result230,存储迭代
3、中间结果一行存函数值,一行存解;,割线法方程求根,6.2 类与对象作业,(,H6_1),第3页,第3页,4.定义SecantFunction类对象组员Fn;,5.定义Secant组员函数,AdjSequ,(),无参,用于依据给定初值Var1,Var2传值,比较LowVal,UpVal绝对值,调整LowVal,UpVal,Var1,Var2顺序;,定义Secant组员函数,Solve(),无参数,用于求根,并将中间结果存储在Result数组中,当超出设定最大迭代次数时,则求解失败,返回false;,割线法方程求根,6.2 类与对象作业,(,H6_1),第4页,第4页,7.定义Secant结构函数
4、Secant(),有参数:,(1)完毕变量MaxIt,Var1,Var2,ErrPre初始化;,(2)完毕初值LowVal,UpVal,Var1,Var2顺序调整;,(3)完毕求根。,8.定义Secant组员函数print(),无参数,完毕:,(1)若求解过程是失败,给出提醒;,(2)依据详细迭代次数,从数组Result230提取,迭代中间结果-函数值与解,并显示;,(3)打印满足误差精度或函数值为零要求根;,割线法方程求根,6.2 类与对象作业,(,H6_1),第5页,第5页,测试:定义一个Secant对象,求解方程X,3,+X,2,-3X-3近似实根,给定初值3,-2(而不是-2,3),误差精度为1e-5,最大迭代次数设为30,显示迭代过程和方程根。,割线法方程求根,6.2 类与对象作业,(,H6_1),第6页,第6页,参考结果:,割线法求解过程迭代次数、方程根与误差改变:,1-1.8-4.8,2-1.76190.0380952,3-1.7350.0269051,4-1.732190.00280968,5-1.732050.000138526,6-1.732056.76125e-07,方程近似根:-1.73205,割线法方程求根,6.2 类与对象作业,(,H6_1),第7页,第7页,