tceic.com
简单学习网 让学习变简单
当前位置:首页 >> 数学 >>

【题4】一元三次方程求解


【题 4】一元三次方程求解
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数), 并约定该方程存在三个不同实根(根的范围在—100 至 100 之间),且根与根之差的绝对值≥1。 要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后 2 位。 提示:记方程 f(x)=0,若存在 2

个数 x1 和 x2,且 x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一 定有一个根。 输入:a,b,c,d 输出:三个实根(根与根之间留有空格) 输入输出样例 输入: 1 -5 -4 20 输出: -2.00 2.00 5.00

题解
这是一道有趣的解方程题。为了便于求解,将原方程 f(x)=ax3+bx2+cx+d=0 变换成 3 2 f’(x)=x +b’*x +c’*x+d’=0 的形式(其中 b’= ? ? ,c’= ? ? ,d’= ? ? ) ,f(x)和 f’(x)的根不变。设 x 的值域(-100 至 100 之间)中有 x, 2 2 2
? ? ? ? ? ? ?b ? ?c? ?d ?

其左右两边相距 0.0005 的地方有 x1 和 x2 两个数,即 x1=x-0.0005 x2=x+0.0005 x1 和 x2 间的距离(0.001)满足精度要求(精确到小数点后 2 位) 。若出现如图 10.1.2 所示的两种情况之一,则 确定 x 为 f’(x)=0 的根。

图 10.1.2 有两种方法计算 f’(x)=0 的根 x: 1.枚举法 根据根的值域和根与根之间的间距要求(≥1),我们不妨将根的值域扩大 100 倍(-10000≤x≤10000),

x ? 0.05 x ? 0.05 ,x2= 。若区间端点 100 100 x 的函数值 f’(x1)和 f’(x2)异号或者在区间端点 x1 的函数值 f’(x1)=0,则确定 为 f’(x)=0 的一个根。由此得 100
依次枚举该区间的每一个整数值 x,并在题目要求的精度内设定区间:x1= 出算法: 输入方程中各项的系数 a,b,c,d ; 3 2 b←b/a; c←c/a; d←d/a; a←1; {将方程变换为 x +b’*x +c’*x+d’=0 的形式} for x←-10000 to 10000 do {枚举当前根*100 的可能范围} begin x1←(x-0.05)/100; x2←(x+0.05)/100; {在题目要求的精度内设定区间} if (f(x1)*f(x2)<0) or (f(x1)=0){若在区间两端的函数值异号或在 x1 处的函数值为 0,则确定 x/100 为根} then write(x/100:0:2,’’);

end;{for} 其中函数 f(x)计算 x +b*x +c*x+d: function f(x:extended):extended; begin f←x*x*x+b*x*x+c*x+d; end;{f}
3 2

{计算 x +b*x +c*x+d}

3

2

1. 分治法 枚举根的值域中的每一个整数 x(-100≤x≤100)。 由于根与根之差的绝对值≥1, 因此设定搜索区间[x1, 2], x 其中 x1=x,x2=x+1。若 ⑴f’(x1)=0,则确定 x1 为 f’(x)的根; ⑵f’(x1)*f’(x2)>0,则确定根 x 不在区间[x1,x2]内,设定[x2,x2+1]为下一个搜索区间 ⑶f’(x1)*f’(x2)<0,则确定根 x 在区间[x1,x2]内。 问题是,如果确定根 x 在区间[x1,x2]内的话(f’(x1)*f’(x2)<0),如何在该区间找到根的确切位置。采用二分 法,将区间[x1,x2]分成左右两个子区间:左子区间[x1,x]和右子区间[x,x2](其中 x=
x1 ? x 2 ): 2

如果 f’(x1)*f’(x)≤0,则确定根在左区间[x1,x]内,将 x 设为该区间的右指针(x2=x),继续对左区间进 行对分;如果 f’(x1)*f’(x)>0,则确定根在右区间[x,x2]内,将 x 设为该区间的左指针(x1=x),继续对右区 间进行对分; 上述对分过程一直进行到区间的间距满足精度要求为止(x2-x1<0.001)。此时确定 x1 为 f’(x)的根。由此得 出算法: 输入方程中各项的系数 a,b,c,d ; 3 2 b←b/a; c←c/a; d←d/a;a←1; {将方程变换为 x +b’*x +c’*x+d’=0 的形式} for x←-100 to 100 do {枚举每一个可能的根} begin x1←x;x2←x+1; {确定根的可能区间} if f(x1)=0 {若 x1 为根,则输出} then write(x1:0:2,’ ’) else if (f(x1)*f(x2)<0) {若根在区间[x1,x2]中} then begin while x2-x1>=0.001 do {若区间[x1,x2]不满足精度要求,则循环} begin xx←(x2+x1)/2; {计算区间[x1,x2]的中间位置} if f(x1)*f(xx)<=0 {若根在左区间,则调整右指针} then x2←xx else x1←xx; {若根在右区间,则调整左指针} end;{while} write(x1:0:2,’ ’); {区间[x1,x2]满足精度要求,确定 x1 为根} end;{then} end;{for} 其中 f(x)的函数说明如枚举法所示。


推荐相关:

一元三次方程求根公式

浅谈一元三次方程求根公式—《数学文化》的读书报告 邹琼 机械设计制造及其自动化 2009-4 班,学号:2009302216 摘要:使方程两边左右相等的未知数叫做方程的解.一元...


一元三次方程与一元四次方程的根

3.6 一元三次方程与一元次方程的根 3.6.1 一元三次方程的根 一元二次...qz ? ?0 27 2 的两个根.解此方程得 q q2 p3 z?? ? ? 2 4 27 ?...


三次方程和四次方程求根公式

三次方程求根公式一元三次方程x 3+px+q=0 在复数集中的根是 x1,x2,x3...当(4)式中的 x 为原方程的根时,不论 y 取什 么值,(4)式都应成立。...


尔雅公开课数学文化答案

() 正确答案:× 数学文化(八) 1 在欧洲,三次方程求根公式是由哪个国家的...A、 元素数 B、元数 C、势 D、基 正确答案: C 4 关于“无限”的理论,...

网站首页 | 网站地图
All rights reserved Powered by 简单学习网 www.tceic.com
copyright ©right 2010-2021。
文档资料库内容来自网络,如有侵犯请联系客服。zhit325@126.com