第二章 非线性方程(组)的数值解法
5-非线性方程组的数值解法及最优化方法

非线性方程组的数值解法
不动点迭代法:根据非线性方程求根的迭代法,将方程组改 写为如下等价方程组
xi i x1, x2,, xn , i 1,2,, n
构造迭代公式
xik 1 i x1k , x2k ,, xnk , i 1,2,, n
非线性方程组的数值解法
若对任意A Cmn 都有一个实数 A 与之对应,且满足:
(1)非负性:当 A O 时, A 0 ;当A O 时,A 0;
(2)齐次性:对任何 C ,A A ;
(3)三角不等式:对任意 A, B C nn ,都有A B A B ;
(4)相容性:对任意A, B C nn ,都有 AB A B ,
…
…
18
(0.2325670051,0.0564515197)
19
(0.2325670051,0.0564515197)
max
1 i 2
xik
xik
1
0.2250 0.0546679688 0.0138638640 0.0032704648 0.0008430541 0.0001985303 0.0000519694 0.0000122370 0.0000032485 0.0000007649
10-9
非线性方程组的数值解法
练习题:用牛顿迭代法求解方程组
取 X 0 1.6,1.2T
xx1122
x22 x22
4 1
结果:1.5811,1.2247
非线性方程组的数值解法
应用经过海底一次反射到达水听器阵的特征声线传播时间, 来反演海底参数。假设水中和沉积层声速都是恒定的,海底 沉积层上界面水平,下界面倾斜。特征声线由水中声源出发 折射进入沉积层,经过沉积层的下界面反射后,再折射进入 水中,由水中水听器阵接收。特征声线的传播时间为声线在 水中和沉积层中的传播时间之和。 三维坐标关系如图所示:
计算方法21-非线性方程

区间,如此反复,直到求出满足精度要求的近似根.
具体步骤如下:
10
令 (a, b) (a0 , b0 )
取a0 , b0 中点 x0
a0 b0 2
将其二分,
这时有三种情况: 若 f x0 0 , 则 x x0 ; 否则, x f a f x 0 , 则 a , x0 , 令 a1 a , b1 x0 ; 若 0
1 1 b2 a2 (b1 a1 ) 2 (b a ) , 2 2 ba bk ak k 2
ak bk 区间 ak , bk 的中点 xk 形成一个序列 x0 , x1 ,, xk ,, 2
显然有 lim x k x .
k
13
实际计算中,对于给定的根的允许误差 0 ,
5
求方程根的近似值,需要解决的问题:
⑴ 根的存在性. ⑵ 根的隔离. 要判断方程有没有根,有几个; 找出有根区间,使得在较小的区间内
方程只有一个根,以得到根的近似值.
⑶ 根的精确化. 利用合适的数值计算方法,逐步 把根精确化,直至满足精度要求.
6
二、逐步搜索法
假设f(x)在有根区间[a,b]单值连续,且f(a)<0.
一般步骤:
取合适的步长
y
ba h , n
f(x) 0 a x* b x
从x0=a出发,按步长逐步向右跨进行搜索,
若发现f(xk)与f(a)异号,则确定一个缩小的有根区间
[ xk 1 , xk ], 其宽度等于步长h.
特别地,若f(xk)=0,则xk就是所求的根.
7
例 对方程f (x)=x3-x-1=0 搜索有根区间.
12
《数值计算方法》复习资料

《数值计算方法》复习资料课程的性质与任务数值计算方法是一门应用性很强的基础课,在学习高等数学,线性代数和算法语言的基础上,通过本课程的学习及上机实习、使学生正确理解有关的基本概念和理论,掌握常用的基本数值方法,培养应用计算机从事科学与工程计算的能力,为以后的学习及应用打下良好基础。
第一章数值计算方法与误差分析一考核知识点误差的来源类型;绝对误差和绝对误差限,相对误差和相对误差限,有效数字;绝对误差的传播。
二复习要求1. 知道产生误差的主要来源。
2. 了解绝对误差和绝对误差限、相对误差和相对误差限和有效数字等概念以及它们之间的关系。
3. 知道四则运算中的误差传播公式。
三例题例1设x*= π=3.1415926…近似值x=3.14=0.314×101,即m=1,它的绝对误差是-0.001 592 6…,有即n=3,故x=3.14有3位有效数字.x=3.14准确到小数点后第2位.又近似值x=3.1416,它的绝对误差是0.0000074…,有即m=1,n=5,x=3.1416有5位有效数字.而近似值x=3.1415,它的绝对误差是0.0000926…,有即m=1,n=4,x=3.1415有4位有效数字.这就是说某数有s位数,若末位数字是四舍五入得到的,那么该数有s位有效数字;例2 指出下列各数具有几位有效数字,及其绝对误差限和相对误差限:2.000 4 -0.002 00 9 000 9 000.00解因为x1=2.000 4=0.200 04×101, 它的绝对误差限0.000 05=0.5×10 1―5,即m=1,n=5,故x=2.000 4有5位有效数字. a1=2,相对误差限x2=-0.002 00,绝对误差限0.000 005,因为m=-2,n=3,x2=-0.002 00有3位有效数字. a1=2,相对误差限εr==0.002 5x3=9 000,绝对误差限为0.5×100,因为m=4, n=4, x3=9 000有4位有效数字,a=9,相对误差限εr==0.000 056x4=9 000.00,绝对误差限0.005,因为m=4,n=6,x4=9 000.00有6位有效数字,相对误差限为εr==0.000 000 56由x3与x4可以看到小数点之后的0,不是可有可无的,它是有实际意义的.例3ln2=0.69314718…,精确到10-3的近似值是多少?解精确到10-3=0.001,意旨两个近似值x1,x2满足,由于近似值都是四舍五入得到的,要求满足,近似值的绝对误差限应是ε=0.0005,故至少要保留小数点后三位才可以。
非线性方程数值解法及其应用

非线性方程数值解法及其应用摘要:数值计算方法主要研究如何运用计算机去获得数学问题的数值解的理论和算法。
本文主要介绍非线性方程的数值解法以及它在各个领域的应用。
是直接从方程出发,逐步缩小根的存在区间,或逐步将根的近似值精确化,直到满足问题对精度的要求。
我将从二分法、Steffensen加速收敛法、Newton迭代法、弦截法来分析非线性方程的解法及应用。
关键字:非线性方程;二分法;Steffensen加速收敛法;代数Newton法;弦截法一、前言随着科技技术的飞速发展,科学计算越来越显示出其重要性。
科学计算的应用之广已遍及各行各业,例如气象资料的分析图像,飞机、汽车及轮船的外形设计,高科技研究等都离不开科学计算。
因此经常需要求非线性方程 f(x) = O的根。
方程f(x) = O 的根叫做函数f(x)的零点。
由连续函数的特性知:若f(x)在闭区间[a,b]上连续,且f(a)·f(b)<O,则f(x) = O在开区间(a,b)内至少有一个实根。
这时称[a,b]为方程f(x) = O的根的存在区间。
本文主要是对在区间[1.2]的根的数值解法进行分析,介绍了非线性方程数值解法的四种方法,从而得到在实际问题中遇到非线性方程根的求解问题的解决方法。
二、非线性方程的数值解法1、二分法二分法的基本思想是将方程根的区间平分为两个小区间,把有根的小区间再平分为两个更小的区间,进一步考察根在哪个更小的区间内。
如此继续下去,直到求出满足精度要求的近似值。
设函数f(x)在区间[a,b]上连续,且f(a)·f(b)<O,则[a,b]是方程f(x)=O 的根的存在区间,设其内有一实根,记为。
取区间[a,b]的中点,并计算,则必有下列三种情况之一成立:(1)= O,就是方程的根;(2)f(a)·f()<O,方程的根位于区间[a,]之中,此时令,;(3)f()·f(b)<O,方程的根位于区间[,b]之中,此时令。
非线性方程与方程组数值解法

2.2 二分法
表2-2 计算结果
k
0 1 2 3 4 5 6 7
ak
1 1 1.25 1.25 1.3125 1.3125 1.3125 1.3203
bk
2 1.5 1.5 1.375 1.375 1.3438 1.3281 1.3281
xk
1.5 1.25 1.375 1.3125 1.3438 1.3281 1.3203 1.3242
ab ;否则,回 2
5.2 二分法
说明:
x*
(ⅰ)上述计算步骤(2)和(3)每执行一次就把新的区间分成两份,根的范围也 缩小一半. 如果第 k 次二分后得到的区间记 为 [ak , bk ],根的近似值记为 xk ,则 ba (a b ) 有 bk ak k , xk k k ,那么当时 k , bk ak 0,这说明如果二分过 2 2 程无限继续下去,这些区间必将收敛于一点,即为所求根. (ⅱ) 第
3
2 f ( x ) 3 x 1 0, x [1, 2] 解 已知 f (1) 1 0, f (2) 5 0 且 ,
则方程
f ( x) x 3 x 1 0
在区间
(1, 2)
内只有一个实根.
当 k 1 , x1
bk ak 102 ,继续二分;
2.1 引言
通常隔离区间的确定方法为 (1)作 y f ( x) 的草图, 由 y f ( x)与横轴交点的大致位置来确定; 或 者将 f1 ( x) f 2 ( x) 改写成 f ( x) 0 , 根据 y f1 ( x) 和 y f 2 ( x) 交点横坐标来确定
根的隔离区间.
当 k 2 , x2
非线性方程(组)的解法

lnim(bn
an )
lim
n
2n1
(b
a)
0
lim
n
an
lim
n
bn
x
取
x
cn
1 2
(an
bn
)为
x 的近似解。
7
二分法
迭代终止准则
an - bn
即
x - cn
bn an 2
2
8
2.2一般迭代法
2.2.1 迭代法及收敛性
对于 f (x) 0 有时可以写成 x (x) 形式 如: x3 x 1 0 x 3 x 1
12
例题
例2.2.1 试用迭代法求方程 f (x) x3 x 1 0
在区间(1,2)内的实根。 解:由 x 3 x 1建立迭代关系
xk1 3 xk 1 k=0,1,2,3…… 计算结果如下:
13
例题
精确到小数点后五位
x 1.32472 1 105
2
14
例题 但如果由x x3 1建立迭代公式
xk1 xk3 1 k 1,2,...
仍取 x0 1.5,则有 x1 2.375 ,x2 12.39 显 然结果越来越大,{xk }是发散序列
15
2.3 Newton迭代法
设x*是方程f (x) = 0的根, 又x0 为x* 附近的一个值,
将f (x) 在x0 附近做泰勒展式:
f (x)
二分法
用二分法(将区间对平分)求解。
令
a1
a, b1
b, c1
1 2
(a1
b1 )
若 f (a1) f (c1) 0,则[a1, c1] 为有根区间,否 则 [c1,b1]为有根区间
非线性方程数值解法详解

1 ( p) (
p!
)( xk
)
p
xk1
1
p!
(
p)
(1
)(
xk
)p
lim
k
xk1 xk p
1 ( p) ( )
p!
0
必要性 (略)
例 能不能用迭代法求解方程x=4-2x,如果不能
时,试将方程改写成能用迭代法求解的形式.
方程为x-4+2x =0.设f(x)= x-4+2x ,则f(1)<0,f(2)>0, f‘(x)= 1+2x ln2>0,故方程f(x)=0仅在区间(1, 2)内有唯一根.
(1) f(a)f(b)<0; (2) f'(x)0, x[a, b]; (3) f''(x)不变号, x[a, b]; (4) 初值x0 [a, b]且使f''(x0) f(x0)>0; 则 Newton 迭代法收敛于f(x)=0在[a, b]内的惟一 根.
例 研究求
a的Newton公式xk 1 Nhomakorabeaxk 1 xk
f (xk ) f (xk )
(k 0,1, 2,L )
逐次逼近方程f(x)=0的根α ,这种求根算法称为 Newton法(切线法),此公式称为 Newton迭代公式.
Newton迭代法的收敛性及收敛阶
Newton法的迭代函数是 (x) x f (x)
从而
(x)
f (x) f (x) [ f (x)]2
或f(x)的零点. 设有正整数m使得f(x)=(x-α)mg(x)
且g(α)0 ,则当m2时,称α为f(x)=0的m 重根;当m=1时,称α为f(x)=0的单根. 若α为f(x)=0的m重根,则
非线性方程数值解法

对分区间法
对分法的基本思想
对分法的基本思想是在平分有根区间的 过程中,逐步缩小有根区间. 设函数f(x)在区间[a, b]上连续,且f(a) f(b)<0 ,则方程f(x)=0在(a, b)内至少有一 个根.为简便起见,假定方程f(x)=0在(a, b) 内仅有一个根.这样(a, b)为有根区间.这 时可用下面的对分法求方程f(x)=0的近似 根.
迭代法的整体收敛性
定理1 (迭代收敛定理)设(x)在[a, b]上具有一阶 导数,且 1°x[a, b] ,总有(x)[a, b] ; 2°存在0m<1,使x(a, b) ,有'(x)m 则 1°方程x=(x)在[a, b]内有且仅有一根α ,其中α 为对任意初值x0 [a, b]由迭代过程xk+1=(xk)所产生 序列的极限. m xk xk xk 1 2°有估计式
求根步骤
(1)确定所给方程存在多少个根. (2)进行根的隔离,找出每个有根区间, 有根区间内的任一点都可看成是该根的 一个近似值. (3)逐步把近似根精确化,直到足够精 确为止.
根的隔离
根的隔离
确定出若干个小区间,使每个小区间有 且仅有方程f(x)=0的一个根,这个步骤称 为根的隔离.其中每个有根小区间都称为 隔根区间.
第三章
非线性方程的数值解法
根的概念
给定方程f(x)=0,如果有α使得f(α)=0, 则称α为f(x)=0的根或f(x)的零点. 设有正整数m使得f(x)=(x-α)mg(x) 且g(α)0 ,则当m2时,称α为f(x)=0的 m重根;当m=1时,称为f(x)=0的单根. 本章只讨论实根的求法.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.1 方程(组)的根及其MATLAB 命令7.1.1 求解方程(组)的solve 命令求方程f (x )=q (x )的根可以用MATLAB 命令:>> x=solve('方程f(x)=q(x)','待求符号变量x ')求方程组f i (x 1,…,x n )=q i (x 1,…,x n ) (i =1,2,…,n )的根可以用MATLAB 命令:>>E1=sym('方程f1(x1,…,xn)=q1(x1,…,xn)'); …………………………………………………….En=sym('方程fn(x1,…,xn)=qn(x1,…,xn)'); [x1,x2,…,xn]=solve(E1,E2,…,En, x1,…,xn)7.1.2 求解方程(组)的fsolve 命令fsolve 的调用格式: X=fsolve(F,X0)7.2 搜索根的方法及其MATLAB 程序7.2.1 作图法及其MATLAB 程序作函数)(x f y =在区间 [a,b ] 的图形的MATLAB 程序一x=a:h:b; % h 是步长 y=f(x); plot(x,y)grid, gtext('y=f(x)')说明:⑴ 此程序在MATLAB 的工作区输入,运行后即可出现函数)(x f y =的图形.此图形与x 轴交点的横坐标即为所要求的根的近似值.⑵ 区间[a,b ] 的两个端点的距离 b-a 和步长h 的绝对值越小,图形越精确. 作函数)(x f y =在区间 [a,b ]上的图形的MATLAB 程序二 将)(x f y =化为)()(x g x h =,其中)()(x g x h 和是两个相等的简单函数.x=a:h:b; y1=h(x); y2=g(x); plot(x, y1, x, y2)grid,gtext(' y1=h(x),y2=g(x)') 说明:此程序在MATLAB 的工作区输入,运行后即可出现函数)()(21x g y x h y ==和的图形.两图形交点的横坐标即为所要求的根的近似值.7.2.2 逐步搜索法及其MATLAB 程序逐步搜索法的MATLAB 主程序function [k,r]=zhubuss(a,b,h,tol)% 输入的量--- a 和b 是闭区间[a,b]的左、右端点; %---h 是步长;%---tol 是预先给定的精度.% 运行后输出的量---k 是搜索点的个数;% --- r 是方程 在[a,b]上的实根的近似值,其精度是tol ; X=a:h:b;Y=funs(X);n=(b-a)/h+1;m=0; X(n+1)=X(n);Y(n+1)=Y(n); for k=2:nX(k)=a+k*h;Y(k)=funs(X(k)); %程序中调用的funs.m 为函数if sk<=0,m=m+1;r(m)=X(k); endxielv=(Y(k+1)-Y(k))*(Y(k)-Y(k-1)); if (abs(Y(k))<tol)&( xielv<=0) m=m+1;r(m)=X(k); end end例7.2.1 用逐步搜索法的MATLAB 程序分别求方程0332223=--+x x x 和0)2sin(cos 3=x 在区间]2,2[-上的根的近似值,要求精度是0.000 1.解 将逐步搜索法的MATLAB 程序保存名为zhubuss.m 的M 文件. 建立M 文件funs.mfunction y=funs(x)y=2.*x.^3+2.*x.^2-3.*x-3 在MATLAB 工作窗口输入如下程序>> [k,r]=zhubuss(-2,2,0.001,0.0001)运行后输出的结果k =4001r = -1.2240 -1.0000 -1.0000 -0.9990 1.2250即搜索点的个数为k =4 001,其中有5个是方程0332223=--+x x x 的近似根,即r = -1.224 0,-1.000 0,-1.000 0,-0.999 0,1.225 0,其精度为0.000 1.在程序中将y =2.*x .^3+2.*x .^2-3.*x -3用y =sin(cos(2.*x .^3)) 代替,可得到方程0)2sin(cos 3=x 在区间]2,2[-上的根的近似值如下r = -1.9190 -1.7640 -1.5770 -1.3300 -0.9220 0.92301.3310 1.5780 1.7650 1.92007.3 二分法及其MATLAB 程序7.3.1二分法的MATLAB 程序 二分法的MATLAB 主程序function [k,x,wuca,yx]=erfen(a,b,abtol) a(1)=a; b(1)=b;ya=fun(a(1)); yb=fun(b(1)); %程序中调用的fun.m 为函数 if ya* yb>0,disp('注意:ya*yb>0,请重新调整区间端点a 和b.'), return endmax1=-1+ceil((log(b-a)- log(abtol))/ log(2)); % ceil 是向∞+ 方向取整for k=1: max1+1a;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==0a=x; b=x; elseif yb*yx>0b=x;yb=yx; elsea=x; ya=yx; endif b-a< abtol , return , end endk=max1; x; wuca; yx=fun(x);例7.3.1 确定方程x 3-x +4=0的实根的分布情况,并用二分法求在开区间 (-2,-1)内的实根的近似值,要求精度为0.001.解 (1)先用两种方法确定方程x 3-x +4=0 的实根的分布情况。
方法1 作图法.在MATLAB 工作窗口输入如下程序>>x=-4:0.1:4;y=x.^3-x +4; plot(x,y) grid,gtext('y=x^3-x+4') 画出函数f (x )=x 3-x+4的图像.从图像可以看出,此曲线有两个驻点33±都在x 轴的上方,在(-2,-1)内曲线与x 轴只有一个交点,则该方程有唯一一个实根,且在 (-2,-1)内.方法2 试算法.在MATLAB 工作窗口输入程序>>x=-4: 1:4,y=x.^3-x +4运行后输出结果x = -4 -3 -2 -1 0 1 2 3 4 y = -56 -20 -2 4 4 4 10 28 64由于连续函数f (x )满足0)1()2(<-⋅-f f ,所以此方程在(-2,-1)内有一个实根.(2) 用二分法的主程序计算. 在MATLAB 工作窗口输入程序>> [k,x,wuca,yx]=erfen (-2,-1,0.001)运行后屏幕显示用二分法计算过程被列入表 2-3,其余结果为k = 9,x=-1.7959,wuca = 9.7656e-004,yx = 0.00377.4 迭代法及其MATLAB 程序7.4.1迭代法的MATLAB 程序1迭代法的MATLAB 主程序1function [k,piancha,xdpiancha,xk]=diedai1(x0,k) % 输入的量--x0是初始值,k 是迭代次数 x(1)=x0; for i=1:kx(i+1)=fun1(x(i));%程序中调用的fun1.m 为函数y=φ(x) piancha= abs(x(i+1)-x(i));xdpiancha=piancha/( abs(x(i+1))+eps);i=i+1;xk=x(i);[(i-1) piancha xdpiancha xk]endif (piancha >1)&(xdpiancha>0.5)&(k>3)disp('请用户注意:此迭代序列发散,请重新输入新的迭代公式') return ; endif (piancha < 0.001)&(xdpiancha< 0.0000005)&(k>3) disp('祝贺您!此迭代序列收敛,且收敛速度较快') return ; endp=[(i-1) piancha xdpiancha xk]';例7.4.1 求方程102)(2-+=x x x f 的一个正根. 解 在MATLAB 工作窗口输入程序>> [k,piancha,xdpiancha,xk]= diedai1(2,5)运行后输出用迭代公式2/)10(21k k x x -=+的结果[k,piancha,xdpiancha,xk]=1.00000000000000 1.00000000000000 0.33333333333333 3.000000000000002.00000000000000 2.50000000000000 5.00000000000000 0.500000000000003.000000000000004.37500000000000 0.89743589743590 4.875000000000004.00000000000000 11.75781250000000 1.70828603859251 -6.882812500000005.00000000000000 11.80374145507813 0.63167031671297 -18.68655395507813请用户注意:此迭代序列发散,请重新输入新的迭代公式k=5,piancha = 11.80374145507813,xdpiancha = 0.63167031671297, xk = -18.68655395507813由以上运行后输出的迭代序列与根*x =2.316 624 790 355 40相差越来越大,即迭代序列}{k x 发散,此迭代法就失败.这时偏差piancha 逐渐增大且偏差的相对误差xdpiancha 的值大于0.5.用迭代公式)2/(101+=+k k x x 运行后输出的结果 [k,piancha,xdpiancha,xk]=1.00000000000000 0.50000000000000 0.200000000000002.500000000000002.00000000000000 0.27777777777778 0.12500000000000 2.222222222222223.00000000000000 0.14619883040936 0.06172839506173 2.368421052631584.00000000000000 0.07926442612555 0.03462603878116 2.289156626506025.00000000000000 0.04230404765128 0.01814486863115 2.33146067415730k =5,piancha =0.04230404765128,xdpiancha = 0.01814486863115, xk = 2.33146067415730可见,偏差piancha 和偏差的相对误差xdpiancha 的值逐渐变小,且第5次的迭代值x k =2.331 460 674 157 30与根*x =2.316 624 790 355 40接近,则迭代序列}{k x 收敛,但收敛速度较慢,此迭代法较为成功.用迭代公式)22/()102(21+-+-=+k k k k k x x x x x 运行后输出的结果[k,piancha,xdpiancha,xk ]=1.00000000000000 0.33333333333333 0.142857142857142.333333333333332.00000000000000 0.01666666666667 0.007194244604322.316666666666673.00000000000000 0.00004187604690 0.000018076318222.316624790619774.00000000000000 0.00000000026437 0.000000000114122.316624790355405.00000000000000 0 0 2.31662479035540 祝贺您!此迭代序列收敛,且收敛速度较快k = 5; piancha = 0; xdpiancha = 0; y = 2.31662479035540.可见,偏差piancha 和偏差的相对误差xdpiancha 的值越来越小,且第5次的迭代值x k =2.316 624 790 355 40与根*x =2.316 624 790 355 40相差无几,则迭代序列}{k x 收敛,且收敛速度很快,此迭代法成功.7.4.2迭代法的MATLAB 程序2迭代法的MATLAB 主程序2function [k,piancha,xdpiancha,xk,yk]=diedai2(x0,tol,ddmax) x(1)=x0;for i=1: ddmaxx(i+1)=fun(x(i));piancha=abs(x(i+1)-x(i)); xdpiancha=piancha/( abs(x(i+1))+eps);i=i+1;xk=x(i);yk=fun(x(i)); [(i-1) piancha xdpiancha xk yk] if (piancha<tol)|(xdpiancha< tol) k=i-1; xk=x(i); return ; end endif i>ddmaxdisp('迭代次数超过给定的最大值ddmax') k=i-1; xk=x(i);yk=fun(x(i));[(i-1) piancha xdpiancha xk yk]; return ; endP=[(i-1),piancha,xdpiancha,xk,yk]';例7.4.2 求x 5-3x +1=0在0.3附近的根,精确到4位小数. 解 ⑴ 构造迭代公式3/)1(51+=+k k x x ),2,1,0( =k .⑵利用迭代法的MATLAB 程序2计算精确到4位小数的根的近似值 y 和迭代次数k .在MATLAB 工作窗口输入程序>> [k,piancha,xdpiancha,xk,yk]=diedai2(0.3,1e-4,100)运行后输出的结果[k,piancha,xdpiancha,xk,yk] =0 0.03414 0.10218 0.30000 0.33414 1 0.03414 0.10218 0.33414 0.33472 2 0.00058 0.00173 0.33472 0.33473 3 0.00001 0.00004 0.33473 0.33473k =3;piancha =1.206089525390697e-005; xdpiancha =3.603129477781680e-005;xk =0.3347; yk =0.3347.7.5 迭代过程的加速方法及其MATLAB 程序7.5.1加权迭代法的MATLAB 程序加权迭代法的MATLAB 主程序现提供名为jasudd.m 的M 文件如下:function [k,xk,yk]=jasudd (x0,tol,L,ddmax) x1(1)=x0;for i=1: ddmaxx(i+1)=fun(x1(i));x1(i+1)= x(i+1)+L*( x(i+1)- x1(i))/(1-L); piancha=abs(x1(i+1)-x1(i));xdpiancha= piancha/( abs(x1(i+1))+eps); i=i+1;xk=x1(i);yk=fun(x1(i));[(i-1) xk yk] if (piancha<tol)|(xdpiancha< tol) k=i-1; xk=x1(i); return ;end endif i>ddmaxdisp('迭代次数超过给定的最大值ddmax') k=i-1; xk=x1(i); [(i-1) xk yk]; return ; endP=[(i-1),xk,yk]';例7.5.1 求2e 0=--x x在0.85附近的一个近似根,要求精度610-=ε. 解 在MATLAB 工作窗口输入程序>> [k,xk,yk]=jasudd (0.85,1e-6,-0.855,100)运行后输出结果[k,xk,yk] =1.00000000000000 0.85260370028041 0.852607038305612.00000000000000 0.85260549975491 0.852605504062363.00000000000000 0.85260550207699 0.85260550208255 k =3; xk =0.852606; yk = 0.852606.7.5.2 艾特肯(Aitken)加速方法的MATLAB 程序艾特肯(Aitken)加速方法的MATLAB 主程序 现提供名为Aitken.m 的M 文件如下:function [k,xk,yk,p]= Aitken (x0,tol, ddmax) x(1)=x0;for i=1: ddmaxx1(i+1)=fun(x(i)); x2(i+1)=fun(x1(i+1));x(i+1)=x2(i+1)-(x2(i+1)-x1(i+1))^2/(x2(i+1)-2*x1(i+1)+x(i));piancha=abs(x(i+1)-x(i));xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1; xk=x(i);yk=fun(x(i));if (piancha<tol)|(xdpiancha<tol) k=i-1; xk=x(i); yk=fun(x(i));m=[0,1:i-1]; p=[m',x1',x2',x'];return ;endendif i>ddmaxdisp('迭代次数超过给定的最大值ddmax') k=i-1; xk=x(i); yk=fun(x(i)); m=[0,1:i-1]; p=[m',x1',x2',x']; return ; endm=[0,1:i-1]; p=[m',x1',x2',x'];例7.5.3 用艾特肯加速方法求2e0=--x x在0.85附近的一个近似根,要求精度610-=ε.解 在MATLAB 工作窗口输入程序>> [k,xk,yk,p]= Aitken(0.85,1e-6, 100)运行后输出结果k=3,xk=0.85260550201343,yk=0.85260550201373p = 0 0 0 0.85000000000000 1.00000000000000 0.85482986389745 0.85071110652484 0.85260683568607 2.00000000000000 0.85260436491811 0.85260647150826 0.85260550201407 3.00000000000000 0.85260550201343 0.85260550201398 0.852605502013737.6 牛顿(Newton)切线法及其MATLAB 程序7.6.1 牛顿切线法的收敛性及其MATLAB 程序牛顿切线法的收敛性及其MATLAB 主程序function [y,f]=newjushou(x)f=fnq(x); fz=fnq(x)*ddfnq(x)/((dfnq(x))^2+eps); y=abs(fz); if (y<1)disp('恭喜您!此迭代序列收敛,φ(x)导数值的绝对值y=|dφ(x)/dx|和方程f(x)=0的函数f(x)值f 如下')elsedisp('请注意观察下面显示的φ(x)的导数值的绝对值y=|dφ(x)/dx|和方程f(x)=0的函数f(x)值')endP=[y,f]';例 7.6.1 用牛顿切线法的局部收敛性判别方程 e 4sin =x x 的近似根时,由下列初始值0x 产生的迭代序列是否收敛?⑴-1;0=x ⑵0;0=x ⑶1;0=x ⑷2;0=x ⑸ 5.50=x ;⑹80=x . 解 在MATLAB 工作窗口输入程序>> [y,f]=newjushou(-1)运行后输出结果请注意观察下面显示的φ(x)的导数值的绝对值y=|d φ(x)/dx|和方程f(x)=0的函数f(x)值y =139.5644 f =4.3096(2)输入程序>> [y,f]=newjushou(0)运行后输出结果请注意观察下面显示的φ(x)的导数值的绝对值y=|d φ(x)/dx|和方程f(x)=0的函数f(x)的值fy =8.0000 f = 4(3)输入程序>> [y,f]=newjushou(1)运行后输出结果恭喜您!此迭代序列收敛,φ(x)导数值的绝对值y=|d φ(x)/dx|和方程f(x)=0的函数f(x)值f 如下y =0.3566 f =1.7126(4)输入程序:>> [y,f]=newjushou(2)运行后输出结果请注意观察下面显示的φ(x)的导数值的绝对值y=|d φ(x)/dx|和方程f(x)=0的函数f(x)值y =1.2593 f =-2.7188(5)输入程序>> [y,f]=newjushou(5.5)运行后输出结果请注意观察下面显示的φ(x)的导数值的绝对值y=|d φ(x)/dx|和方程f(x)=0的函数f(x)值y =1.0447e+005 f =176.6400(6)输入程序>> [y,f]=newjushou(8)运行后输出结果恭喜您!此迭代序列收敛,φ(x)导数值的绝对值y=|d φ(x)/dx|和方程f(x)=0的函数f(x)值f 如下y =0.4038 f =-2.9452e+0037.6.2 牛顿切线法的MATLAB 程序牛顿切线法的MATLAB 主程序现提供名为newtonqx.m 的M 文件: function[k,xk,yk,piancha,xdpiancha]=newtonqx(x0,tol,ftol,gxmax)x(1)=x0;for i=1: gxmaxx(i+1)=x(i)-fnq(x(i))/(dfnq(x(i))+eps);piancha=abs(x(i+1)-x(i));xdpiancha= piancha/( abs(x(i+1))+eps); i=i+1;xk=x(i);yk=fnq(x(i)); [(i-1) xk yk piancha xdpiancha] if (abs(yk)<ftol)&((piancha<tol)|(xdpiancha< tol)) k=i-1; xk=x(i);[(i-1) xk yk piancha xdpiancha] return ; end endif i>gxmaxdisp('请注意:迭代次数超过给定的最大值gxmax 。