版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上实验一 方程根的近似计算一、问题求非线性方程的根二、实验目的1、学会使用matlab中内部函数roots、solve、fsolve、fzero求解方程,并用之解决实际问题。4、熟悉Matlab的编程思路,尤其是函数式M文件的编写方法。三、预备知识方程求根是初等数学的重要内容之一,也是科学和工程中经常碰到的数值计算问题。它的一般形式是求方程f(x)=0的根。如果有x*使得f(x*)=0,则称x*为f(x)=0的根,或函数f(x)的零点。并非所有的方程都能求出精确解或解析解。理论上已经证明,用代数方法可以求出不超过3次的代数方程的解析解,但对于次数大于等于5的代数方程,没
2、有代数求根方法,即它的根不能用方程系数的解析式表示。至于超越方程,通常很难求出其解析解。不存在解析解的方程就需要结合具体方程(函数)的性质,使用作图法或数值法求出近似解。而计算机的发展和普及又为这些方法提供了广阔的发展前景,使之成为科学和工程中最实用的方法之一。下面介绍几种常见的求近似根的方法。1. 求方程近似解的简单方法1.1 图形方法放大法求根图形的方法是分析方程根的性态最简洁的方法。不过,不要总是想得到根的精确值。这些值虽然粗糙但直观,多少个根,在何范围,一目了然。并且还可以借助图形局部放大功能,将根定位得更加准确一些。例1.1 求方程x5+2x2+4=0的所有根及其大致分布范围。解(1
3、)画出函数f(x)=x5+2x2+4的图形,确定方程的实数根的大致范围。为此,在matlab命令窗中输入clfezplot x-x,grid onhold onezplot('x5+2*x2+4',-2*pi,2*pi) 1-1 函数f(x)=x5+2x2+4的图形clfx=-2*pi:0.1:2*pi;y1=zeros(size(x);y2= x.5+2*x.2+4;plot(x,y1,x,y2)grid on axis tighttitle('x5+2x2+4')xlabel('x') 从图1-1可见,它有一个实数根,大致分布在-2与2之间。
4、(2)将作图范围不断缩小,用放大法可得到精度越来越高的根的近似值。在matlab命令窗中先后键入subplot(2,2,1)ezplot x-x, grid on, hold on, ezplot('x5+2*x2+4',-2,2)subplot(2,2,2)ezplot x-x, grid on, hold on, ezplot('x5+2*x2+4',-2,-1)subplot(2,2,3)ezplot x-x, grid on, hold on, ezplot('x5+2*x2+4',-1.6,-1.5)subplot(2,2,4)ezpl
5、ot x-x, grid on, hold on, ezplot('x5+2*x2+4',-1.55,-1.54) 图1-2 放大法求函数f(x)=x5+2x2+4的根由图1-2可知,方程的根在-1.545与-1.54之间。1.2 数值方法非线性方程f(x)=0求根的方法有区间法和迭代法两大类,二分法、弦位法是区间法,简单迭代法和牛顿迭代法及其变形是迭代法,这里只给出二分法、简单迭代法和牛顿迭代法的构造过程。(1)根的隔离与二分法根的隔离思想来源于连续函数的零点定理:若函数f(x)在闭区间a,b上连续,且f(a)f(b)<0,则方程f(x)=0在(a,b)内至少有一根x*
6、。二分法是最简单的求根方法,它是利用连续函数的零点定理,将含根区间逐次减半缩小,取区间的中点构造收敛点列xn来逼近根x*。用该方法求f(x)=0的近似解可分两步做:第一步,确定根的近似位置或大致范围,即确定一个区间a,b,使所求根是位于这个区间内的唯一实根。这个区间称为根的隔离区间,这可以通过函数作图达到:先画出y=f(x)的图形,然后从图上定出它与x轴交点的大概位置。第二步,以根的隔离区间a,b的端点作为根的初始近似值,用二分法逐步改进根的近似值的精确度,直至求得满足精确度的近似解。具体步骤如下:取a,b的中点x0=(a+b)/2,若f(x0)=0,则x0就是f(x)=0的根x*。若f(a)
7、f(x0)<0,则根x*必在区间(a,x0)内,取a1=a, b1=x0;否则根x*必在区间(x0,b)内,取a1=x0, b1=b。这样,得到新区间a1,b1,其长度为a,b的一半。如此继续下去,进行n等分后,得到一组不断缩小的区间序列a,b, a1,b1, a2,b2, an,bn,和对应区间的中点数列xn=(an+bn)/2, n=0,1,2, 其中每个区间都含有根x*,满足a,ba1,b1 a2,b2 an,bn 且每个区间的长度都是前一区间长度的一半。由于an,bn的长度为(b-a)/2n,当n不断变大时,这些区间将收敛于一点x*,该点即为所求的根。当做到第n步时,有选择适当的
8、步数n,就可达到满意的精度。用二分法,理论上区间中点序列xn将收敛到根的真值,但收敛速度较慢,所以通常用二分法为其他方法提供初步的近似值。(2)简单迭代法迭代法的基本原理是构造一个迭代公式,反复用它得出一个逐次逼近方程根的数列,数列中每一项都是方程根的近似值,只是精度不同。简单迭代法也成逐次迭代法,是非线性方程求根中各类迭代法的基础。由于对方程作等价变换根不发生变换,将方程f(x)=0等价变换为,构造迭代计算公式。取定初值x0,算出数列xn。如果xn收敛于x*,则有这说明,x*就是方程f(x)=0的根。上面称为不动点方程,称为迭代函数,数列xn称为迭代数列。(3)牛顿迭代法如果f(x)在a,b
9、上具有二阶导数,f(a)f(b)<0,且f'(x)与f''(x)在a,b上保持同号,这时可采用牛顿迭代法求方程f(x)=0在(a,b)内的惟一实根。牛顿迭代法将非线性方程线性化处理为近似方程,然后用近似方程获得求根的迭代公式。具体做法如下:设xn是f(x)=0的一个近似根,把f(x)在xk处作泰勒展开,得f(x)=f(xk)+f'(xk)(x-xk)+(f''(xk)/2!)(x-xk)2+取前两项来近似代替f(x),则得近似线性方程f(x)f(xk)+f'(xk)(x-xk)=0如果f'(xk)0,令其解为xk+1,得xk
10、+1=xk-f(xk)/f'(xk), k=1,2,. (1-1)上式称为f(x)=0的根的牛顿迭代格式。牛顿法具有明显的几何意义,方程y=f(xk)+f'(xk)(x-xk) 是曲线在点(xk, f(xk)处的切线方程。迭代方程(1.1)就是切线与x轴交点的横坐标,所以牛顿迭代法就是用切线与x轴交点的横坐标近似替代曲线与x轴交点的横坐标。因此牛顿法也称切线法,是非线性方程求根方法中收敛最快的方法。2. matlab中方程求解的基本命令roots(p):求多项式方程的根,其中p是多项式系数按降幂排列所形成的向量。solve(fun):求方程fun=0的符号解,如果不能求得精确的
11、符号解,可以计算可变精度的数值解。solve(fun,var):对指定变量var求代数方程fun=0的符号解。fsolve(fun,x0):用最小二乘法求非线性方程fun=0在估计值x0附近的近似解。fzero(fun,x0):求函数fun在x0附近的零点。四、实验过程1、编写二分法求根程序,求方程x3+1.1x2+0.9x-1.4=0实根的近似值,使误差不超过10-3。解:(1)求根的初始隔离区间在matlab工作区输入命令:ezplot x-x, grid on, hold on, ezplot('x3+1.1*x2+0.9*x-1.4') 图1-4画出曲线图1-4。由上图
12、可知,根应在-2和2之间,进一步画出该部分的图形。ezplot x-x, grid on, hold on, ezplot('x3+1.1*x2+0.9*x-1.4',-2,2) 图1-5由图1-5可见,根在0.5与1之间。(2)编写程序如下:f=input('输入函数:f(x)=');qujian=input('输入区间=');err=input('输入误差=');a=qujian(1);b=qujian(2);yc=1;while (b-a)>err)&(yc=0)c=(a+b)/2;x=a; ya=eval(f
13、);x=b; yb=eval(f);x=c; yc=eval(f);if ya*yc<0 b=c; else a=c; end x0=cend 存为文件erfenfa.m调用erfenfa得到如下结果:>> erfenfa输入函数:f(x)='x3+1.1*x2+0.9*x-1.4'输入区间=0,1输入误差=0.001x0=0.5000x0=0.7500x0=0.6250x0=0.6875x0=0.6563x0=0.6719x0=0.6641x0=0.6680x0=0.6699x0=0.6709由此得到,方程的根的近似值为0.6709.2、编写牛顿迭代法求根程
14、序,求1中方程x3+1.1x2+0.9x-1.4=0的实根的近似值,并计算迭代次数为6的近似根。解:由1可知,0.5,1是根所在的区间,在0.5,1上f(x)= x3+1.1x2+0.9x-1.4f'(x)=3*x2+2.2x+0.9, f''(x)=6x+2.2f'(x)与f''(x)在0.5, 1上保持同号,f(1)>0与f''(1)同号,所以取x0=1为迭代初始值。用matlab语言编写一般的程序如下:f=input('输入函数:f(x)=');n=input('请输入迭代次数:n=')
15、;x0=input('请输入迭代初始值:x0=');f1=diff(f);format longfor i=1:nx=x0;fx0=eval(f);f1x0=eval(f1);x0=x0-fx0/f1x0;fprintf('x0=%12.10fn',x0)end 存为文件niudunfa.m,调用及运行结果如下:>> niudunfa输入函数:f(x)='x3+1.1*x2+0.9*x-1.4'请输入迭代次数:n=6请输入迭代初始值:x0=1x0=0.x0=0.x0=0.x0=0.x0=0.x0=0.由此得到,方程的根的近似值为0.。
16、3. 用matlab中的内部函数求方程的根。(1)用roots求方程x9+x8+1=0的根;(2)用solve求上述方程的根;(3)用fzero求方程x2+4sinx=25的实根;(4)用fsolve求方程x=e-x在0附近的根;解:(1)在matlab命令窗口输入命令:p=zeros(10,1); p(1:2,end,1)=1; roots(p) ans = -1.9643 -0.8254 + 0.2893i -0.8254 - 0.2893i -0.6575 + 0.3146i -0.6575 - 0.3146i 0.6573 + 0.4660i 0.6573 - 0.4660i 0.80
17、75 + 0.7906i 0.8075 - 0.7906i (2)在matlab命令窗口输入命令:solve('x9+x8+1=0') ans =RootOf(X19 + X18 + 1, X1) (3)首先作图确定根的大致范围:clf, ezplot x-x, grid on, hold on, ezplot('x2+4*sin(x)-25') 图1-6由图1-6可确定两根在x1-4,x25附近。再具体求根。x1=fzero('x2+4*sin(x)-25',-4)x2=fzero(' x2+4*sin(x)-25',5) x1 = -4.8049x2 = 5.6235 (4)在matlab命令窗口输入命令:x=fsolve('
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海市县(2024年-2025年小学五年级语文)统编版阶段练习(下学期)试卷及答案
- 四年级数学(除数是两位数)计算题专项练习及答案
- 高三地理第一轮教案-中国地理
- 山西省大同市2024-2025学年上学期期中教学质量监测八年级物理(含答案)
- 低音吉他产业运行及前景预测报告
- 头发护理咨询行业市场调研分析报告
- 宠物用除虱梳产业规划专项研究报告
- 勺形铲餐具市场需求与消费特点分析
- 人教版英语八年级下册 Unit 1 Section A (1a-2d)随堂练习
- 人教版八年级英语上册Unit 3 Section A 测试卷
- 青少年情绪管理
- GH-T 1384-2022 大麦青汁粉标准
- 山地旅游问卷调查
- 山东省青岛市即墨区2023-2024学年九年级上学期期中英语试卷
- 《大学生就业指导》课件-大学生职业素养
- 广东省华南师范大学附中2023-2024学年高一上学期期中生物试题(解析版)
- 南京玄武区某校2023-2024四年级上册数学期中试卷及答案
- 村(居)民房屋翻建(新建)申请表
- 集装箱房施工方案
- 平安校园建设关于动态防范清理低谷有害信息和不规范的app方案
- 旅行社经营管理教案
评论
0/150
提交评论