计算方法第二章方程求根上机报告

合集下载

数值计算方法方程求根

数值计算方法方程求根

数值计算⽅法⽅程求根数值计算⽅法实验报告实验内容:⽅程求根实验室:专业班级:学号:姓名:2.⽤MATBAB软件,⽤⼆分法求⽅程f(x)=x^3+4*x^2-10=0在区间[1,2]内根的近似值,为使误差不超过10^-5时所需要的⼆分次数。

function bisection_time(tolerance)a=1;b=2;k=0;while(abs(b-a)>tolerance)c=(a+b)/2;fa=a^3+4*a^2-10;fb=b^3+4*b^2-10;fc=c^3+4*c^2-10;if((fa==0)|(fc==0))disp(k);elseif(fa*fc<0)b=c;k=k+1;elseif(fc*fb<0)a=c;k=k+1;elseif(fb==0)disp(k);endendsoluntion=(a+b)/2;disp(soluntion);disp(k);运⾏结果1.36523176.取x0=1.5,⽤⽜顿迭代法求f(x)=x^3+4*x^2-10=0的跟的近似值function new(tolerance)x0=1.5;k=0;a=x0^3+4*x0^2-10;b=3*x0^2+8*x0;x1=x0-a/b;while(abs(x0-x1)>tolerance)x0=x1;k=k+1;a=x0^3+4*x0^2-10;b=3*x0^2+8*x0;x1=x0-a/b;enddisp(x1);disp(k);运⾏结果1.3652338.弦割法求⽅程f(x)=x^3-3*x^2-x+9=0在区间[-2,-1]内的⼀个实根近似值Xk,使|f(x) |<=10^-5. function xuange(k)x0=-2;x1=-1;t=0;a=x1^3-3*x1^2-x1+9;b=x0^3-3*x0^2-x0+9;x2=x1-a*(x1-x0)/(a-b);while(abs(x1-x0)>k)x0=x1;x1=x2;a=x1^3-3*x1^2-x1+9;b=x0^3-3*x0^2-x0+9;x2=x1-a*(x1-x0)/(a-b);t=t+1;enddisp(x1);disp(t)运⾏结果-1.52510269.⽤艾特肯算法求⽅程f (x )=x^3+4*x^2+10=0在区间[1,2]内的根的近似值(取X0=1.5,g (x )=410x ,精确到|Xk+1-Xk|<=10^-5,并与第2,3,6题的相应结果进⾏⽐较。

数值分析实验报告——方程求根

数值分析实验报告——方程求根

《数值分析》实验报告实验一方程求根一、实验目的:掌握二分法、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轴,得到新的横坐标值,然后找函数对应的点,做切线,得到新的横坐标值,重复上述步骤,多次迭代,直到收敛到需要的精度。

数值方法方程求根实验报告

数值方法方程求根实验报告

(1)对原方程变形为x=arctanX+π,令f(x)=x-arctanx-π,f ’(x)=221x x+ (2)选定初值x 0=4.5,构造牛顿迭代公式2211arctan x x x x x x n n +---=+π(3)在VC++6.0中编写程序如下并运行: #include<stdio.h> #include<math.h> #define ESP 1e-6 #define PI 3.1415926 void main() {double x0,x1,f,f1,a,b; printf("INPUT x0:"); scanf("%lf",&x0); a=floor(x0/PI); do {f=x0-atan(x0)-a*PI; f1=x0*x0/(1+x0*x0); x1=x0-f/f1; b=x0; x0=x1; }while(fabs(x0-b)<=ESP); printf("%f\n",x0); }2实验步骤1.1a)程序编译出错:b)找到出错位置:c)修改为“x1=0.2-0.1*exp(x0)”后调试运行为:调试成功,运行程序得出结果。

1.2a)编译运行出错:b)找到出错位置c)修改为“f=x0-atan(x0)-a*PI;”,调试运行。

运行得出结果。

3实验结论(数据及分析结果)(1)对于方程e x+10x-2=0,输入初值为0时结果如下:因为x∈(0.1),φ’(x)=-0.1e x<1,所以该迭代格式收敛。

(2)对于方程x=tgx,输入初值4.5时运行结果如下:当输入x为100时:牛顿迭代是局部收敛的,故迭代在方程的根的附近是收敛的,所以初值的选择对牛顿迭代的收敛性有影响,若初值选在根的附近则迭代收敛,若初值选择离根远则发散。

4实验小结(收获体会)通过这次实验,基本掌握了利用C语言解决数值计算中的方程求根问题,从最初的编写算法到调试再到得出结果,虽然有困难但是通过翻阅资料,查工具书等,最终顺利完成了任务,同时也加深了对于迭代法的认识。

方程求根计算方法课件及实验教学

方程求根计算方法课件及实验教学
实践是关键
通过实际动手操作,学生能更好地理解方程求根的概念和方法,提高问题解决能力。
拓展思考
鼓励学生思考方程求根方法的适用性和限制性,帮助他们在实际问题中做出明智的选择。
迭代改进
教师应根据学生的实际情况和反馈,不断改进教学方法和实验设计,以提高教学效果。
方程求根计算方法课件及 实验教学
欢迎来到我们的课件,探索方程求根的计算方法和实验教学。方程求根在数 学中的重要性不可忽视,让我们一起开始这次精彩的探索之旅吧!
方程求根的重要性
方程求根是解决实际问题的关键步骤。它们在物理、工程学和经济学等领域中起着重要作用,帮助我们 找到未知数的值,并解决复杂的数学问题。
方程求根的一般方法
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(x)<0,若是,则令b=x,否则令a=x。

重复此过程直至求出方程f(x)=0在[a,b]中的近似根为止。

(2)迭代法将方程f(x)=0等价变换为x=h(x)形式,并建立相应的迭代公式Xk+1=h(Xk)。

(3)牛顿法若已知方程f(X)=0的一个近似根X0,则函数f(X)在点X0附近可用一阶泰勒多项式P1= f (X0) + f’ (X0) (X-X0)来近似,因此方程f(X)=0可近似表示为f(X0)+ f’ (X0) (X-X0)=0.设f’ (X0)≠0,则X= X0- f (X0)/ f’ (X0),取X作为原方程新的近似根X1,然后将X1作为X0带入上式,迭代公示为:X k+1=X k - f (X k)/ f’ (X k)。

三、实验内容在区间[0,1]上用二分法求方程的近似根,要求误差不超过0.5×10^3。

取初值X0=0,用迭代公式X k+1=(2-e^k)/10,(k=0,1,2,…)求方程e^x+10x-2=0的近似根。

要求误差不超过0.5×10^3。

取初值X0=0,用牛顿迭代法求方程e^x+10x-2=0的近似根。

要求误差不超过0.5×10^3。

四、实验程序1.二分法function x=agui_bisect(fname,a,b,e)fa=feval(fname,a);fb=feval(fname,b);if fa*fb>0 error('两端函数值为同号');endk=0x=(a+b)/2while(b-a)>(2*e)fx=feval(fname,x);if fa*fx<0b=x;fb=fx;elsea=x;fa=fx;endk=k+1x=(a+b)/2end2.迭代法function x=agui_iterative(fname,x0,e)N=100;x=x0;x0=x+2*e;k=0;while abs(x0-x)>e & k<Nk=k+1x0=x;x=feval(fname,x0);disp(x)endif k==N warning('已达最大迭代次数');end3.牛顿法function x=agui_newton(fname,dfname,x0,e)N=100;x=x0;x0=x+2*e;k=0;while abs(x0-x)>e&k<Nk=k+1x0=x;x=x0-feval(fname,x0)/feval(dfname,x0);disp(x)endif k==N warning('已达最大迭代次数');end五、实验结果1.二分法2.迭代法3.牛顿法六、结果分析二分法要循环10次,迭代法要迭代4次,牛顿法要迭代3次才能达到精度为0.5×1^-3的要求,由此可知:二分法方法简单,编程容易,且对函数f(x)的性质要求不高,但其收缩速度较慢,计算量大,因此常被用于精度不高的近似根,或为迭代法求初值。

计算方法-方程求根实验

计算方法-方程求根实验

实验四 方程求根实验一. 实验目的(1)深入理解方程求根的迭代法的设计思想,学会利用校正技术和松弛技术解决某些实际的非线性方程问题,比较这些方法解题的不同之处。

(2)熟悉Matlab 编程环境,利用Matlab 解决具体的方程求根问题。

二. 实验要求用Matlab 软件实现根的二分搜索、迭代法、Newton 法、快速弦截法和弦截法,并用实例在计算机上计算。

三. 实验内容1. 实验题目(1)早在1225年,古代人曾求解方程020102)(23=-++=x x x x f 并给出了高精度的实根368808107.1*=x ,试用Newton 法和弦截法进行验证,要求精度610-=ε,并绘制方程的图形。

答:A.Newton 法:a .编写文件Newton.m 、func4.m 内容如下所示:b.运行,如下所示A为矩阵,由上面可知,对于初值为5,运行7次即可得到所需的精度,验证结果为古人给出的解释正确的;c.作图,编写下面的文件photo1.m.然后运行即可:注意下面中的x矩阵即为刚才计算出来的x系列,k为迭代的次数:a.编写文件Chord.m内容如下所示:b.运行结果如下所示:由上表可知,在精度为10^-6时有7位有效数字,古人的结果还是正确的c.作图,在上面运行后,即运行newton法时写的photo1.m文件即可出现图像:可以看到图中两条曲线基本重合; (2)取5.00=x ,用迭代法求方程x e x -=的根,然后用Aitken 方法加速,要求精度为结果有4为有效数字。

答:a. 编写文件func7.m 和Aiken.m ,内容如下所示:b .运行:具有四位有效数字 (3)用快速弦截法求解方程01)(=-=x xe x f ,要求精度为610-=ε,取6.05.010==x x ,作为开始值,并绘制1)(-=x xe x f 的图形。

答:对照可知,书本后面的程序已经正确,运行即可:下面为快速弦截法的主程序文件:函数文件如下:运行如下:作图,编写下面的文件:运行该文件就可以y=x*exp(x)-1函数和插值函数的图:可以看到两条直线基本重合在一起了,扩大图片可以看到两条直线是不重合的:2. 设计思想要求针对上述题目,详细分析每种算法的设计思想。

第2章方程求根

第2章方程求根


|
' ( x)
||
1
(x
2
1) 3
|
1
L 1
3
33 4
所以 (x)满足条件(2)。
x [1,2]
故(x) 3 x 1在[1, 2]满足全局收敛定理。
例题
例5.若取迭代函数 (x) x3 1 ,
因为 | '(x) || 3x2 | 3 x [1,2]
不满足全局收敛定理,故不能肯定 xk1 (xk ) k 0,1,.... 是否收敛到方程的 根。
分点
x0
1 2
(a
b)
计算函数值
f
(x0 )
f
(a b) 2
二分法
如果
f (a b) 0 2
则求得实根
x* a b 2
若 f (a) f (a b) 0
2
则取
a1
a, b1
a
b 2
否则取
ab a1 2 , b1 b
二分法
对 [a1,b1] 重复上述做法得
[a, b] [a1, b1] [a2, b2] ...... [ak , bk ] ......
局部收敛
定 义 2.1 设 x* 是 x (x) 的 根 , 如 果 存 在
x*的 邻域 x | x x* | ,使得 x0 ,
由迭代式
xk 1
( xk
)


序列
xk
k 0
收敛,则称迭
代过程 xk1 (xk ) 在根 x* 附近具有局部收敛性.
局部收敛
定理 2.2 (迭代法的局部收敛定理)
以x1代替x0重复以上的过程,继续下去得:
Newton迭代法

方程求根

方程求根

迭代法—算例分析2
例如:求方程 f ( x) x3 x 1 0 在x0 1.5 附近的根 x*
22
§2.2
迭代法—算例分析2
例如:求方程 f ( x) x3 x 1 0 在x0 1.5 附近的根 x*
3 解:将方程改写为 xk 1 x , k 1
由此建立迭代公式: xk 1 3 xk 1 (k 0,1, 2, ) 计算结果如下表
f (1)<0, f (2)>0 记 I0=[1,2] , x0 =(1+2)/2=1.5
因为 f (x0) f (1)>0 得 I1=[1.5, 2] , x1 =(1.5+2)/2=1.75
f (x1) f (1.5)<0 得 …….
I2=[1.5, 1.75] , x2 =(1.5+1.75)/2=1.625
if B A 0 where else x1 2 x2 2 x3 2 where
( B 2 A3 | B |)1 / 3 ;
A cos( a , 3 3 2 a A cos( ) , 3 3 4 a A cos( ) , 3 3 arccos( B / A3 / 2 ) ; )
二分法
求 f (x) = 0 的根
原理:若 f C[a, b],且 f (a) ·f (b) < 0,则 f 在 (a, b) 上必有一根。
y
f (x)
a
x*
b
x
称[a, b]为方程的有根区间。
7
§2.1
二分法—算法构造
a x a1
b2 x* x
b
给定有根区间 [a, b] ( f(a) ·f(b) < 0) 和 精度 或 1. 令 x = (a+b)/2 2. 如果 b – a < 或 f (x) < , 停机,输出 x 3. 如果 f (a) f (x) < 0 , 则令 b = x,否则令 a = x, 返回第1步 用二分法求根,通常先给出 f (x) 草图以确定根的大概位置。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验报告名称
班级:学号:姓名:成绩:
1实验目的
1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点。

2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法。

2 实验内容
用牛顿法和割线法求下列方程的根
x^2-e^x=0;
x*e^x-1=0;
lgx+x-2=0;
3实验步骤
1)根据二分法和牛顿迭代法,割线法的算法编写相应的求根函数;
2)将题中所给参数带入二分法函数,确定大致区间;
3)用牛顿迭代法和割线法分别对方程进行求解;
3 程序设计
牛顿迭代法x0=1.0;
N=100;
k=0;
eps=5e-6;
delta=1e-6;
while(1)
x1=x0-fc1(x0)/fc2(x0);
k=k+1;
if k>N
disp('Newmethod failed')
break
end
if(abs(x1-x0)<delta || abs(fc1(x1))<delta)
break;
end
x0=x1; %²»ÄÜ·ÅÔÚabs(x1-x0)ǰ
end
fprintf('%f',x0)
fprintf(' %f ', abs(fc1(x1)) )
割线法
function cutline(x0,x1)
N=100;
k=0;
delta=5e-8;
while(1)
while(abs(x1-x0)>=delta)
c=x1;
x1=cutnext(x0,x1);
x0=c; %x0 x1µÝÍÆµÃµ½x1 x2 ÈÔÈ»±£´æÔÚx0 x1 end
k=k+1;
if k>N
disp('Cutline method failed')
break;
end
if(abs(x1-x0)<delta || abs(fc1(x1))<delta)
break;
end
end
fprintf('%.10f\n',x1);
function y=cutnext(a,b)
y=b-fc(b)/(fc(b)-fc(a))*(b-a);
1)原函数
function fc1=fc1(x)
fc1=x^2-exp(x);
end
导函数
function fc2=fc2(x)
fc2=2*x-exp(x);
end
2)原函数
function fc1=fc1(x)
fc1=x*exp(x)-1;
end
导数
function fc2=fc2(x)
fc2=(x+1)*exp(x);
end
3)原函数
function fc1=fc1(x)
fc1=log10(x)+x-2;
end
导函数
function fc2=fc2(x)
fc2=1/x/log(10)+1;
end
4实验结果及分析
1)
牛顿法结果
-0.7034722378
割线法结果
-0.7034674225
2)
牛顿法结果
0.5671435302
割线法结果
0.5671432904
3)
牛顿法结果
1.7553985566
割线法结果
1.7555794993
牛顿迭代法由于设置delta=1e-6,所以算出的误差e<1.0*10^-5; 割线法由于设置delta=5e-8,所以误差e<1.0*10^-7;
5总结
编程时由于将迭代的代码x0=x1放在
if(abs(x1-x0)<delta || abs(fc1(x1))<delta)
break;
end
之前导致程序没有执行就跳出,通过Debug发现了问题,将x0=x1;放到了循环体内部的最后一行,程序得以成功的运行。

6参考资料
参考文献:
1)《计算方法与实习》(袁慰平孙志忠吴宏伟闻震初)。

相关文档
最新文档