实验一 非线性方程求根
实验一:非线性方程求根(一)
![实验一:非线性方程求根(一)](https://img.taocdn.com/s3/m/7c04ef1f6edb6f1aff001f46.png)
姓名学号:专业班级:学院:计算方法(C语言版)实验报告实验一:非线性方程求根(一)(第二章)一.实验目的:1.熟悉C/C++编程环境2.掌握非线性方程求根的常用算法:区间二分法、双点弦截法、简单迭代法、牛顿迭代法等。
3.记录运行结果,回答问题,完成实验报告。
二、实验条件:Microsoft Visual C++C-Free三.实验内容及运行结果:(一).用区间二分法求X^3-3X-1=0在区间[1.5,2]内的根。
1.源程序:#include<stdio.h>double f(double x);int main(void){double a,b,e,x,middle;printf(" :");scanf("%lf",&e);printf(" :");scanf("%lf,%lf",&a,&b);if(f(a)==0)x=a;else if(f(b)==0)x=b;else{while((b-a)/2>e){middle=(a+b)/2;if(f(middle)==0)break;else if(f(a)*f(middle)>0)a=middle;elseb=middle;}x=(a+b)/2;}printf(" x=%lf",x);}double f(double x){return(x*x*x-3*x-1);}2.运行结果:(二).用双点弦截法求X^3-3X-1=0在区间[1.5,2]内的根。
1.源程序:#include<stdio.h>#include<math.h>double f(double x);int main(void){double a,b,epsilon,x0,x1,fa,fb,fx1;long i,maxi;printf(" Please enter the precision of the x:");scanf("%lf",&epsilon);printf(" Please enter the largest number of iterations:");scanf("%ld",&maxi);printf(" Please enter a root the boundary of the interval a,b:"); scanf("%lf,%lf",&a,&b);fa=f(a);fb=f(b);scanf("%lf",&a);for(i=0;i<maxi;i++){x0=x1;x1=b-fb*(b-a)/(fb-fa);fx1=f(x1);if(fx1==0)break;if(fabs(b-x0)<=epsilon)break;if(i>0 && fabs(x1-x0)<=epsilon) break;if(fx1*fa<0) {b=x1;fb=fx1;}else{a=x1;fa=fx1;}}if(i<maxi)printf(" The root of equation f(x)=0x=%lf",x1);elseprintf(" The number of iterations is more than upper limit。
非线性方程求根的方法简介与例题
![非线性方程求根的方法简介与例题](https://img.taocdn.com/s3/m/ab14e4595bcfa1c7aa00b52acfc789eb172d9ed0.png)
非线性方程求根的方法简介与例题第一篇:非线性方程求根的方法简介与例题非线性方程f(x)=0求根主要可以采用下面三种方法,下面简单介绍下,并附例题,让解法更一目了然。
1)二分法简介:计算步骤如下:例题:2)不动点迭代,也叫简单迭代。
隐式化为显式,迭代法是一种逐次逼近法;其中f(x)'<1才能满足上述迭代格式。
继续迭代。
3)牛顿迭代法,实际上也叫切线法,是通过下面的方式推导出来的。
上述题目很简单,用牛顿法迭代就可以达到目的。
我们先设f(x)=x-cosx=0由公式得x=x0-x-cosx1+sinx0我们用二分法的原理,我们取x得x1=π,=x0-x0-cosx01+sinx0x1-cosx11+sinx1x2-cosx21+sinx2=π-π+11=1 x2=x1-=1-1-cos11+sin1=0.9998x3=x2-=1-1-cos0.99981+sin0.9998=0.9998x3=x2,并具有四位有效数字,所以只需迭代两次就可以达到题目所需的精度要求第二篇:非线性方程迭代上机作业总体要求:1. 2.开发语言可用任一种高级语言作业包括1)一份实验报告2)电子版作业的全套(压缩后提交在Webcc上),包括:⌝程序源代码;⌝可执行程序;⌝电子版实验报告(内容包括:一、实验目的二、模型建立三、模型求解 3.1 开发环境3.2 程序设计说明(要求设计为通用的)3.3 源代码 3.4 程序使用说明 3.5 模型的解四、小结(可含个人心得体会))第六章逐次逼近法§ 3 非线性方程的迭代解法上机实验题求 x5-3x3+x-1= 0 在区间[-8,8〕上的全部实根.试分别用:(1)二分法;(2)Newton法;(3)弦截法(割线法);(4)Newton下山法;求方程的根.准确到6位有效数字.要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较.以实验报告的形式提交.完成时间:5月18日第三篇:非线性方程的数值解法《计算方法》期末论文论文题目非线性方程的数值解法学院专业班级姓名学号指导教师日期目录摘要第1 章绪论1.1 问题的提出和研究目的和意义 1.2 国内外相关研究综述 1.3 论文的结构与研究方法第2 章非线性方程的数值解法2.1 二分法 2.2 迭代法2.3 迭代法的局部收敛性及收敛的阶 2.4 牛顿迭代法 2.5 牛顿法的改进 2.6 插值摘要数值计算方法,是一种研究解决数学问题的数值近似解方法,它的计算对象是那些。
数值分析实验之非线性方程求根(Python现)
![数值分析实验之非线性方程求根(Python现)](https://img.taocdn.com/s3/m/e91f751aba68a98271fe910ef12d2af90242a8a5.png)
数值分析实验之⾮线性⽅程求根(Python现)详细实验指导见上⼀篇,此处只写内容啦实验内容:1. ⽤⼆分法求⽅程x3-3x-1=0在的所有根.要求每个根的误差⼩于0.001.提⽰与要求: (1) 利⽤精度找到迭代次数;(2) 由f(x)=3(x2-1)可取隔根区间[-2,-1].[-1,1].[1,2]);(3) ⽤程序求各隔根区间内的根.2. ⽤不动点迭代求: (1)x3+2x2+10x-20=0的所有根.或: (2)9x2-sinx-1=0在[0,1]上的⼀个根.3. ⽤Newton迭代法求解下列之⼀,准确到10-5:(1) x3-x-1=0的所有根;(2) e x+2-x+2cosx-6=0位于[0,2]上的根.实验代码:• ⽜顿迭代法1import math2 x=0.53 n = 14while n ==1 or abs(x-x1)>1e-5:5 x1 = x6def F(x1):7return 2**-x+2*math.cos(x)+math.exp(x)-68def F1(x1):9return math.exp(x)-math.log(2)*(2**-x)-2*math.sin(x)10 x = x1 - F(x1)/F1(x1)11print ('迭代步数:',n,'X1计算值=',x1,'X计算值=',x)12 n = n+113else:14print('⽅程的根=',(x))运⾏结果:• 不动点法1import numpy as np23def f(x):4return 9*x**2 - np.sin(x) - 156def g1(x):7return ((np.sin(x)+1)/9)**0.589def g2(x):10 result = (abs(2 * x + 1))**(1 / 5)11if (2 * x - 1) < 0:12return -result13return result1415def getEpsilon(x, epsilon):16 maxY = minY = x[0]17for each in x:18 maxY = max(f(each), maxY)19 minY = min((f(each), minY))20 epsilon = (maxY - minY) * epsilon21return epsilon2223def getInitialVal(x, N, step, epsilon):24 initalVal = []25for i in range(N + 1):26 y1, y2, y3 = f(x - step), f(x), f(x + step)27if (y1 * y2 < 0) and (i != 0):28 initalVal.append((x + x - step) / 2)29if ((y2 - y1) * (y3 - y2) < 0) and (abs(y2) < epsilon):30 initalVal.append(x)31 x += step3233return initalVal3435def findFixedPoint(initalVal, delta,epsilon):36 points = []37for each in initalVal:38if (abs(g1(each)) < 1):39 points.append(iteration(each, g1, delta,epsilon)) 40else:41 points.append(iteration(each, g2, delta,epsilon)) 42return points4344def iteration(p1, g, delta,epsilon):45while True:46 p2 = g(p1)47 err =abs(p2-p1)48 relerr = err/(abs(p2)+epsilon)49if err<delta or relerr<delta:50return p251 p1 = p25253def main():54 a, b, c = input().split('')55 a = float(a)56 b = float(b)57 c = int(c)58 delta = 10 ** (-c)59 N = 860 epsilon = 0.0161 step = (b - a) / N62 x = np.arange(a, b + epsilon, epsilon)6364 epsilon2 = getEpsilon(x,epsilon)65 initalVal = getInitialVal(a, N, step, epsilon2)66 ans = findFixedPoint(initalVal, delta,epsilon)6768for each in ans:69print('⽅程的根为:%.6f' % each)7071if__name__ == '__main__':72 main()运⾏结果:。
实验一 非线性方程求根
![实验一 非线性方程求根](https://img.taocdn.com/s3/m/6cb9ce2c192e45361066f5a8.png)
石家庄经济学院2014/2015学年第一学期数值分析实验报告班级: 5141090301学号: 514109030105姓名:张倩指导教师: 张敬敏实验一非线性方程求根一、实验题目1. 求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。
(p22第3题)2. 计算√5,结果具有5位有效数字。
3. 求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,误差不大于10-5。
(选做)二、程序功能1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。
2. 用牛顿法计算√5,结果具有5位有效数字。
3. 利用二分法求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,精度为10-5。
三、算法算法1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。
算法2. 用牛顿法计算√5,结果具有5位有效数字。
for k=2,3,4….N do1)compute x:x g(x)四、重要标识符说明程序1. 重要标识符说明程序2. 重要标识符说明Error确定有效位数,abs取绝对值,for 迭代次数五、程序运行实例在matlab 6.5环境中,运行程序1,结果如图1所示。
图1 程序1运行结果在matlab 6.5环境中,运行程序2,结果如图2所示。
图2 程序2运行结果六、源程序程序1源程序:程序2源程序:Error=1e-5;x=2;for k=2:10xk=x;x=x/2+5/(2*x);if (abs(xk - x)<=Error)break;endend七、实验总结(不少于100字)。
数值分析实验报告——非线性方程求根
![数值分析实验报告——非线性方程求根](https://img.taocdn.com/s3/m/1ff0f605777f5acfa1c7aa00b52acfc788eb9f63.png)
数值分析实验报告——非线性方程求根一、实验目的:1.掌握求解非线性方程的常用方法;2.了解非线性方程求根问题的数值解法;3.熟悉使用数值分析软件进行非线性方程求根的实现。
二、实验原理:非线性方程指的是形如f(x)=0的方程,其中f(x)是一个非线性函数。
非线性方程求根的常用方法包括二分法、割线法和牛顿法等。
其中,二分法是通过不断缩小区间范围来逼近方程的解;割线法是通过使用割线来逼近方程的解;牛顿法则是通过使用切线来逼近方程的解。
对于给定的非线性方程,可以根据实际情况选择合适的方法进行求根。
三、实验内容:1.编写求解非线性方程的函数,包括二分法、割线法和牛顿法;2.使用编写的函数求解给定的非线性方程,比较各个方法的收敛速度和精确程度;3.根据实际情况分析和选择合适的方法进行求根。
四、实验步骤:1.针对给定的非线性方程,编写二分法的函数实现:(1)首先确定方程的解存在的区间;(2)根据方程的解存在的区间,使用二分法逐步缩小区间范围;(3)根据设定的精度要求,不断循环迭代,直至满足要求或达到迭代次数限制;2.针对给定的非线性方程,编写割线法的函数实现:(1)首先需要确定方程的解存在的初始点;(2)根据方程的解存在的初始点,根据割线的定义进行迭代;(3)设定迭代的精度要求和限制次数,结束迭代;3.针对给定的非线性方程,编写牛顿法的函数实现:(1)首先需要确定方程的解存在的初始点;(2)根据方程的解存在的初始点,根据牛顿法的定义进行迭代;(3)设定迭代的精度要求和限制次数,结束迭代;4.根据给定的非线性方程,分别使用二分法、割线法和牛顿法进行求解,并比较各个方法的收敛速度和精确程度;5.分析实际情况,选择合适的方法进行求解。
五、实验结果:4.通过比较,发现割线法和牛顿法的收敛速度较快,精确程度较高,因此选择割线法进行求解。
六、实验总结:通过本次实验,我掌握了求解非线性方程的常用方法,并使用数值分析软件实现了二分法、割线法和牛顿法。
【报告】非线性方程求根问题
![【报告】非线性方程求根问题](https://img.taocdn.com/s3/m/a0482f067c1cfad6185fa794.png)
【关键字】报告计算机学院上机实践报告一、目的1.通过本实验,帮助加深对非线性方程求根方法的构造过程的理解;2.能将各种方法编写为程序并上机实现;3.比较各种方法在求解同一非线性方程根时,在收敛情况上的差异。
2、内容与设计思想1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根。
2.方程f(x)=2x3-5x2-19x+42=0在x=3.0附近有根,试写出其三种不同的等价形式以构成三种不同的迭代格式,再用简单迭代法求根,观察这三种迭代是否收敛。
三、使用环境1. 硬件环境微型计算机(Intel x86系列CPU)一台2. 软件环境Windows2000/XP操作系统VC++6.0或其它的开发工具。
四、核心代码及调试过程1.用二分法求方程f(x)=x3-2x-5=0在区间[2 , 3]内的根主要代码:void bisect(double a,double b,int max_B){ double root, ya,yb,yroot;int i,actual_B;ya=f(a);yb=f(b);if(ya*yb>0){ printf("method failed!\n");exit(0); }for(i=1;i<=max_B;i++){ root=(a+b)/2;yroot=f(root); //取当前含根区间的中点if(yroot==0){ a=root;b=root;}else if(yb*yroot>0) //取含根区间为[a,(a+b)/2]{ b=root;yb=yroot;}Else //取含根区间为[(a+b)/2,b]{ a=root;ya=yroot;}if(fabs(b-a)<EPS) break;}root=(a+b)/2; yroot=f(root); actual_B=i;printf("root=%10.6lf\tf(root)=%10.6e\tatual_B=%d\n",root,yroot,actual_B); }结果:2.迭代格式分别为:x=2/19*x*x*x-5/19*x*x+42/19x=sqrt(2/5*x*x*x-19/5*x+42/5);x=(5/2*x*x+19/2*x-21)^(1/3)主要代码:double g(double x){return(pow((2.0/19.0*x*x*x-5/19*x*x+42/19),1.0)); /*定义迭代函数*/}void iterate(double a,double b,double x0,int max_D){int k=1;double x1;while(k<=max_D){x1=g(x0); /*迭代计算*/if((x1<a)||(x1>b)){printf("re_select a proper initial value x0!\n");exit(0);}if(fabs(x1-x0)<EPS) /*迭代成功并达到精度要求*/{printf("method succeed!\n");printf("root=%10.6lf\n",x1);break;}x0=x1;k++; /*x0的值被更新,累加迭代次数*/}printf("iteration times=%d\n",k); /*输出实际迭代次数*/if(k>max_D)printf("method failed!\n");}int main(){ double a=2.0,b=3.0,x0=(a+b)/2.0;int max_D=50;iterate(a,b,x0,max_D);}前两种迭代结果:第三种:输入数据时应注意数据的类型,否则程序会报错。
数值分析实验报告——非线性方程求根
![数值分析实验报告——非线性方程求根](https://img.taocdn.com/s3/m/14d42ebefd0a79563c1e7218.png)
数值分析实验报告——非线性方程求根二分法一、题目用二分法求方程=的所有根x.13要求每个根的误差小于-x+0.001..21二、方法二分法三、程序1、Jiangerfen.M的程序function[c,yc]=jiangerfen(f,a,b,tol1,tol2)if nargin<4 tol1=1e-3;tol2=1e-3;end%nargin<4表示若赋的值个数小于4,则tol1和tol2取默认值。
ya=feval('f',a);%令x=a代入到方程f中,ya即f(a)。
yb=feval('f',b);if ya*yb>0,disp('(a,b)不是有根区间');return,endmax=1+round((log(b -a)-log(tol2))/log(2));%round函数是将数据取整,使数据等于其最接近的整数。
for k=1:maxc=(a+b)/2;yc=feval('f',c);if((b-a)/2<tol2)|(abs(yc)<tol1),break,endif yb*yc<0a=c;ya=yc;elseb=c;yb=yc;endendk,c=(a+b)/2,yc=feval('f',c)2、f.M的程序function y=f(x);y=x^3-2*x-1;四、结果>> format compact>> fplot('[x^3-2*x-1,0]',[-1.5,2]);>> jiangerfen('f',-1.5,-0.8);k =8c =-0.9996yc =3.9017e-004>> jiangerfen('f',-0.8,-0.3);k =8c =-0.6184yc =2.7772e-004>> jiangerfen('f',1.3,2);k =10c =1.6179yc =-9.5348e-004>> jiangerfen('f',2,3);(a,b)不是有根区间方程f(x)=x^3-2*x-1的所有根为-0.9996,-0.6184 ,1.6179 。
数值实验一-非线性方程求根
![数值实验一-非线性方程求根](https://img.taocdn.com/s3/m/9a017f01ba1aa8114431d9e7.png)
13
如果一个命令行很长,一个物理行之内写不下, 可以在第一个物理行之后加上3个小黑点并按下 回车键,然后接着下一个物理行继续写命令的其 他部分。3个小黑点称为续行符,即把下面的物 理行看作该行的逻辑继续。 在MATLAB里,控制键和方向键可用于命令行的 编辑。
14
变量和赋值语句
变量命名
9
工作空间窗口( Workspace )
工作空间是MATLAB用于存储各种变量和结果的 内存空间。在该窗口中显示工作空间中所有变量 的名称、大小、字节数和变量类型说明,可对变 量进行观察、编辑、保存和删除。
10
命令历史记录窗口( Command History ) 在默认设置下,历史记录窗口中会自动保留 自安装起所有用过的命令的历史记录,并且 还标明了使用时间,从而方便用户查询。而 且,通过双击命令可进行历史命令的再运行。 如果要清除这些历史记录,可以选择Edit菜 单中的Clear Command History命令。
在MATLAB 6.5中,变量名是以字母开头,后字 母、数字或下划线的字符序列,最多63个字符。在 MATLAB中,变量名区分字母的大小写。
在MATLAB工作空间中,还驻留几个由系统本身定义的 变量。例如,用pi表示圆周率π的近似值, 用i,j表示虚数单位。定义变量有特定的含义,在使用时, 应尽量避免对这些变量重新赋值。
15
赋值语句 MATLAB赋值语句有两种形式: (1) 变量=表达式 (2) 表达式 其中“表达式”是用运算符将有关运算量连 接起来的式子,其结果是一个矩阵。 [注] 第二种语句形式下,将表达式的值 赋给MATLAB的永久变量ans。 如果在语句的最后加分号,那么,MATLAB 仅仅执行赋值操作,加分号不再显示运算的结 果。在一条语句中,如果表达式太复杂,一行 写不下,可以加上三个小黑点(续行符)并按下回 16 车键,然后接下去再写。
数值分析非线性方程求根实验
![数值分析非线性方程求根实验](https://img.taocdn.com/s3/m/512354b41a37f111f1855b59.png)
实验报告一、实验目的1.迭代函数对收敛性的影响。
2.初值的选择对收敛性的影响。
二、实验题目1.用简单迭代法求方程01)(3=--=x x x f 的根。
分别化方程为如下等价方程: 31+=x x ;13-=x x ;x x 11+=;213-+=x x x 取初值5.10=x ,精度为410-,最大迭代次数为500,观察其计算结果并加以分析。
2.①用牛顿法求方程01)(3=-+=x x x f 在0.5附近的根,分别取初值1000,100,2,1,5.0,5.0,1,2,100,10000-----=x观察并比较计算结果,并加以分析。
②用牛顿法求方程0)(3=-=x x x f 所有根。
三、实验原理简单迭代法程序,牛顿迭代法程序。
四、实验内容及结果fun=inline('x^3-x-1');dfun=inline('3*x^2-1');-1000,x1=manewton(fun,dfun,-1000,1e-4) -100,x2=manewton(fun,dfun,-100,1e-4)-2,x3=manewton(fun,dfun,-2,1e-4)-1,x4=manewton(fun,dfun,-1,1e-4)-0.5,x5=manewton(fun,dfun,-0.5,1e-4) 0.5,x6=manewton(fun,dfun,0.5,1e-4)1,x7=manewton(fun,dfun,1,1e-4)2,x8=manewton(fun,dfun,2,1e-4)100,x9=manewton(fun,dfun,100,1e-4) 1000,x10=manewton(fun,dfun,1000,1e-4)3)在MA TLAB的主程序窗口输出以下结果:ans =-1000k=21x1 =0.682327804075895ans =-100k=16x2 =0.682327803903413ans =-2k=6x3 =0.682327803828020ans =-1k=5x4 =0.682327803828020ans =-0.500000000000000k=4x5 =0.682327803903932ans =0.500000000000000k=3x6 =0.682327803828347五、实验结果分析(1)实验1中用简单迭代法求方程01)(3=--=x x x f 的根:取初始值5.10=x 的时候,等价方程2和4是不收敛的。
数学实验项目-使用二分法对非线性方程求根
![数学实验项目-使用二分法对非线性方程求根](https://img.taocdn.com/s3/m/7f8ab71131b765ce04081406.png)
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
计算方法非线性方程求根实验
![计算方法非线性方程求根实验](https://img.taocdn.com/s3/m/8210f76c561252d380eb6efa.png)
f (a ) ⋅ f (b) < 0 ;又设 f ( x) 的一个零点 x* ∈ (a, b) 的近似值 (设f ′( x0 ) ≠ 0) 。用过曲
第2章非线性方程求根
![第2章非线性方程求根](https://img.taocdn.com/s3/m/e915b5c8e45c3b3567ec8bf9.png)
y
y=x
p1
x (x)
p0
✓
y
x (x)
p0
y=x
p1
x
x0
x1
x
x0 x1
说明在根 附近,曲线的切线不能太陡! 17
例2.2.1 求方程 f (x) x3 x 1 0 在x0 1.5附近的根.
解 (1) 将方程改写为 x 3 x 1
由此建立迭代公式 xk1 3 xk 1 得
k0 1
(Lp1
Lp2
...1) |
xk 1
xk
|
1 1 L
|
xk 1
xk
|,
令p ,得
|
xk
|
1 1 L
|
xk 1
xk
|.
因而可通过检查 | xk1 xk | 来判断迭代过程应否终止。
24
例2.2.3 求 f (x) 9x2 sin x 1 0 在[0,1]内的一个根。
解 由于 f (0) 1 0,
(bk 1
ak1)
...
1 2k
(b
a).
因此,当
k
足够大时,我们可以用
xk
ak
bk 2
作为函数
f (x)的一个根 的近似值。
此时有误差估计:
xk
bk ak 2
ba. 2k 1
常用来估计k的值
9
四、算法的优点与缺点
优点:计算简单且必收敛,是一种可靠的算法;对函数性质要 求低,只要求函数f(x)连续就可以了。
(2). 若 f (x0 ) f (a) 0,则令a1 a,b1 x0; 若 f (x0 ) f (b) 0,则令a1 x0,b1 b.
第4章_非线性方程求根 计算方法
![第4章_非线性方程求根 计算方法](https://img.taocdn.com/s3/m/aefacc10eff9aef8941e06e6.png)
解: 从[-4,4]区间以步长为1计算f(x)=x3-3x+1的函数值, 列如下表
4 结束
表2-1
x
计 算 方 法 课 件
-4
-3
-2
-1 3
0 1
1 -1
2 3
3 19
4 53
f(x) -51 -17 -1
可见,在[-2,-1]区间、[0,1]区间、[1,2]区间各有一实根,
下面求[0,1]区间上的实根,列表略: 可见x∊[0.347167968,0.347412109] 若取=0.005,由表可知,当k=13时, bk-ak=0.000244141<0.005,此时过程结束,取 xk=(0.347167968+0.347412109)/2=0.3472900380.347 5 结束
y x y g ( x)
它的解(x*,y *)中的x *就是x=g(x)的根.如图: 图2-3 图2-4 图2-5 10 图2-6 结束
计 算 方 法 课 件
不动点迭代算法: %input:初始解x0;最大迭代次数N;精度tol. %output:近似根x,迭代次数k. 1. k=1; 2. While k<N 2.1 x= g(x0) ; %函数g需要事先定义; 2.2 if abs(x-x0)<tol break end 2.3 k=k+1; x0=x; end 3. disp(x); disp(k)
此方程还可以有另外的迭代形式:
xk 1
计 算 方 法 课 件
1 , 2 3 xk
k 0,1,2,3,
xk 1 3 3xk 1,
4.2.2 迭代法的几何解释
k 0,1,2,3,
实验一_非线性方程求根
![实验一_非线性方程求根](https://img.taocdn.com/s3/m/194427c8d15abe23482f4dd0.png)
实验一 非线性方程求根实验名称:非线性方程求根 实验类型: 验证性实验 学 时:22.1 实验环境① 操作系统:WindowsXP/Win7 ② 编程环境:自定2.2 实验目的① 掌握二分法、牛顿迭代法等常用的非线性方程迭代算法; ② 了解迭代算法的设计原理及初值对收敛性的影响。
2.3 实验原理和方法2.3.1 二分法的算法描述计算()0f x =的根的二分法如下:① 输入有根区间[,]a b ,根的容许误差ε和()f x 与零之间的容许误差η,置二分次数0n =,并计算(),()a b f f a f f b ==,如果 0a b f f ⋅<,转②;否则,算法失败,结束;② 当b a ε->时,计算()/2x a b =+,()f f x =;分情况处理:若f η<,则停止计算,输出近似根x 以及二分次数n ; 否则 若0a f f ⋅<,则,b b x f f ==;否则,,a a x f f ==;1n n =+,转②③ 2a bx +=;④ 输出近似根x 以及二分次数n 。
2.3.2 牛顿迭代法的算法描述给定初始值0x ,ε为根的容许误差,η为()f x 与零之间的容许误差,N 为最大迭代次数。
置迭代次数0n =,进行如下计算:① 如果'0()0f x =或n N >,则算法失败,结束;否则执行② ② 计算010'0()()f x x x f x =-,1n n =+; ③ 若10x x ε-<或1()f x η<,则输出近似根1x 及迭代次数n ,程序结束;否则执行④ ④ 令01x x =,转向①2.3.3 牛顿迭代法的改进 弦截法(割线法) 改用差商11()()k k k k f x f x x x ----代换牛顿法中的1'()k f x -,可得迭代公式111212()()()()k k k k k k k f x x x x x f x f x ------=--- 2,3,4,k=称之为弦截法。
数值分析实验报告之迭代法求非线性方程的根
![数值分析实验报告之迭代法求非线性方程的根](https://img.taocdn.com/s3/m/d67225502379168884868762caaedd3383c4b5a4.png)
数值分析实验报告之迭代法求非线性方程的根1.实验目的掌握迭代法求非线性方程根的基本原理和使用方法,加深对数值计算方法的理解与应用。
2.实验原理迭代法是一种通过不断逼近的方法求解非线性方程的根。
根据不同的函数特点和问题需求,可以选择不同的迭代公式进行计算,如牛顿迭代法、二分法、弦截法等。
3.实验内容本次实验使用牛顿迭代法求解非线性方程的根。
牛顿迭代法基于函数的局部线性逼近,通过不断迭代逼近零点,直至满足收敛条件。
具体步骤如下:Step 1:选择初始点X0。
Step 2:计算函数f(x)在X0处的导数f'(x0)。
Step 3:计算迭代公式Xn+1 = Xn - f(Xn) / f'(Xn)。
Step 4:判断收敛准则,若满足则迭代结束,输出解Xn;否则返回Step 2,继续迭代。
Step 5:根据实际情况判断迭代过程是否收敛,并输出结果。
4.实验步骤步骤一:选择初始点。
根据非线性方程的特点,选择恰当的初始点,以便迭代公式收敛。
步骤二:计算导数。
根据选择的非线性方程,计算函数f(x)的导数f'(x0),作为迭代公式的计算基础。
步骤三:迭代计算。
根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),计算下一个迭代点Xn+1步骤四:判断收敛。
判断迭代过程是否满足收敛条件,通常可以通过设置迭代次数上限、判断前后两次迭代结果的差值是否足够小等方式进行判断。
步骤五:输出结果。
根据实际情况,输出最终的迭代结果。
5.实验结果与分析以求解非线性方程f(x)=x^3-x-1为例,选择初始点X0=1进行迭代计算。
根据函数f(x)的导数计算公式,得到导数f'(x0)=3x0^2-1,即f'(1)=2根据迭代公式Xn+1=Xn-f(Xn)/f'(Xn),带入计算可得:X1=X0-(X0^3-X0-1)/(3X0^2-1)=1-(1-1-1)/(3-1)=1-0/2=1根据收敛准则,判断迭代结果是否满足收敛条件。
数值分析实验一非线性方程组求解
![数值分析实验一非线性方程组求解](https://img.taocdn.com/s3/m/31419f94a0116c175f0e48b1.png)
// MainFrm.cpp : implementation of the CMainFrame class // #include "stdafx.h"
实 验 源 代 码
#include "20141501069 于童实验一.h" #include "math.h" #include "MainFrm.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif
算法思想: 选定初始值 x0 , x1 ,并计算 f ( x0 ) 和 f ( x1 ) ;
弦 位 法
f ( x ) x n ( x x ) n 1 n n n 1 用迭代公式 x 计算 x2 ,再求 f ( x2 ) ; f ( x ) f ( x ) n n 1
0 x ,f ( x )) x , f( x )) 判别:如果 f (x 则迭代停止;否则,用 ( 和( 分别代替 2) 2 2 1 1
ReleaseDC(pDC); } void CMainFrame::Ondd() { // TODO: Add your command handler code here CDC*pDC=GetDC(); pDC->Rectangle(0,0,10000,10000); pDC->TextOut(10,30,"迭代法:方程 X^3-3X-1=0,迭代方程为:Xn+1=(3*Xn+1)^1/3"); double a=2; double b=pow(3*a+1,1.0/3); inti=0; intss=0; int s=0; int t=0; CString date; pDC->TextOut(20+20,50,"x0 : 2.000000"); while (fabs(a-b)>=0.00001) { i+=20; t++; ss++; if (t>=10) s=-10; pDC->TextOut(40+s,50+i,"x"); date.Format("%d",ss); pDC->TextOut(50+s+10,50+i,date); pDC->TextOut(60+10,50+i,":"); date.Format("%lf",b); pDC->TextOut(70+10,50+i,date); double temp=b-(b*b*b-3*b-1)/(3*b*b-3); a=b; b=temp; } } void CMainFrame::Onxw() { // TODO: Add your command handler code here CDC*pDC=GetDC(); pDC->Rectangle(0,0,10000,10000);
非线性方程求根
![非线性方程求根](https://img.taocdn.com/s3/m/1eb1b2df7f1922791688e8b4.png)
实验七 非线性方程求根实验7.1(迭代法、初始值与收敛性)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。
问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。
实验内容:考虑一个简单的代数方程012=--x x针对上述方程,可以构造多种迭代法,如)1.7(121-=+n n x x)2.7(111nn x x +=+)3.7(11+=+n n x x在实轴上取初始值x 0,请分别用迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。
实验要求:(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。
请自选设计一种比较形象的记录方式(如利用MATLAB 的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)线性方程组迭代法的收敛性是不依赖初始值选取的。
比较线性与非线性问题迭代的差异,有何结论和问题。
实验过程: 第一问: 针对迭代函数11n n x x +=-程序disp(' 请输入初始迭代值为') x=[]; a=[];b=[];x(1)=input('');for i=2:30x(i)=x(i-1)^2-1;endfor i=2:30a(i-1)=x(i-1);b(i)=x(i);endabi=1:30;plot(i,x)title('x(n+1)=x(n)^2-1')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:针对迭代函数111n nx x +=+disp('请输入迭代的初始值') float x=[]; a=[]; b=[];x(1)=input(''); for i=2:30x(i)=1+1/x(i-1); end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x)title('x(n+1)=x(n)^2-1')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:每次的迭代函数值为:针对迭代函数1n x +=disp('请输入迭代的初始值') double x=[]; a=[]; b=[];x(1)=input(''); for i=2:30x(i)=sqrt(x(i-1)+1); end for i=2:30 a(i-1)=x(i-1); b(i)=x(i); end a b i=1:30; plot(i,x)title('x(n+1)=sqrt(x(n)+1)')数值实验结果及分析:选择初始值为1时,每次迭代的波动情况如下:讨论由上面的比较结果可以看到,无论取什么初始值,迭代法211n n x x +=-所得到的解是发散的,并且随着初始值选取的不同,发散的程度将会呈现指数型的增长,表明这种迭代法是没有意义的。
基于matlab的数值分析( 非线性方程求根)上机实验报告1
![基于matlab的数值分析( 非线性方程求根)上机实验报告1](https://img.taocdn.com/s3/m/16d755489b6648d7c1c74636.png)
数值分析试验报告非线性方程求根二分法解方程1. 题目:用二分法求方程0133=--x x 的所有根 2. 方法:二分法 3. 程序function x=erfenfa(a,b)if (a*a*a-3*a-1)*(b*b*b-3*b-1)>0 disp('区间错误,请重新调试!'); break else x=(a+b)/2.0; k=0;while (k<=100&abs(x*x*x-3*x-1)>0.0001&b-a>0.0001) if (x*x*x-3*x-1)*(a*a*a-3*a-1)<0 b=x; else a=x; end x=(a+b)/2.0; k=k+1; k,x if k==100display('计算方法错误,请重新调试!'); end end enddisp(['k=',num2str(k)])4. 结果>> format compact >> erfenfa(1,2) k = 1 x = 1.000000 k = 2x = 1.000000 k = 3 x = 1.000000 k = 4x =1.000000k =5x =1.000000k =6x =1.000000k =7x =1.000000k =8x =1.500000k =9x =1.250000k =10x =1.125000k=10ans =1.125000 >> erfenfa(-1,1) k =1x =-0.000000k =2x =-0.000000k =3x =-0.000000k =4 x =-0.000000k =5x =-0.000000k =6x =-0.000000k =7x =-0.000000k =8x =-0.000000k =9x =-0.500000k =10x =-0.750000k =11x =-0.347k =12x =-0.937500k =13x =-0.906250k=13ans =-0.906250 >> erfenfa(-2,-1) k =1x = -1.000000 k = 2 x = -1.000000 k = 3 x = -1.000000 k = 4 x = -1.000000 k = 5 x = -1.000000 k = 6 x = -1.000000 k = 7 x = -1.535k = 8 x = -1.500000 k = 9 x = -1.250000 k = 10 x = -1.125000 k = 11 x = -1.187500 k = 12 x = -1.532 k=12 ans = -1.5325,拓展:在程序编写完成调试过程中发现如果给出错误区间程序仍能给出一个错误答案,于是找同学讨教,讨论得出了正确的方法不动点解方程1. 题目: 解方程02010423=-++x x x 的根2.方法:不动点迭代法3.程序function x=budongdian(x0)p=x0;for k=1:10x0=p;p=20/(x0*x0+4*x0+10);if abs(p-x0)<0.0001break;endkpif k==10disp('计算错误')endend4.结果>> format compact>> budongdian(1)k =1p =For personal use only in study and research; not for commercial use1.3333k =2p =1.1688k =3p =1.2468k =4p =1.2091k =5p =1.2271k =6p =1.2184 k = 7 p = 1.2226 k = 8 p = 1.2206 k = 9 p = 1.2216 k = 10 p = 1.2211 k = 11 p = 1.2213 k = 12 p = 1.2212 p =1.2213Newton 迭代法求方程的根1. 题目:求方程0105233=++x x 的根 2. 方法:newton 迭代法 3. 程序:function x=newton(a) p=a;for k=1:100 a=p;p=a-(3*a*a*a+5*a*a+10)/(9*a*a+10*a); if abs(p-a)<0.00001 break; endif k==100display('计算错误'); endkpendp4.结果>> format long>> newton(-2)k =1p =-2.000000k =2p =-2.094853k =3p =-2.142995p =-2.582976>>对于不同的函数只需将文中x*x*x-3*x-1你所需求解的函数就ok 了仅供个人用于学习、研究;不得用于商业用途。
数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))
![数值计算(二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法))](https://img.taocdn.com/s3/m/8b3ebe3fb9d528ea80c77935.png)
本科生实验报告实验课程______________ 数值计算方法 _______________________ 学院名称_____________ 信息科学与技术学院_________________ 专业名称______________ 计算机科学与技术 ___________________ 学生 _________________________________________学生学号_______________________________________________指导教师___________________________________________实验地点_______________________________________________实验成绩__________________________________________________二0 一六年五月二◦一六年五月实验一非线性方程求根1.1问题描述实验目的:掌握非线性方程求根的基本步骤及方法,。
实验容:试分别用二分法、简单迭代法、Newton迭代法、弦截法(割线法、双点弦法),求x5-3x3+x-仁0在区间[-8,8]上的全部实根,误差限为10-6。
要求:讨论求解的全过程,对所用算法的局部收敛性,优缺点等作分析及比较,第2章算法思想2.1 二分法思想:在函数的单调有根区间,将有根区间不断的二分,寻找方程的解。
步骤:1.取中点 mid=(x0+x1)/22若f(mid)=0,则mid为方程的根,否则比较与两端的符号,若与f(x0) 异号,则根在[x0,mid]之间,否则在[mid,x1]之间。
3并重复上述步骤,直达达到精度要求,则mid为方程的近似解。
开始读入a,b,eyes输出mid结束2.2简单迭代法思想:迭代法是一种逐次逼近的方法,它是固定公式反复校正跟的近似值, 使之逐步精确,最后得到精度要求的结果。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
石家庄经济学院2014/2015学年第一学期
数值分析实验报告
班级: 5141090301
学号: 514109030105
姓名:张倩
指导教师: 张敬敏
实验一非线性方程求根
一、实验题目
1. 求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。
(p22第3题)
2. 计算√5,结果具有5位有效数字。
3. 求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,误差不大于10-5。
(选做)
二、程序功能
1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。
2. 用牛顿法计算√5,结果具有5位有效数字。
3. 利用二分法求方程f(x)=x3-x-1=0在区间[1.0,1.5]内的一个实根,精度为10-5。
三、算法
算法1. 使用迭代法求方程f(x)=3x2-e x=0一个正根,并使误差不大于10-5。
算法2. 用牛顿法计算√5,结果具有5位有效数字。
for k=2,3,4….N do
1)compute x:x g(x)
四、重要标识符说明
程序1. 重要标识符说明
程序2. 重要标识符说明
Error确定有效位数,abs取绝对值,for 迭代次数
五、程序运行实例
在matlab 6.5环境中,运行程序1,结果如图1所示。
图1 程序1运行结果在matlab 6.5环境中,运行程序2,结果如图2所示。
图2 程序2运行结果六、源程序
程序1源程序:
程序2源程序:
Error=1e-5;
x=2;
for k=2:10
xk=x;
x=x/2+5/(2*x);
if (abs(xk - x)<=Error)
break;
end
end
七、实验总结(不少于100字)。