数值分析-二分法 实验报告
数值分析实验报告62338

数值分析实验报告(第二章)实验题目:分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程的根,观察不同初始值下的收敛性,并给出结论。
问题分析:题目有以下几点要求:1.不同的迭代法计算根,并比较收敛性。
2.选定不同的初始值,比较收敛性.实验原理:各个迭代法简述二分法:取有根区间的重点,确定新的有根区间的区间长度仅为区间长度的一版。
对压缩了的有根区间重复以上过程,又得到新的有根区间,其区间长度为的一半,如此反复,……,可得一系列有根区间,区间收敛到一个点即为根。
牛顿迭代法:不动点迭代法的一种特例,具有局部二次收敛的特性。
迭代格式为割线法:是牛顿法的改进,具有超线性收敛的特性,收敛阶为1。
618. 迭代格式为史蒂芬森迭代法:采用不动点迭代进行预估校正。
至少是平方收敛的。
迭代格式为这里可采用牛顿迭代法的迭代函数。
实验内容:1.写出该问题的函数代码如下:function py= f(x)syms k;y=(k^2+1)*(k—1)^5;yy=diff(y,k);py(1)=subs(y,k,x);py(2)=subs(yy,k,x);end2.分别写出各个迭代法的迭代函数代码如下:二分法:function y=dichotomie(a,b,e)i=2;m(1)=a;while abs(a-b)〉et=(a+b)/2;s1=f(a);s2=f(b);s3=f(t);if s1(1)*s3(1)<=0b=t;elsea=t;endm(i)=t;i=i+1;endy=[t,i+1,m];end牛顿迭代法:function y=NewtonIterative(x,e)i=2;en=2*e;m(1)=x;while abs(en)〉=es=f(x);t=x—s(1)/s(2);en=t—x;x=t;m(i)=t;i=i+1;endy=[x,i+1,m];end牛顿割线法:function y=Secant(x1,x2,e)i=3;m(1)=x1,m(2)=x2;while abs(x2—x1)〉=es1=f(x1);s2=f(x2);t=x2—(x2—x1)*s2(1)/(s2(1)—s1(1));x1=x2;x2=t;m(i)=t;i=i+1;endy=[x2,i+1,m];end史蒂芬森迭代法:Function p=StephensonIterative(x,e)i=2;m(2)=x;en=2*e;while abs(en)〉=ey=fai(x);z=fai(y);t=x—(y-x)^2/(z—2*y+x); en=t-x;x=t;m(i)=t;i=i+1;endp=[x,i+1,m];end3.因为经常被使用,故可以写一个函数。
计算方法,二分法实验报告

实验报告 ___二分法班级:2007060101 学号:200706010103 姓名:严伟一、实验目的目的: 通过对二分法的编程练习与上机运算,进一步体会二分法的特点;二、实验内容要求内容要求: ①要求可随机输入区间[a,b]的值执行程序,算出误差限的值.②讨论a,b变化时,二分次数的变化;误差限变化时二分次数的变化;估算的次数与实际二分次数的符合情况;三、流程图四、算法①给定区间[a,b],并设f(a)与f(b)符合相反,取ε为根的容许误差, δ为|f(x)|的容许误差.令c=(a+b)/2 .②如果(c-a)< ε或|f(c)|<δ,则输出C,结束;否则执行③.③如果f(a)*f(b)>0, 则根位于区间[a, c]内,以c代替b; f(a)*f(b)< 0则根位于区间[c,b]内,以c代替a;重复①,②,③.直到区间[a, b]长度缩小到允许误差范围之内或f(c)=0,此时区间中点c即可作为所求的根。
五、实验结果应用方程:f(x)=x3+x2-3x-3=0⑴编写c语言程序如下:#include<stdio.h>#include<math.h>#define eps 5e-4#define delta 1e-6float f(float x){return x*x*x+x*x-3*x-3;}void main(){float a,b,c;int k;float fa,fb,fc;int n=1;scanf("%f,%f",&a,&b);printf("a=%f b=%f\n",a,b);k=(log(b-a)-log(eps))/log(2.0);printf("k=%d\n",k);fa=f(a);fb=f(b);do{if(fa*fb>0){printf("无解");break;}else{c=(a+b)/2;fc=f(c);if(fabs(fc)<delta)break;if(fa*fc<0){b=c;fb=fc;}if(fb*fc<0){a=c;fa=fc;}if((b-a)<eps)break;}printf("%d %f %f\n",n,c,fc);n++;}while(n=k );}⑵实例验证结果:①输入初始参数:a=1, b=2, EPS=5e-6 ;其结果为:②改变a, b的值为:a=0, b=2, EPS不变,仍为5e-6,其结果为:③改变EPS的值为:EPS=5e-4, a, b不变,仍为a=1, b=2,其结果为:六、估算次数与实际二分次数的分析和讨论I. 输入不同的区间初值a, b,二分次数的变化情况答:输入的区间范围越大,要达到相同的精确值,二分次数K会相应的增加。
数值分析实验报告——方程求根

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

武汉理工大学计算机学院数值分析实验报告武汉理工大学计算机学院数值分析实验报告篇一:数值分析实验报告学生实验报告书实验课程名称开课学院指导教师姓名学生姓名学生专业班级数值分析计算机科学与技术学院熊盛武 201X—— 201X学年第二学期实验课程名称:数值分析篇二:数值分析实验报告武汉理工大学学生实验报告书实验课程名称:数值分析开课名学生姓名:201X1—— 201X学年第二学期第一次试验(1)二分法计算流程图:简单迭代法算法流程图:(2)(3)牛顿迭代法流程图:(4)弦截法算法程序流程图:篇三:数值分析实验报告湖北民族学院理学院《数值分析》课程实验报告(一)湖北民族学院理学院《数值分析》课程实验报告(二) xn?)篇四:数值分析实验报告数值分析实验报告姓名:学号:学院:老师: XXX XXXX实验一一、实验内容用雅克比迭代法和高斯塞德尔迭代法求解课本例3.1,设置精度为10-6。
?8-32??x1??20???411?1??x233??6312??x??36? ??3??二、实验公式 ?? 雅克比迭代法的基本思想:设方程组Ax?b的系数矩阵的对角线元素 ??aii?0(i?1,2,...,n),根据方程组A x?b推导出一个迭代公式,然后将任意选取的?(0)?(1)?(1)?(2) xxx x一初始向量代入迭代公式,求出,再以代入同一迭代公式,求出,1、雅克比迭代法 ?(k)?(k) {x}{x}收敛时,如此反复进行,得到向量序列。
当其极限即为原方程组的解。
2、高斯塞德尔迭代法:在雅可比(Jacbi)迭代法中,如果当新的分量求出后,马上用它来代替旧的分量,则可能会更快地接近方程组的准确解。
基于这种设想构造的迭代公式称为高斯-塞德尔(Ga uss-Seidel)迭代法。
数值分析原理实验报告

一、实验目的通过本次实验,掌握数值分析的基本原理和方法,了解数值分析在科学和工程领域的应用,培养动手能力和分析问题的能力。
二、实验内容1. 二分法求方程根(1)原理:二分法是一种在实数域上寻找函数零点的算法。
对于连续函数f(x),如果在区间[a, b]上f(a)f(b)<0,则存在一个根在区间(a, b)内。
二分法的基本思想是将区间[a, b]不断二分,缩小根所在的区间,直到满足精度要求。
(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化区间[a, b]和中间点c=a+(b-a)/2;③ 判断f(c)与f(a)的符号,若符号相同,则将区间缩小为[a, c],否则缩小为[c,b];④ 重复步骤②和③,直到满足精度要求;⑤ 输出根的近似值。
2. 牛顿法求方程根(1)原理:牛顿法是一种在实数域上寻找函数零点的算法。
对于可导函数f(x),如果在点x0附近,f(x0)f'(x0)≠0,则存在一个根在点x0附近。
牛顿法的基本思想是通过泰勒展开近似函数,然后求解近似方程的根。
(2)实验步骤:① 输入函数f(x)和精度要求;② 初始化迭代次数n=0,近似根x0;③ 计算导数f'(x0);④ 求解近似方程x1=x0-f(x0)/f'(x0);⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1,n=n+1,返回步骤③。
3. 雅可比迭代法解线性方程组(1)原理:雅可比迭代法是一种解线性方程组的迭代算法。
对于线性方程组Ax=b,雅可比迭代法的基本思想是利用矩阵A的对角线元素将方程组分解为多个一元线性方程,然后逐个求解。
(2)实验步骤:① 输入系数矩阵A和常数向量b;② 初始化迭代次数n=0,近似解向量x0;③ 计算对角线元素d1, d2, ..., dn;④ 更新近似解向量x1=x0-A/d1, x2=x0-A/d2, ..., xn=x0-A/dn;⑤ 判断|x1-x0|是否满足精度要求,若满足,则停止迭代;否则,将x0更新为x1, x2, ..., xn,n=n+1,返回步骤③。
数值分析上机实践报告

数值分析上机实践报告一、实验目的本次实验主要目的是通过上机操作,加深对数值分析算法的理解,并熟悉使用Matlab进行数值计算的基本方法。
在具体实验中,我们将实现三种常见的数值分析算法:二分法、牛顿法和追赶法,分别应用于解决非线性方程、方程组和线性方程组的求解问题。
二、实验原理与方法1.二分法二分法是一种常见的求解非线性方程的数值方法。
根据函数在给定区间端点处的函数值的符号,不断缩小区间的长度,直到满足精度要求。
2.牛顿法牛顿法是求解方程的一种迭代方法,通过构造方程的泰勒展开式进行近似求解。
根据泰勒展式可以得到迭代公式,利用迭代公式不断逼近方程的解。
3.追赶法追赶法是用于求解三对角线性方程组的一种直接求解方法。
通过构造追赶矩阵,采用较为简便的向前追赶和向后追赶的方法进行计算。
本次实验中,我们选择了一组非线性方程、方程组和线性方程组进行求解。
具体的实验步骤如下:1.调用二分法函数,通过输入给定区间的上下界、截止误差和最大迭代次数,得到非线性方程的数值解。
2.调用牛顿法函数,通过输入初始迭代点、截止误差和最大迭代次数,得到方程组的数值解。
3.调用追赶法函数,通过输入追赶矩阵的三个向量与结果向量,得到线性方程组的数值解。
三、实验结果与分析在进行实验过程中,我们分别给定了不同的参数,通过调用相应的函数得到了实验结果。
下面是实验结果的汇总及分析。
1.非线性方程的数值解我们通过使用二分法对非线性方程进行求解,给定了区间的上下界、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程的数值解。
通过与解析解进行比较,可以发现二分法得到的数值解与解析解的误差在可接受范围内,说明二分法是有效的。
2.方程组的数值解我们通过使用牛顿法对方程组进行求解,给定了初始迭代点、截止误差和最大迭代次数。
实验结果显示,根据给定的输入,我们得到了方程组的数值解。
与解析解进行比较,同样可以发现牛顿法得到的数值解与解析解的误差在可接受范围内,说明牛顿法是有效的。
数值分析实验报告62338

m(1)=x1,m(2)=x2; while abs(x2-x1)>=e
s1=f(x1); s2=f(x2); t=x2—(x2—x1)*s2(1)/(s2(1) -s1(1)); x1=x2; x2=t; m(i)=t; i=i+1; end y=[x2,i+1,m]; end 史蒂芬森迭代法: Function
1
2
3
4
5
图 1.2 不同迭代法下迭代值得收敛情况
二分法收敛效果较差,牛顿迭代法和牛顿割线法相近,史蒂芬森迭代法收敛 次数高于 1,效果最好 3. 不同初值的收敛情况
二分法
2
6
5 1
4
3 0
2
-1
1
0 -2
-1
-2 -3
-3
-4
-4
0
10 20
30
40
0
牛顿迭代法
50
100
150
图 1.3 二分法,牛顿迭代法下不同初值的收敛情况
牛顿割线法 8
史蒂芬森迭代法 2.5
6
2 4
2
1.5
0
-2
1
-4 0.5
-6
-8
0
0
20
40
60
80
0
2
4
6
8
图 1.4 牛顿割线法,史蒂芬森迭代法下不同初值的收敛情况
1. 二分法的五个初始区间分别为
《数值分析实验》实验

数值分析实验实验1 方程求根一、实验目的:1.掌握常用的求非线性方程近似根的数值方法,用所学方法求非线性方程满足指定精度要求的数值解,比较各种方法的异同点并进行收敛性分析。
2.通过对二分法与牛顿迭代法作编程练习与上机运算,进一步体会二分法与牛顿迭代法的不同特点。
3.编写割线迭代法的程序,求非线性方程的解,并与牛顿迭代法作比较。
二、实验内容:1.用二分法求方程0104)(23=-+=x x x f 在1.5附近的根。
2.用牛顿迭代法求方程033)(23=--+=x x x x f 在1.5附近的根。
3.用简单迭代法求解非线性方程3sin )1(2=-+x x 的根。
取迭代函数)1sin 3(*5.0)(2x x x --+=ϕ,精度取2101-⨯4.(选做)用牛顿法求下列方程的根: (1)02=-x e x ; (2)01=-x xe ; (3)02lg =-+x x 。
5.(选做)编写一个弦截法程序,求解题目4中的方程。
6.(选做)Matlab 函数fzero 可用于求解非线性方程的根。
例如,fzero(@(x) x^3+4*x^2-10, 1.5)可以求解题目1。
尝试用此方法求解实验中的其他题三、实验要求:1.程序要添加适当的注释,程序的书写要采用缩进格式。
2.程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
3.程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
四、实验步骤1.按照实验内容和实验要求编写代码 2.编译并运行代码 3.检查是否发生错误五、实验源代码与实验结果实验1源代码:运行结果:实验2源代码:运行结果:实验3源代码:运行结果:4(1)的源代码:运行结果:4(2)的源代码:运行结果:4(3)的源代码:运行结果:5(3)的源代码:运行结果:六、实验心得体会通过本次实验我加深了对二分法、简单迭代法、牛顿迭代法和弦截法算法思想的了解,并对各个不同方法的优劣有了更深的理解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告
1. 二分法
1.C++实验代码:
#include<iostream>
using namespace std;
int A=0,B=1,t=0;
double c;
double fun(double x)
{
double y=x*x*x-x*x-2*x+1;
return y;
}
double time(int t)
{
int s=1;
for(int i=0;i<=t;i++)
s=s*2;
return s;
}
double jisuan(double a,double b)
{
if (fun(a)*fun(b)<0)
{
c=(a+b)/2;
if ((B-A)/time(t)<0.0005)
return c;
else
if (fun(a)*fun(c)<0)
{
b=c;
t++;
jisuan(a,b);
}
else
if (fun(c)*fun(b)<0)
{
a=c;
t++;
jisuan(a,b);
}
}
}
void main()
{
jisuan(0,1);
cout<<"在误差范围内的函数根的值为:x="<<c<<endl;
cout<<"迭代次数为:"<<t<<"次"<<endl;
system("pause");
}
2.实验结果:
3.实验中碰到的问题:
本来是打算用可输入式子然后用二分法计算的,但在编程的时候发现貌似很复杂还要区分数字和计算符号,所以先直接用题目中的式子先写算法了。
或者笔算很简单的算法,在计算机实现起来还是有点难度的,比如每算一次区间长度都要除2,我的程序路在一个函数中做不到这一点,在这个程序中就要另外设一个函数来运算。
总体通过几个函数的相互调用,以及递归方法,完成了这个二分法的计算。