计算方法与实习 方程求根(二分法)
数值分析实验报告——方程求根
《数值分析》实验报告实验一方程求根一、实验目的:掌握二分法、Newton法、不动点迭代法、弦截法求方程的根的各种计算方法、并实施程序调试和运行,学习应用这些算法于实际问题。
二、实验内容:二分法、Newton法、不动点迭代法、弦截法求方程的根、程序的调试和运行,给出实例的计算结果。
观察初值对收敛性的影响。
三、实验步骤:①、二分法:定义:对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。
实现方法:首先我们设一方程400*(x^4)-300*(x^3)+200*(x^2)-10*x-1=0,并求其在区间[0.1,1]上的根,误差限为e=10^-4。
PS:本方法应用的软件为matlab。
disp('二分法')a=0.1;b=1;tol=0.0001;n0=100;fa=400*(a.^4)-300*(a.^3)+200*(a.^2)-10*a-1;for i=1:n0 p=(a+b)/2;fp=400*(p.^4)-300*(p.^3)+200*(p.^2)-10*p-1;if fp==0||(abs((b-a)/2)<tol)disp('用二分法求得方程的根p=')disp(p)disp('二分迭代次数为:')disp(i)break;end;if fa*fp>0 a=p;else b=p;end;end;if i==n0&&~(fp==0||(abs((b-a)/2)<tol)) disp(n0) disp('次二分迭代后没有求出方程的根')end;程序调试:运行结果:用二分法求得方程的根p=0.1108二分迭代次数为:14②Newton法定义:取定初值x0,找到函数对应的点,然后通过该点作函数切线,交x轴,得到新的横坐标值,然后找函数对应的点,做切线,得到新的横坐标值,重复上述步骤,多次迭代,直到收敛到需要的精度。
第二章 方程求根
《 计 算 方 法 与 实 习 》
第2章 方程求根
•
《 计 算 方 法 与 实 习 》
对于一般形式的方程(2―1),首先我们 设法将其化为下列等价形式 • x=g(x) (2―7) • 然后按(2―7)构造迭代公式
•
xk 1 g ( xk ), k 0,1,2,
第2章 方程求根
•
《 计 算 方 法 与 实 习 》
设f(x)为定义在某区间上的连续函 数,方程(2―1)存在实根。虽然方程(2―1) 的根的分布范围一般比较复杂,但我们不 难将函数f(x)的定义域分成若干个只含一 个实根的区间。 • 例如考虑方程 • x2-2x-1=0 • 由图2.1所示,该方程的一个负实 根在-1和0之间,另一个正实根在2和3之间。
1 bk ak k (b a ) (2―2) 2 当k→∞时,区间(ak,bk)最终必收敛于一点,该点就
是所求方程(2―1)的根x。
第2章 方程求根
•
•
《 计 算 方 法 与 实 习 》
我们把每次二分后的有根区间(ak,bk) 1 的中点 x (a b )
k
2
k
k
作为所求根x的近似值,这样获得一个近似根的序列
中点 x n
x 2 1.25 x 3 1.375 x 4 1.313 x 5 1.344 x 6 1.360 x 7 1.368 x 8 1.364
x1 1.5
满足精度的根为x≈1.364
第2章 方程求根
如何确定 根的所在 区间?
《 计 算 方 法画图确定根的所在 与 实 习 》[0,1], [1.5, 2.5] and
方程求根计算方法课件及实验教学
通过实际动手操作,学生能更好地理解方程求根的概念和方法,提高问题解决能力。
拓展思考
鼓励学生思考方程求根方法的适用性和限制性,帮助他们在实际问题中做出明智的选择。
迭代改进
教师应根据学生的实际情况和反馈,不断改进教学方法和实验设计,以提高教学效果。
方程求根计算方法课件及 实验教学
欢迎来到我们的课件,探索方程求根的计算方法和实验教学。方程求根在数 学中的重要性不可忽视,让我们一起开始这次精彩的探索之旅吧!
方程求根的重要性
方程求根是解决实际问题的关键步骤。它们在物理、工程学和经济学等领域中起着重要作用,帮助我们 找到未知数的值,并解决复杂的数学问题。
方程求根的一般方法
1 代入法
将可能的解代入方程,验证是否满足等式。这是一种常用的解方程方法。
2 消元法
通过逐步消除未知数的系数,将方程转化为更简单的形式,以便求解。
3 图像法
将方程的图像与坐标轴交点作为解。这种方法通常用于一次和二次方程。
二分法求实根
二分法是一种迭代方法,通过不断缩小搜索范围,找到实根的近似值。它基于连续函数的介值定理,是问题转化为一系列有根的逼近问题,通过多次逼近来找到实根。这种方法适用于未知数只存在 于特定区间的情况。
牛顿迭代法求实根
牛顿迭代法使用泰勒级数的概念,通过迭代逼近不断靠近方程的根。它是一 种快速收敛的方法,特别适用于函数具有光滑性的情况。
割线法求实根
割线法与牛顿迭代法类似,但它使用两个近似值来逼近根,从而更具稳定性。 割线法是一种可靠的求解非线性方程的方法。
方程求根的程序实现
选择合适的编程语言
根据问题的复杂性和计算要求,选择适用于方程求根的编程语言,如Python或MATLAB。
计算方法实验:方程求根
实验一 方程求根一、实验目的用不同方法求任意实函数方程f (x )=0在自变量区间[a ,b]内或某一点附近的实根,并比较方法的优劣性。
二、实验方法 (1)二分法对方程f (x )=0在[a ,b]内求根。
将所给区间二等分,在二分点x=(b-a)/2处判断是否f (x )=0。
若是,则有根x=(b-a)/2;否则继续判断是否f(a)·f(b)<0,若是,则令b=x ,否则令a=x 。
重复此过程,直至求出方程f(x)=0在[a ,b]内的近似根为止。
(2)迭代法将方程f (x )=0等价变换为x=φ(x )的形式并建立相应的近似根为止。
(3)牛顿法设已知方程f (x )=0的一个近似根x 0,则函数f (x )在点x 0附近可用一阶泰勒多项式p 1(x )=f (x 0)+f ’(x 0)(x-x 0)来近似,因此方程f (x )=0可近似表示为f (x 0)+f ’(x 0)(x-x 0)=0。
设f ’(x 0)≠0,则 x=x 0-f (x 0)/’f (x 0)取x 作为原方程新的近似根x 1,然后再将x 1作为x 0代入上式。
迭代公式为 x k+1=x k -f (x k )/f ’(x k )三、实验内容1)在区间[0,1]内用二分法求方程e x +10x-2=0的近似根,要求误差不超过0.5×10-3。
2)取初值x0=0,用迭代公式x k+1=(2-e x k )/10,(k=0,1,2,…)求方程e x + 10x-2=0的近似根,要求误差不超过0.5×10-3。
3)取初值x 0=0用牛顿迭代法求方程e x + 10x-2=0的近似根,要求误差不超过0.5×10-3。
四、实验程序 (1)二分法(2)迭代法(3)牛顿法五、实验结果(仅供参考)(1)x11=0.09033 (2)x5=0.09052 (3)x2=0.09052六、结果分析由上面的对二分法、迭代法、牛顿法三种方法的三次实验结果,我们可以得出这样的结论:二分法要循环k=10次,迭代法要迭代k=4次,牛顿法要迭代k=2次才能达到精度为0.5×10-3的要求,而且方程e x+10x-2=0的精确解经计算,为0.0905250,由此可知,牛顿法和迭代法的精确度要优越于二分法。
方程求根的数值计算方法
代替牛顿法中的导数有
以下快速弦截法迭代公式:
xk +1 = xk − f ( xk ) − f ( xk −1 ) f ( xk )
( xk − xk −1 )
三、方程求根的弦截法
•弦 截 法 求 根 的 基 本 步 骤 : 1 设 定 初 值 x 0 , x1 ; 2 求 出 f ( x 0 ), f ( x1 ); 3 利 用 弦 截 法 求 根 公 式 求 近 似 根 x; x = x1 − f ( x1 ) × ( x1 − x 0 ) /( f ( x1 ) − f ( x 0 )) 4 将 x1作 为 新 的 初 值 x 0, 新 的 近 似 根 x 作 为 新 的 初 值 x1 , 再 回 到 2;...如 此 循 环 往 复 直 到 x − x1 < ε & & f ( x ) < ε 为 止 。 •注 意 : 对 于 弦 截 法 也 有 可 能 陷 入 死 循 环 。 解 决 的办法与牛顿法一样。
*
*
0
*
k +1
k
*
二、方程求根的牛顿法 对于方程 f ( x) = 0 ,设已知它的近似根 为 xk ,则函数 f ( x) 在点 xk 附近可用一阶 泰勒多项式 p( x) = f ( xk ) + f ′( xk )( x − xk ) 来近似, 若取 p( x) =0 的根作为 f ( x ) = 0 新的近似根, 记为 ,则有如下著名的牛顿公式 牛顿公式: x k +1 牛顿公式 相应的迭代函数是:
迭代法的设计思想
– 迭代法是一种逐次逼近法,这种方法使用某个 迭代法是一种逐次逼近法, 固定公式-即迭代公式反复校正根的近似值, 固定公式-即迭代公式反复校正根的近似值, 使之逐步精确化,直至满足精度要求的结果。 使之逐步精确化,直至满足精度要求的结果。 – 迭代法的求根过程分成两步,第一步先提供根 迭代法的求根过程分成两步, 的某个猜测值,即所谓迭代初值, 的某个猜测值,即所谓迭代初值,然后将迭代 初值逐步加工成满足精度要求的根。 初值逐步加工成满足精度要求的根。
数学实验项目-使用二分法对非线性方程求根
end 程序输出
n=01,当前有根区间是[0.000000,0.500000],近似根为 0.500000,wucha=0.500000 n=02,当前有根区间是[0.250000,0.500000],近似根为 0.250000,wucha=0.250000 n=03,当前有根区间是[0.250000,0.375000],近似根为 0.375000,wucha=0.125000 n=04,当前有根区间是[0.250000,0.312500],近似根为 0.312500,wucha=0.062500 n=05,当前有根区间是[0.250000,0.281250],近似根为 0.281250,wucha=0.031250 n=06,当前有根区间是[0.265625,0.281250],近似根为 0.265625,wucha=0.015625 n=07,当前有根区间是[0.265625,0.273438],近似根为 0.273438,wucha=0.007813 n=08,当前有根区间是[0.265625,0.269531],近似根为 0.269531,wucha=0.003906 n=09,当前有根区间是[0.265625,0.267578],近似根为 0.267578,wucha=0.001953 n=10,当前有根区间是[0.265625,0.266602],近似根为 0.266602,wucha=0.000977 n=11,当前有根区间是[0.266113,0.266602],近似根为 0.266113,wucha=0.000488 n=12,当前有根区间是[0.266113,0.266357],近似根为 0.266357,wucha=0.000244 n=13,当前有根区间是[0.266235,0.266357],近似根为 0.266235,wucha=0.000122 n=14,当前有根区间是[0.266235,0.266296],近似根为 0.266296,wucha=0.000061 n=15,当前有根区间是[0.266235,0.266266],近似根为 0.266266,wucha=0.000031 n=16,当前有根区间是[0.266235,0.266251],近似根为 0.266251,wucha=0.000015 n=17,当前有根区间是[0.266243,0.266251],近似根为 0.266243,wucha=0.000008 n=18,当前有根区间是[0.266247,0.266251],近似根为 0.266247,wucha=0.000004 n=19,当前有根区间是[0.266247,0.266249],近似根为 0.266249,wucha=0.000002 n=20,当前有根区间是[0.266248,0.266249],近似根为 0.266248,wucha=0.000001
二分法求方程的根
用二分法求方程 f(x)=0的根 x*的近似值 xk 的步骤
步骤1.若对于a<b, 有f(a)f(b)<0, 则在(a, b)内f(x)=0至少有一个根.
步骤2. 取a,
b的中点
x1
a
2
b
,
计算
f
x1
步骤3. 若f x1 0,则x1是f(x)=0的根, 停止计算,
运行后输出结果x*=x1.
若f a f x1 0,则在(a, x1 )内f(x)=0至少有一个根. 取a1=a, b1=x1; 若f a f x1 0, 则取a1=x1, b1=b;
用二分法求方程 f(x)=0的根 x*的近似值 xk 的步骤
步骤1.若对于a<b, 有f(a)f(b)<0, 则在(a, b)内f(x)=0至少有一个根.
for k=1: max1+1 a;ya=fun(a); b;yb=fun(b); x=(a+b)/2; yx=fun(x); wuca=abs(b-a)/2; k=k-1; [k,a,b,x,wuca,ya,yb,yx] if yx==0 a=x; b=x; elseif yb*yx>0 b=x;yb=yx; else a=x; ya=yx; end if b-a< abtol , return, end end k=max1; x; wuca; yx=fun(x);
步骤2.取a, b的中点
x1
ab, 2
计算
f
x1
步骤3. 若 f x1 0, 则x1是f(x)=0的根, 停止计算,
运行后输出结果x*=x1.
若 f a f x1 0, 则在(a, x1 )内f(x)=0至少有一个根. 取a1=a, b1=x1;
二分法、试位法,牛顿法求方程的根
二分法、试位法,牛顿法求方程的根二分法、试位法和牛顿法是求解方程根的常用数值方法。
一、二分法二分法是一种简单而有效的数值方法,它通过不断将区间一分为二来逼近方程的根。
它的基本思想是,如果在一个闭区间[a, b]内,函数f(x)在a和b两点的函数值f(a)和f(b)异号,那么函数在[a, b]内至少存在一个根。
算法步骤如下:1.初始化区间[a, b]和误差容限ε。
2.计算区间中点c=(a+b)/2。
3.如果f(c)=0或者(b-a)/2<ε,则停止迭代,c即为近似的根。
4.如果f(c)与f(a)异号,则根在[a, c]内,将b=c,否则根在[c,b]内,将a=c。
5.回到步骤2。
二、试位法试位法也是一种通过逼近来求解方程根的方法。
与二分法不同,试位法通过计算函数在两个点之间的插值点来逼近根。
它的基本思想是,如果在一个闭区间[a, b]内,函数f(x)在两个点a和b之间有一个变号点c,则函数在[a, b]内至少存在一个根。
算法步骤如下:1.初始化区间[a, b]和误差容限ε。
2.计算函数在区间[a, b]上的插值点c。
3.如果f(c)=0或者(b-a)/2<ε,则停止迭代,c即为近似的根。
4.如果f(c)与f(a)异号,则根在[a, c]内,将b=c,否则根在[c,b]内,将a=c。
5.回到步骤2。
三、牛顿法牛顿法又称为牛顿-拉弗森方法,它是一种通过不断迭代逼近根的方法。
牛顿法基于函数的局部线性近似,通过求导数来计算函数在当前近似根附近的切线与x轴的交点作为新的近似根。
算法步骤如下:1.初始化初始近似根x0和误差容限ε。
2.计算函数在当前近似根x的导数f'(x)。
3.如果f'(x)为0,则停止迭代,x即为近似的根。
4.计算函数在当前近似根x的函数值f(x)。
5.如果|f(x)|<ε,则停止迭代,x即为近似的根。
6.计算新的近似根x=x-f(x)/f'(x)。
方程求根二分法
实验项目 非线性方程求解方法 理论内容 非线性方程求根的二分法 实验室名称 文理馆 203
实验日期 2016.09.02 授课日期 2016.09.02 微机编号 E1
实验目的及要求:
1、 使学生掌握非线性方程求解二分法的基本理论。 2、使学生借助于计算机这一高效计算工具和本课程中的基本数值计算方法
}
3
public class Demo02 { public static void main(String[] args) { double temp = 1.0; double y = (double) 1.0; double a = 1; double b = 2; for (int i = 2; i < 300; i++) { y = (a + b) / ((double) 2.0); temp = Math.sin(y)-y*y/2; System.out.print(a + "|"); System.out.print(y + "|"); System.out.print(b + "\n"); if (temp < 0) { b = y; } else { a = y; } if (b - a <= 5*Math.pow(0.1, 6)) { System.out.println(y); break; } } }
解,虽然我们得到了最终结果但是这种方法所体现时间复杂度非常的高,计算量庞大,在计算误差
精确度位数比较高时,我们需对二分法进行改进。
实验报告评分标准
评分项目
满分 得分
评分项目
实验步骤及程序 10
计算方法与实习第五版-习题答案
方程求根
习题2——3:用简单迭代法求方程ex-4x=0的 根,并验证收敛性,精确到4位有效数字。
解:2.在区间[0,1]上构造收敛的公式并计算
x=ln(4x)= φ2(x) (1)两种等价形式: x=ex/4=φ1(x); xk (2) x=ex/4=φ1(x): e |φ1’(x)|=ex/4<1 (收敛), 迭代公式为: xk 1
(3) x=ln(4x)= φ2(x): |φ2’(x)|=1/x<1 (收敛),
迭代公式为:
xk 1 ln(4xk )
x3=2.137 x8=2.153
(4) 计算:x0=2 x4=2.146 x5=2.150
x1=2.079 x2=2.118 x6=2.152 x7=2.153 ∴ x ≈ 2.153
绪论
习题1——1:指出下列各数有几位有效数字
4.8675 4.08675 0.08675 96.4730 96*105 5 6 4 6 2
0.00096
2
绪论
习题1——2:对下列各数写出具有5位有效数 字的近似值
3.25894 3.25896 4.382000 0.000789247
3.2589
1.《计算方法》课程主要研究以计算 机为工具的 数值 分析方法 ,并评价 该算法的计算误差。 2.近似值作四则运算后的绝对误差限 公式为 ( x1 x2 ) ( x1 ) ( x2 ) ,近似值 1.0341的相对误差限不大于 1 10 2 , 则它至少有三位有效数字。 4
2 3
| x 0 1.5
=0.4557 <1(收敛) ∴2比1收敛快
∵ | 2’(x)|<|1’(x)|
(完整word版)数值分析报告-二分法和牛顿法方程求根(word文档良心出品)
《数值分析》实验报告一**: **学号: PB********实验一一、实验名称方程求根二、实验目的与要求:通过对二分法和牛顿法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;比较二者的计算速度和计算精度。
三、实验内容:通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点 。
(一)二分法算法:给定区间[a,b],并设f (a )与f (b )符号相反,取δ为根的容许误差,ε为值的容许误差。
(1)令c=(a+b)/2(2)如果(c-a)< δ或)(c f <ε,则输出c ,结束;否则执行(3)(3)如果f(a)f(c)<0,则令)()(,c f b f c b ←←;否则,则令)()(,c f a f c a ←←,重复(1),(2),(3)。
(二)牛顿迭代法:给定初值0x ,ε为根的容许误差,η为)(x f 的容许误差,N 为迭代次数的容许值。
(1)如果)(x f <η或迭代次数大于N ,则算法结束;否则执行(2)。
(2)计算)('/)(0001x f x f x x -=(3)若 < 或 < ,则输出 ,程序结束;否则执行(4)。
(4)令 = ,转向(1)。
四、实验题目与程序设计1、二分法3.1.1、用二分法求方程a. f(x)= x x tan 1--在区间[0,π/2]上的根,c. f(x)=6cos 22-++-x e x x 在区间[1,3]上的根。
源程序:3.1.1.a#include<stdio.h>#include<math.h>void main(){float a,b;double c,y,z;printf("plese input two number a and b:\n");scanf("%f%f",&a,&b);c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);while(fabs(b-a)>0.00001|| fabs(y)>0.00001){z=1/a-tan(a);if(z*y<0)b=c;elsea=c;c=(a+b)/2;y=1/c-tan(c);printf("a=%f,b=%f,b-a=%f,c=%f,f(c)=%f\n",a,b,b-a,c,y);}x x 01-ε)(1x f ηx 1x 0x 1}输入0 1.5707563( /2~1.5705563)得到下表:由上表可以看出刚开始时f(c)取值幅度很大,但是经过一段历程之后,幅度变得平缓甚至基本接近与零,我们认为,x=0.8603是方程的根,结果与实际想要得到的值相当接近。
数值分析2-方程求根二分法迭代法
( x) ( x 2 k 3)
1 2
'( x) x
| '( x) | 2 , 当 x [2, 4] 时,
迭代发散.
例:利用迭代法求
( x)
1 , 2 ( x 1)
f ( x) x( x 1)2 1 0的根,区间为[0,1].
2 ( x 1)3
证明:记
g ( x) = x -φ ( x)
∵φ(x) ∈[a, b],
∴
g (a) = a -φ (a)≤0
,
g (b) = b -φ (b)≥0
∴在[a,b]内至少有一个根(端点处也可以) 又∵
g '( x) = 1-φ '( x)=1-L>0
, ∴单调。
(2)对任意 x0 ∈[a,b] 通过φ(x)迭代,结果收敛,有
2.3迭代法(Iteration)
常用的数值求根方法,包括方程组求解,主要考虑 是否收敛,收敛的快慢问题。
思路: f ( x) 0
x1 ( x0 ) x2 ( x1 )
x ( x)
给一初值 x ,通过迭代产生 xk ,
……
xk 1 ( xk )
几何意义如右图:
∴可通过误差公式反算出迭代次数k。
例:求 f ( x) x3 x2 2x 1 0 在[0,1]内的根,要求 达到3为有效数字。 已知:f (0) 1 0 , f (1) 1 0 ;
1 7 f '( x) 3x 2 2 x 2 3( x ) 2 0 3 3
| '( x ) | 1,
1 (1 '( x )) 0. 2
实验一 用二分法求方程的根
实验一 二分法求方程的根
一、实验题目
用二分法求方程的根
二、实验目的和意义
1、学习二分法求方程根的理论
2、利用该理论能够构造求解该类典型问题数值解的算
3、编程上机实现算法,在上机过程中加强对算法的理
4、应用算法去解决具体的非线性方程的求根问题
5、通过编程练习提高学生的程序设计能力。
三、实验要求
利用C 编写二分法的程序并利用编好的程序求解非线性方程f(x)=0在区间[a,b]上的所有单重实根。
使误差不超过规定的要求。
1、根据算法理论编程,从a 开始以—个基本步长h 分隔,若一步前后的函数值yo 与y1等于零,则此小区问中必有一个实根。
把这个根的小区间记为[a,b],计算f((a+b)/2)且比较y0,也能选出一个函数值异号的区间[a2,b2]。
再计算f((a2+b2)/2)且与y0比较,又能选出一个函数值异号的区间[a3,b3]。
重复上述二分法区间的过程,直到区间的最小长度小于给定的精度要求,则认为求得一个根;求出一个根后继续分隔,重复上述过程,直到求出[a,b]中全部实根为止。
2、利用已编程序解决实际问题
四、实验问题提出
对于给定的方程02010)(3=-+=x x x f ,试用二分法求在区间)2,1(之间的根,要求精度610-=ε。
五、实验源代码
六、实验结果
Root=
七、实验结果分析
1、算法简单直观,收敛性总能得到保证
2、不能求重根,计算速度较慢。
二分法求方程的实根
二分法求方程的实根一:实验目的 通过编程实现二分法,并利用所编程序求函数x e x y --=3在(0,1)的近似解,然后比较和计算器所求的结果,从理性和实践上认识两种计算方法。
二:基本原理连续函数的零点定理1、假定f(x)在区间(x ,y )上连续 , 先找到a 、b 属于区间(x ,y ),使f(a),f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2]。
2、假设f(a)<0,f(b)>0,a<b①令a a =1,()11121,b a x b b +==,如果f(x)=0,该点就是零点。
如果0)()(1<x f a f ,则新的有根区间为[][]x a b a ,,122=;否则[][]122,,b x b a =。
此时有[][]2211,,b a b a ⊃,且()112221a b a b -=-。
对区间[]22,b a 重复上述做法多步有[][][][] n n b a b a b a b a ,,,,332211⊃⊃⊃且()a b a b n n n -=--121(式1)记*x 为0)(=x f 的根,我们有[]n n b a x ,*∈,即),3,2,1(* =≤≤n b x a n n 由(式1)及夹逼定理有:*lim lim x b a n n n n ==∞→∞→,实际计算时,当ε<-)(n n a b 时,取)(21*n n b a x +≈作为所求根近似值。
三:实验步骤1:建立如下函数文件f.m :Function f=f(x)f=x e x --32:通过如下框图编写二分法程序:erfen.m开始输入f,a,b,delta计算fa,fb,fa*fbfa*fb>0计算最多二分次数max1计算c=(a+b)/2, fcfc=0fb*fc>0b=c,a=a a=c,b=b|a-b|<=0.0005结束是否是否是否是否(3)、在Matlab 命令窗口键入:[c,err,yc]=bisect(‘f ’,0,1,0.005)(4)、得出结果,并与计算器所得结果比较分析误差。
实验7二分法求方程的根
实验7二分法求方程的根实验7 二分法求方程的根一、问题:求324100x x +-=于区间[1,2]内的一个实根,且要求精确到0.001 二、算法:第一步:计算);(),(21b f y a f y ←←第二步:计算)(),(5.0000x f y b a x ←+←,若00ε<="" ,则输出0x="">否则转第三步; 第三步:若010<="" ,则置;,020y="">第四步; 第四步:若1ε>-a b 则转第二步;否则,输出0x 结束.三、练习编写程序或函数实现上以上区间的近似解,要求记录迭代次数。
函数或程序为:结果为:迭代次数为:四、逐步搜索法求方程根的存在区间在给定的区间[,]a b上判定根的大致分布,从区间左端点a出发,按某个预定的步长h一步一步地向右跨,每跨一步进行一次根的搜索,并记录所有的根的存在区间。
用你编写的程序搜索问题中[0,5]的根的存在区间,步长要求为0.1 h函数为:根的存在区间为:五、综合练习(选做)用逐步搜索法找到根的存在区间,并用二分法求出在该区间上方程根的近似解。
附:分组名单星期二下午5-6节第1组组长:陈絮莹缪妃何贵堂刘钰马倩第2组组长:李杰玉黎筱惠雷霞肖娴林碧珍朱元正第3组组长:陈静苏小丽李郑何淑楠田冬秀曾敬军第4组组长:杨欣王雪梅徐莉萍石小芳雷敏唐嘉第5组组长:杨佳悦郭滢李媛媛何可陈思露第6组组长:王钰琪寇玠杨丹熊晨曦周丹第7组组长:姚瑶高倩倩金杨周海宁杨琴第8组组长:雷芳陈艳王玉娇余非张雪王海燕星期三下午5-6节第9组组长:刘超慧王玉利秦佳丽张青梅廖婷程思远第10组组长:杨琴冯康欣黄宜纯田晓东郑美艳第11组组长:黄倩肖雪梅舒玉秀杨阳黄倩宋亚超第12组组长:乔欢曹人月万袁源刘学勤师小诚沈金勇第13组组长:张全兴程德超冯啸魏丹李茜罗凤菊第14组组长:张洋何婷婷刘云丹彭英萍马静第15组组长:杨丽王书琪袁杰宋慧玲杨璐萍李琳玲星期三下午7-8节第16组组长:李欢蒋书丽康斯梦王菊花李芝琴第17组组长:杨梅郑雨来李维刘玉兰羊玲第18组组长:左艳君古月黄文凤杨娟胡洲黄川第19组组长:吴星谭婷张欢向巧钱强陈虹弟第20组组长:曾大超胡敏马树述罗玉婷第21组组长:石章波拉吉石明岳榆川金小刚张泽松第22组组长:贾孙鹏袁鹏颜冬芹陈诚张博第23组组长:李自强黄金辉彭琦岳琪李宾李闯第24组组长:王文媛林小渝刘燕严英何思敏穆芦芸。
计算方法用二分法求方程的实根
1 求下列方程的所有实根。
534221.204508967.8701231924.7590738320.6246081017.082712590x x x x x +--+-=1.1二分法计算该题1.1.1 确定区间[a,b].(1)用excel 进行计算出区间:最终确定区间范围是[1,2](2)作图法画出函数y=f(x)的大概图象,观察曲线y=f(x)与x 轴交点的大致位置,从而确定隔根区间。
上图是大概的图形,由此确定区间为[1,2]经计算f(a)和f(b)得f(a)*f(b)<0,所以确定方程的根在[1,2]之间。
1.1.2算法过程设函数f (x )在区间[1,2]上连续,且f(1)·f(2)<0根据连续函数的性质可知f(x)=0在[1,2]内一定有实根,并称[1,2]为方程f(x)=0的有根区间。
(1)取(a, b)的()k f x 中点,计算11()02a b f +=的值.若()02a b f +<,则2a b +为方程f(x)的根,计算结束.若()02a b f +¹,如果()2a b f +与f(a)同号,则记21b b =,1b b =如果11()2a b f +与f(a)异号,则记1a a =, 12a b b +=;(a1, b1)为新的有根区间, (a1,b1) (a,b)且进行下一步。
(2)取(a1, b1)的中点,计算112a b +的值.若11()02a b f +¹,则112a b +为方程f(x)=0的根,计算结束. 若11()02a b f +¹,如果11()2a b f +与f(a1)同号,则记112()2a b b f +=;21a a =;如果11()2a b f +与f(a1)异号,则记21a a =,112()2a b b f +=这时(a2, b2)为新的有根区间,(a2,b2)⊂ (a1,b1)⊂(a,b)且进行下一步。
计算方法中用二分法程序求方程的实根
1求下列方程的所有实根。
5342+--+-= x x x x x21.204508967.8701231924.7590738320.6246081017.082712590用二分法程序计算该题(1)该方程区间以确定为[1,2](2) 用程序中的x=(a+b)/2求区间(a,b)的中点x.(3) 判断根在那个区间(a) 若f(a)*f(x)<0,则根在区间的左半部分,b=x;(b) 若f(a)*f(x)>0,则根在区间的右半部分,a=x;( b) fabs(b-a)>eps;判断结果是否达到精度要求,若没有达到,则返回前面继续执行;若达到精度,则取最后的小区间中点作为根的近似值x=(a+b)/2;(4)运行结果#include<stdio.h>#include <math.h>#define f(x) (pow(x,5)+21.20450896*pow(x,3)-7.87012319*pow(x,4)-24.75907383*x*x+20.6246 0810*x-17.08271259)void main(){ float a,b,x,eps;int k=0;printf("intput eps\n");/* 容许误差*/scanf("%f",&eps);printf("a,b=\n");for(;;){scanf("%f, %f",&a ,&b);if(f(a)*f(b)>=0) /* 判断是否符合二分法使用的条件*/printf("二分法不可使用,请重新输入:\n");else break;}do{ x=(a+b)/2;k++;if(f(a)*f(x)<0) /* 如果f(a)*f(x)<0,则根在区间的左半部分*/b=x;else if(f(a)*f(x)>0) /* 否则根在区间的右半部分*/a=x;else break;}while(fabs(b-a)>eps);/*判断是否达到精度要求,若没有达到,继续循环*/ x=(a+b)/2; /* 取最后的小区间中点作为根的近似值*/printf("\n The root is x=%f, k=%d\n",x,k);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
班级:学号:姓名:百事尢可乐
一、目的和要求
1)通过对二分法的编程练习,掌握方程求根的二分法的算法;
2)通过对二分法的上机运算,进一步体会二分法的特点。
二、实习内容
1)二分法的编程实现。
2)进行有根区间和误差限的比较和讨论。
三、算法
流程图:
1)准备:计算f(x)在有根区间[a, b]端点处的值f(a), f(b)。
2)二分:计算f(x)在区间中点c= 处的函数值f(c)。
[a, c]内,以c代替b;
•若f(c)与f(a)同号,则根位于区间[c, b]内,以c代替a;
四、实验步骤
1)完成二分法的程序设计及录入;
2)完成程序的编译和链接,并进行修改;
3)用书上的例子对程序进行验证,并进行修改;
4)对比估算次数与实际二分次数;
5)输入不同的区间初值a, b,查看二分次数的变化;
6)输入不同的误差限,查看二分次数的变化;
7)完成实验报告。
五、实验结果
1.经编译、链接及例子验证结果正确的源程序:
#include<stdio.h>
#include<math.h>
#define delta 1e-6
int main(void)
{
int i=0;
float a,b,c,fa,fb,fc,fab,ESP;
printf("输入ESP:");
scanf("%f",&ESP);
printf("输入a,b:");
scanf("%f,%f", &a, &b);
fa=a*a*a+a*a-3*a-3;
fb=b*b*b+b*b-3*b-3;
fab=(fa)*(fb);
if(fab>0)
printf("无根");
else
{
while(1)
{
c=(a+b)/2.0;i++;
fc=c*c*c+c*c-3*c-3;
if((fa)*(fc)<0)
{
b = c;
fb = fc;
}
else
{
a = c;
fa = fc;
}
if(fabs(fc)<delta,b-a<ESP)
{
printf("最后答案%f\n",c);break;
}
}
printf("二分次数%d\n",i);
}
return(0);
}
2.实例验证结果:
1)方程:f(x)=x3+x2-3x-3=0
2)输入初始参数:a=1, b=2,EPS=5e-6
3)结果输出:
最后答案1.732052
二分次数18
3.改变a, b的值为:a=0, b=2, EPS不变,仍为5e-6,其结果为:
最后答案1.732052
二分次数19
4.改变EPS的值为:EPS=5e-4,a, b不变,仍为a=1, b=2,其结果为:
最后答案1.731934
二分次数11
六、分析和讨论
1.估算次数与实际二分次数的分析和讨论
当输入a1,b=2,esp=5e-6时,估计二分7次即可到达精度,实际二分18次。