软考初级程序员下午题

题目:阅读以下说明和流程图,将应该填入__处的字句填写完整。

[说明]

求连续函数f(x)的根(方程f(x)=0的解)的最简单方法是二分法。为此,首先需要在若干点上检查函数值的符号,如果发现f(a)与f(b)符号相反(a<b),则在区间(a,b)中必然存在f(x)的根。因为当x从a变到b时,连续函数的值将从正变到负(或从负变到正),必然要经过0。区间(a,b)就是根的初始范围。

取该区间的中点m,如果f(m)=0,则根就是m。如果f(a)与f(m)符号相反,则根一定在区间(a,m)中;如果f(m)与f(b)符号相反,则根一定在区间(m,b)中。因此,根的范围缩小了一半。

依此类推,将区间一半一半地分下去,当区间的长度很小(达到根的精度要求,例如0.001)时,或者当区间中点处的函数值几乎接近于0(即绝对值小于预先规定的微小量,例如0.001)时,近似计算就可以结束了。

以下流程图描述了用二分法近似计算区间(a,b)中f(x)的根的过程。

[流程图]

 

答案:(1)(a+b)/2,或其等价表示

(2)f(x),或f((a+b)/2),或其等价表示

(3)|y|,或abs(y)

其中y可由f(x)或f((a+b)/2)代替

(4)b

(5)a

本题描述了求函数根(0点)的二分法,题中还详细说明了二分法的原理。

假设a和b是区间两端点值的变量。流程图中,一开始就将函数两端的值分别送y1和y2,接着判断y1与y2符号是否相反(同号时该算法不能往下进行)。若相反,则应将a与b的中点值(a+b)/2送x。此时的函数值f(x),即f((a+b)/2)应送y。因此,第一空处应填“(a+b)/2”,第二空处可填“f(x)”或“f((a+b)/2)”。

接着需要判断新的函数值是否已经接近0,因此,第三空处应填“|y|”或“abs(y)”。

如果这个新函数值已经接近0,则可以直接输出变量x的值(刚取的中点值)作为函数的近似根;如果该函数值尚未接近0,则需要将该区间进行二分,即需要判断选用左半区间还是右半区间,继续进行迭代计算。

如果y*y1<0,则说明新的函数值与原区间的左端函数值符号相反,因此应取左半区间,否则应取右半区间。

若取左半区间,则原来的区间左端点a没有变化,左端点的函数值y1也没有变化,只要将中点值x送右端点变量b就可以。因此,第四空处填“b”。

若取右半区间,则区间的右端点没有变化,右端点的函数值y2也没有变化,这时需要将中点值x送左端点变量a。因此,第五空处应填“a”。由于每次迭代都需要判断y*y1的符号,因此y1的改变将影响下次迭代。因此,此时还需要将中点处的函数值y送y1,作为新区间的左端点函数值。

当新的区间(a,b)长度b-a很小时,迭代计算就可以结束,输出已经得到的近似根x就可以了。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值