实验二迭代法初始值与收敛性 (3)
37第七节 迭代法及其收敛性

x(k) x qk x(1) x(0) 1q
证 因 (B)||B||=q<1, 所以迭代格式收敛, 且有 设 lim x (k) =x*,由 x(k+1) = Bx(k) + f , 得 x* = Bx* + f ,则
数学学院 信息与计算科学系
又 || Bk|| ||B||k ,有 lim||Bk||=0 , 故 lim B k =0,由1)知,迭代格式收敛。
数学学院 信息与计算科学系
三、迭代法的收敛速度
考察误差向量
e(k) =x(k) -x*=Bk ·e(0)
设B有n个线性无关的特征向量及相应的特征值为
1 ,2 , ,n ,
1 , 2 , , n
数学学院 信息与计算科学系
2) 由1)知,迭代格式收敛 lim Bk=O , 即lim||Bk||=0 ,从而存在 k ,使 || B k || <1,由谱半径 的性质有
[( B )]k = (B k ) ||B k ||<1,
故得
( B )<1,
因(B)=inf{||B||}且(B)<1,存在 >0及使 || B || ( B )+ <1,
取对数得 定义3 称
k s ln10
ln (B)
R(B) ln (B)
为迭代法 x(k+1) = Bx(k) + f 的收敛速度。 由此看出,当(B)<1愈小,速度R(B)就愈大,
所需要的迭代次数也就愈少。
数学学院 信息与计算科学系
定理 2 若 ||B||=q<1,则对任意x(0) 迭代格式 x(k+1) = Bx(k) + f 收敛 ,且有误差估计式
37第七节 迭代法及其收敛性

=(1-q) ||x(k) -x*||
数学学院 信息与计算科学系
故得
1 q ( k 1) (k ) x x x x x ( k ) x ( k 1) 1 q 1 q k q q x ( k ) x x ( k ) x ( k 1) x (1) x(0) 1 q 1 q
数学学院 信息与计算科学系
二、迭代法的收敛性
定义2 如果
lim A
k
k
(k )
A O
则称矩阵序列{A(k)}依范数收敛于A,记
lim A( k ) A
由范数的等价性可以推出,矩阵序列{A(k)} 依某种范数收敛,则依任何一种范数它都收敛,故 下面不强调是在那种范数意义下收敛。
x
k 1
Bx( k ) f
k 0,1,2
其中B称为迭代矩阵。
数学学院 信息与计算科学系
若序列{x(k)}收敛,即
lim x ( k ) x
k
显然有
x Bx f
此极限 x*就是方程组 Ax=b 的解。 定义1 如果序列{x(k)}的极限存在(记 x*), 则称迭代法收敛,x*就是方程组 Ax=b 的解,否则 称此迭代法发散。
数学学院 信息与计算科学系
x(k+1) -x*= B( x(k) -x* ) , x(k+1) –x(k)= B( x(k) –x(k-1) )
即有
实验二:迭代法、初始值与收敛性

实验二:迭代法、初始值与收敛性一:实验要求考虑一个简单的代数方程210,x x --=针对上述方程,可以构造多种迭代法,如211111,1,1n n n n n nx x x x x x +++=-=+=+等。
在实轴上取初值,分别用以上迭代做实验,记录各算法的迭代过程。
二:实验要求及实验结果(1) 取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同放入初始值,反复实验。
请读者自行设计一种比较形象的记录方式(如何利用Matlab 的图形功能),分析三种迭代法的收敛性与初值的选取关系。
(2) 对三个迭代法中的某一个,取不同的初值进行迭代,结果如何?试分析对不同的初值是否有差异?实验内容:ⅰ)对211n n x x +=-进行迭代运算,选取迭代次数n=20;分别选择初值-0.6, 1.6进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下:%迭代法求解 %令x=x^2-1 clearn=30; x=-0.5;x1=x^2-1; for i=1:nx1=x1^2-1;xx(i)=x1;endm=linspace(0,29,n);plot(m,xx) title('x=-0.5')2468101214161820-1-0.9-0.8-0.7-0.6-0.5-0.4-0.3-0.2-0.10x=-0.602468101214161820-1-0.500.511.5x=1.6如上图所示,选取初值分别为-0.6、1.6时,结果都是不收敛的。
分析:2()1n g x x =-,'()2g x x =,要想在某一邻域上'()21,[1,1]g x x x =<∀∈-则但是()[1,1]g x ∉-,所以不存在某个邻域使得该迭代公式收敛。
即迭代公式对任何初值都是发散的。
ⅱ)对111n nx x +=+进行迭代运算,选取迭代次数n=30;分别选择初值=-0.7, 2.1进行实验,并画出迭代结果的趋势图。
数学数学实验Newton迭代法

数学实验题目4 Newton 迭代法摘要0x 为初始猜测,则由递推关系产生逼近解*x 的迭代序列{}k x ,这个递推公式就是Newton 法。
当0x 距*x 较近时,{}k x 很快收敛于*x 。
但当0x 选择不当时,会导致{}k x 发散。
故我们事先规定迭代的最多次数。
若超过这个次数,还不收敛,则停止迭代另选初值。
前言利用牛顿迭代法求的根程序设计流程问题1(1 程序运行如下:r = NewtSolveOne('fun1_1',pi/4,1e-6,1e-4,10) r = 0.7391(2 程序运行如下:r = NewtSolveOne('fun1_2',0.6,1e-6,1e-4,10) r = 0.5885问题2(1 程序运行如下:否 是否是是定义()f x输入012,,,x N εε开 始1k =01()f x ε<0100()()f x x x f x =-'102||x x ε-<k N =输出迭代失败标志输出1x输出奇 异标志结 束01x x = 1k k =+ 否r = NewtSolveOne('fun2_1',0.5,1e-6,1e-4,10)r = 0.5671(2)程序运行如下:r = NewtSolveOne('fun2_2',0.5,1e-6,1e-4,20)r = 0.5669问题3(1)程序运行如下:①p = LegendreIter(2)p = 1.0000 0 -0.3333p = LegendreIter(3)p = 1.0000 0 -0.6000 0p = LegendreIter(4)p =1.0000 0 -0.8571 0 0.0857p = LegendreIter(5)p = 1.0000 0 -1.1111 0 0.2381 0②p = LegendreIter(6)p = 1.0000 0 -1.3636 0 0.4545 0 -0.0216r = roots(p)'r= -0.932469514203150 -0.6612 0.9324695142031530.6612 -0.238619186083197 0.238619186083197用二分法求根为:r = BinSolve('LegendreP6',-1,1,1e-6)r = -0.932470204878826 -0.661212531887755 -0.2386200573979590.2386 0.661192602040816 0.932467713647959(2)程序运行如下:①p = ChebyshevIter(2)p = 1.0000 0 -0.5000p = ChebyshevIter(3)p = 1.0000 0 -0.7500 0p = ChebyshevIter(4)p = 1.0000 0 -1.0000 0 0.1250p = ChebyshevIter(5)p = 1.0000 0 -1.2500 0 0.3125 0②p = ChebyshevIter(6)p = 1.0000 0 -1.5000 0 0.5625 0 -0.0313r = roots(p)'r = -0.965925826289067 -0.7548 0.9659258262890680.7547 -0.258819045102521 0.258819045102521用二分法求根为:r = BinSolve('ChebyshevT6',-1,1,1e-6)r = -0.965929926658163 -0.7755 -0.2588289221938780.2588 0.7020 0.965924944196429与下列代码结果基本一致,只是元素顺序稍有不同:j = 0:5;x = cos((2*j+1)*pi/2/(5+1))x =0.965925826289068 0.7548 0.258819045102521-0.258819045102521 -0.7547 -0.965925826289068(3)程序运行如下:①p = LaguerreIter(2)p = 1 -4 2p = LaguerreIter(3)p = 1 -9 18 -6p = LaguerreIter(4)p = 1 -16 72 -96 24p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000②p = LaguerreIter(5)p =1.0000 -25.0000 200.0000 -600.0000 600.0000 -120.000r = roots(p)'r =12.6432 7.8891 3.5964257710407111.4520 0.263560319718141用二分法求根为:r = BinSolve('LaguerreL5',0,13,1e-6)r = 0.263560314567722 1.4789 3.5964257656311507.0720 12.6490(4)程序运行如下:①p = HermiteIter(2)p = 1.0000 0 -0.5000p = HermiteIter(3)p = 1.0000 0 -1.5000 0p = HermiteIter(4)p = 1.0000 0 -3.0000 0 0.7500p = HermiteIter(5)p = 1.0000 0 -5.0000 0 3.7500 0②p = HermiteIter(6)p = 1.0000 0 -7.5000 0 11.2500 0 -1.8750r = roots(p)'r =-2.3587 2.3588 -1.3358490740136961.335849074013698 -0.4367 0.4366用二分法求根为:r = BinSolve('HermiteH6',-3,3,1e-6)r =-2.3516 -1.335849********* -0.43630.4366 1.335848983453244 2.3504所用到的函数function r = NewtSolveOne(fun, x0, ftol, dftol, maxit)% NewtSolveOne 用Newton法解方程f(x)=0在x0附近的一个根%% Synopsis: r = NewtSolveOne(fun, x0)% r = NewtSolveOne(fun, x0, ftol, dftol)%% Input: fun = (string) 需要求根的函数及其导数% x0 = 猜测根,Newton法迭代初始值% ftol = (optional)误差,默认为5e-9% dftol = (optional)导数容忍最小值,小于它表明Newton法失败,默认为5e-9 % maxit = (optional)迭代次数,默认为25%% Output: r = 在寻根区间内的根或奇点if nargin < 3ftol = 5e-9;endif nargin < 4dftol = 5e-9;endif nargin < 5maxit = 25;endx = x0; %设置初始迭代位置为x0k = 0; %初始化迭代次数为0while k <= maxitk = k + 1;[f,dfdx] = feval(fun,x); %fun返回f(x)和f'(x)的值if abs(dfdx) < dftol %如果导数小于dftol,Newton法失败,返回空值r = [];warning('dfdx is too small!');return;enddx = f/dfdx; %x(n+1) = x(n) - f( x(n) )/f'( x(n) ),这里设dx = f( x(n) )/f'( x(n) )x = x - dx;if abs(f) < ftol %如果误差小于ftol,返回当前x为根r = x;return;endendr = []; %如果牛顿法未收敛,返回空值function p = LegendreIter(n)% LegendreIter 用递推的方法计算n次勒让德多项式的系数向量Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)%% Synopsis: p = LegendreIter(n)%% Input: n = 勒让德多项式的次数%% Output: p = n次勒让德多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %P0(x) = 1p = 1;return;elseif n == 1 %P1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为P0pMid = [1 0]; %初始化三项递推公式中项为P1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Pn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = (2*i+3)/(i+2) * pMidCal - (i+1)/(i+2) * pBkCal; %勒让德多项式三项递推公式Pn+2(x) = (2*i+3)/(i+2) * x*Pn+1(x) - (i+1)/(i+2) * Pn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德多项式最高次项系数归一化function p = ChebyshevIter(n)% ChebyshevIter 用递推的方法计算n次勒让德-切比雪夫多项式的系数向量Tn+2(x) = 2*x*Tn+1(x) - Tn(x)%% Synopsis: p = ChebyshevIter(n)%% Input: n = 勒让德-切比雪夫多项式的次数%% Output: p = n次勒让德-切比雪夫多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %T0(x) = 1p = 1;return;elseif n == 1 %T1(x) = xp = [1 0];return;endpBk = 1; %初始化三项递推公式后项为T0pMid = [1 0]; %初始化三项递推公式中项为T1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Tn+1pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的PnpBkCal(3:i+3) = pBk;pFwd = 2*pMidCal - pBkCal; %勒让德-切比雪夫多项式三项递推公式Tn+2(x) = 2*x*Tn+1(x) - Tn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把勒让德-切比雪夫多项式最高次项系数归一化function p = LaguerreIter(n)% LaguerreIter 用递推的方法计算n次拉盖尔多项式的系数向量Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)*Ln(x)%% Synopsis: p = LaguerreIter(n)%% Input: n = 拉盖尔多项式的次数%% Output: p = n次拉盖尔多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %L0(x) = 1p = 1;return;elseif n == 1 %L1(x) = -x+1p = [-1 1];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [-1 1]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal1 = zeros(1,i+3); %构造用于计算的x*Ln+1(x)pMidCal1(1:i+2) = pMid;pMidCal2 = zeros(1,i+3); %构造用于计算的Ln+1(x)pMidCal2(2:i+3) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Ln(x)pBkCal(3:i+3) = pBk;pFwd =( (2*i+3)*pMidCal2 - pMidCal1 - (i+1)*pBkCal )/ (i+2); %拉盖尔多项式三项递推公式Ln+2(x) = (2*n+3-x)*Ln+1(x) - (n+1)^2*Ln(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function p = HermiteIter(n)% HermiteIter 用递推的方法计算n次埃尔米特多项式的系数向量Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)%% Synopsis: p = HermiteIter(n)%% Input: n = 埃尔米特多项式的次数%% Output: p = n次埃尔米特多项式的系数向量if round(n) ~= n | n < 0error('n必须是一个非负整数');endif n == 0 %H0(x) = 1p = 1;return;elseif n == 1 %H1(x) = 2*xp = [2 0];return;endpBk = 1; %初始化三项递推公式后项为L0pMid = [2 0]; %初始化三项递推公式中项为L1for i = 0:n-2pMidCal = zeros(1,i+3); %构造用于计算的x*Hn+1(x)pMidCal(1:i+2) = pMid;pBkCal = zeros(1,i+3); %构造用于计算的Hn(x)pBkCal(3:i+3) = pBk;pFwd =2*pMidCal - 2*(i+1)*pBkCal; %埃尔米特多项式三项递推公式Hn+2(x) = 2*x*Hn+1(x) - 2*(n+1)*Hn(x)pBk = pMid; %把中项变为后项进行下次迭代pMid = pFwd; %把前项变为中项进行下次迭代endp = pFwd/pFwd(1); %把拉盖尔多项式最高次项系数归一化function r = BinSolve(fun, a, b, tol)% BinSolve 用二分法解方程f(x)=0在区间[a,b]的根%% Synopsis: r = BinSolve(fun, a, b)% r = BinSolve(fun, a, b, tol)%% Input: fun = (string) 需要求根的函数% a,b = 寻根区间上下限% tol = (optional)误差,默认为5e-9%% Output: r = 在寻根区间内的根if nargin < 4tol = 5e-9;endXb = RootBracket(fun, a, b); %粗略寻找含根区间[m,n] = size(Xb);r = [];nr = 1; %初始化找到的根的个数为1maxit = 50; %最大二分迭代次数为50for i = 1:ma = Xb(i,1); %初始化第i个寻根区间下限b = Xb(i,2); %初始化第i个寻根区间上限err = 1; %初始化误差k = 0;while k < maxitfa = feval(fun, a); %计算下限函数值fb = feval(fun, b); %计算上限函数值m = (a+b)/2;fm = feval(fun, m);err = abs(fm);if sign(fm) == sign(fb) %若中点处与右端点函数值同号,右端点赋值为中点b = m;else %若中点处与左端点函数值同号或为0,左端点赋值为中点a = m;endif err < tol %如果在a处函数值小于tolr(nr) = a; %一般奇点不符合该条件,这样可以去除奇点nr = nr + 1; %找到根的个数递增k = maxit; %改变k值跳出循环endk = k + 1; %二分迭代次数递增endendfunction X = powerX(x,a,b)% powerX 对给定向量(x1, x2,..., xn)返回增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)%% Synopsis: X = powerX(x,a,b)%% Input: x = 需要返回增幂矩阵的向量% a,b = 寻根区间上下限%% Output: X = 增幂矩阵(x1^a, x2^a,..., xn^a; x1^a+1, x2^a+1,..., xn^a+1; ...; x1^b, x2^b,..., xn^b;)if round(a) ~= a | round(b) ~= berror('a,b must be integers');elseif a >= berror('a must be smaller than b!');endx = x(:)';row = b-a+1;col = length(x);X = zeros(row, col);for i = b:-1:aX(b-i+1,:) = x.^i;Endfunction [f, dfdx] = fun1_1(x)f = cos(x) - x;dfdx = -sin(x) - 1;function [f, dfdx] = fun1_2(x)f = exp(-x) - sin(x);dfdx = -exp(-x) - cos(x);function [f, dfdx] = fun2_1(x)f = x - exp(-x);dfdx = 1 + exp(-x);function [f, dfdx] = fun2_2(x)f = x.^2 - 2*x*exp(-x) + exp(-2*x);dfdx = 2*x - 2*exp(-x) + 2*x*exp(-x) - 2*exp(-2*x);function y = LegendreP6(x)p = LegendreIter(6);X = powerX(x,0,6);y = p*X;function y = ChebyshevT6(x)p = ChebyshevIter(6);X = powerX(x,0,6);y = p*X;function y = LaguerreL5(x)p = LaguerreIter(5);X = powerX(x,0,5);y = p*X;function y = HermiteH6(x)p = HermiteIter(6);X = powerX(x,0,6);y = p*X;思考题(1)由于Newton法具有局部收敛性,所以在实际问题中,当实际问题本身能提供接近于根的初始近似值时,就可保证迭代序列收敛,但当初值难以确定时,迭代序列就不一定收敛。
初值的选取对迭代法的影响实验报告

迭代法的分类
线性迭代法
适用于线性方程组的求解,如高斯-赛德尔迭代法、 雅可比迭代法等。
非线性迭代法
适用于非线性方程或方程组的求解,如牛顿法、拟牛 顿法等。
共轭梯度法
适用于大规模稀疏线性方程组的求解,具有较好的数 值稳定性和收敛性。
迭代法的收敛性
01
迭代法的收敛性是指随着迭代的进行,解的近似值会逐渐接近 于精确解。
实验方法
1
选择常用的迭代法,如雅可比迭代法、高斯-赛德 尔迭代法等
2
设计不同初值,观察迭代法的收敛速度和精度
3
通过实验数据对比,分析初值选取对迭代法的影 响
实验步骤
01
准备实验数据和迭代法所需的基础知识
02 设计不同初值,并记录迭代法的收敛速度和精度
03
对实验数据进行整理和分析,得出结论
04
实验结果与分析
迭代精度
初值的选择对迭代法的精度也有影 响,合适的初值可以提高迭代法的 精度。
不同初值对迭代法的影响
初始解的选取
不同的初始解会导致迭代法收敛到不同的解,因此初始解的选择 对迭代法的结果有很大影响。
初始误差
初始误差的大小也会影响迭代法的收敛速度和精度,初始误差越 大,迭代法需要的时间和迭代次数越多。
VS
本实验为实际应用中迭代法的选择和 使用提供了有益的参考。在处理具体 问题时,应充分考虑初值和参数的影 响,并采取适当的策略进行优化。
05
初值选取的影响
初值选取的重要性
迭代法的收敛性
初值的选择直接影响到迭代法的 收敛性,如果初值选择不当,迭 代法可能不收敛或收敛到错误的
结果。
迭代速度
初值的选择也会影响迭代法的速度 ,合适的初值可以加快迭代法的收 敛速度。
第六章6.3迭代法的收敛性

一阶定常迭代法的收敛性
det 1 det( I B J) 2 2
2
2 3 1 0
所以
( B max(| |) 0 1 0 J)
即Jaobi迭代法收敛。
8
一阶定常迭代法的收敛性
(2) 求Gauss-Seidel法的迭代矩阵
j 1 j i 1 j i 1
14
i 1
n
n
如果 | | 1 ,则有
| | | a | | | | a | | a | ii ij ij
j 1 j i 1 i 1 n
则 [(DL )U] 为严格对角占优矩阵
从而 det[ ( D L ) U ] 0
16
补充例题
例:方程组
x1 x2 b1 x1 2x2 b2
(1)写出解该方程组的Jacobi迭代的迭代
阵,并讨论迭代收敛的条件;
(2)写出解该方程组的G-S迭代的迭代阵,
并讨论迭代收敛的条件。
17
补充例题
例:AX=b为二阶线性方程组, 证明:解该方程组的Jacobi迭代与G-S迭 代同时收敛或同时发散。
的充要条件为: (B ) 1
5
一阶定常迭代法的收敛性
例:判别下列方程组用Jacobi迭代法和G-S 法求解是否收敛。
1 2 2 x1 1 1 1 1 x2 1 2 2 1 x 1 3
6
一阶定常迭代法的收敛性
由于 B 的形式不易确定 , G
13
B 的特征值 满足 det( I B ) 0 G G
即
2.2 迭代法的一般形式与收敛性定理

设aii0 (i=1,2,,n),并将A写成三部分
0 a11 a 21 0 a 22 A a n 1 ,1 a n 1 , 2 0 a nn a n 2 a n , n 1 a n1 0 a12 a1,n1 a1n 0 a 2 , n 1 a 2 n 0 a n 1, n 0 D LU. 0
则
k
B ( H )
k
两边取对数得: k ln ( H ) ln k
ln ln ( H )
定义:
ln ( H )
为迭代法(2.2.3)的渐近收敛速 度。
解线性方程组的迭代法
线性方程组
a11 x1 a12 x2 a x a x 21 1 22 2 an1 x1 an 2 x2 a1n xn b1 a2 n xn b2 ann xn bn
复习:矩阵的谱半径 设λ是矩阵A相应于特征向量x的特征值,即 Ax=λx 向量-矩阵范数的相容性,得到 |λ| || x ||=||λx|| =|| Ax|| ≤ || A || ||x|| 从而,对A的任何特征值λ均成立 |λ|≤|| A || ( 3)
设n阶矩阵A的n个特征值为λ1,λ2,…λn,称 ( A) max i
x ( k 1) x* H ( x ( k ) x* )
由此递推:x ( k 1) x* H k 1 ( x ( 0) x* ), k 0,1,2,
x 是线性方程组Ax=b的解
x* Hx* g
x
k 1
*
第3章3-06迭代法和收敛性

解 方程组化为等价的方程组 0.2 x2 + 0.1x3 + 0.3 x1 = + 0.1x3 + 1.5 x2 = 0.2 x1 x = 0.2 x + 0.4 x + 2 1 2 3 构造高斯 赛德尔迭代公式 高斯构造高斯-赛德尔迭代公式 ( ( x1( k +1) = 0.2 x2k ) + 0.1x3k ) + 0.3 ( k +1) ( x2 = 0.2 x1( k +1) + 0.1x3k ) + 1.5, k = 0,1, 2,L ( k +1) ( x3 = 0.2 x1( k +1) + 0.4 x2k +1) + 2
雅可比迭代公式
i −1 n 1 ( k +1) (k ) (k ) xi = (bi − ∑ aij x j − ∑ aij x j ) , (i = 1,2,L, n) aii j =1 j =i +1
分量形式
( k +1) 1 ( ( ( x1 = (b1 − a12 x2k ) − a13 x3k ) − L − a1n xnk ) ) a11 ( k +1) 1 ( ( x2 = (b2 − a21 x1( k ) − a23 x3k ) − L − a2 n xnk ) ) a22 LLLL ( k +1) 1 ( ( ) xn = (bn − an1 x1( k ) − an 2 x2k ) − L − ann −1 xnk 1 ) − ann
高斯-赛德尔 高斯 赛德尔(Seidel)迭代公式 赛德尔 迭代公式
i −1 n 1 ( k +1) ( k +1) (k ) xi = (bi − ∑aij x j − ∑aij x j ), aii j =1 j =i +1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二:迭代法、初始值与收敛性
一:实验要求
考虑一个简单的代数方程
210,x x --=
针对上述方程,可以构造多种迭代法,如211111,1,n n n n n
x x x x x +++=-=+
=记录各算法的迭代过程。
二:实验要求及实验结果
(1) 取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同放入初始值,反复实验。
请读者自行设计
一种比较形象的记录方式(如何利用Matlab 的图形功能),分析三种迭代法的收敛性与初值的选取关系。
(2) 对三个迭代法中的某一个,取不同的初值进行迭代,结果如何?试分析对不同的初值是否有差异?
实验内容:
ⅰ)对211n n x x +=-进行迭代运算,选取迭代次数n=20;分别选择初值-0.6, 1.6进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下: %迭代法求解
%令x=x^2-1
clear
n=30;
x=-0.5;
x1=x^2-1;
for i=1:n
x1=x1^2-1;
xx(i)=x1;
end m=linspace(0,29,n);
plot(m,xx)
title('x=-0.5')
x=-0.6
x=1.6
如上图所示,选取初值分别为-0.6、1.6时,结果都是不收敛的。
分析:2()1n g x x =-,'()2g x x =,要想在某一邻域上'()21,[1,1]g x x x =<∀∈-则但是()[1,1]g x ∉-,所以不存在某个
邻域使得该迭代公式收敛。
即迭代公式对任何初值都是发散的。
ⅱ)对111n n
x x +=+进行迭代运算,选取迭代次数n=30;分别选择初值=-0.7, 2.1进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下:
%迭代法求解
%令x=x^2-1
clear
n=20;
x=-0.5;
x1=1+1./x;
for i=1:n
x1=1+1./x1;
xx(i)=x1; end
m=linspace(0,29,n);
plot(m,xx,'b')
title('x=-0.5')
x=-0.7x=2.1
如上图所示,选取初值分别为-0.7、2.1时,结果都是收敛。
分析:1()1,n g x x =+设 '21()[1.65,],[1.65,],()g x x g x x ∈+∞∀∈+∞=-在[1.65,]+∞上有界,且
'2
1()1,[1.65,]g x x x =<∀∈+∞则由迭代式对任意初始值0[1.65,]x ∈+∞1()1,n g x x =+产生的序列都收敛。
同时由1()1,n g x x =+
可以看到,在0[,]x ∈-∞+∞选取初值,在进行n 次迭代后,都会存在一个 1.65n x >,此时n x 相当于是在[1.65,]+∞范围内的初始值,迭代公式产生的序列收敛。
所以初值的选取对数列的收敛性没有影响。
ⅲ)对1n x +=n=20;分别选择初值=-0.6,2.1进行实验,并画出迭代结果的趋势图。
编写MATLAB 运算程序如下:
%迭代法求解
%令x=sqrt(1+x)
clear
n=20;
x=-0.5;
x1= sqrt(1.+x);
for i=1:n
x1= sqrt(1+x1);
xx(i)=x1; end
m=linspace(0,29,n);
plot(m,xx,'b')
title('x=-0.5')
x=-0.6
如上图所示,选取初值分别为-0.6、2.1时,结果都是收敛。
分析:()1g x =
设 '()[1,],[1,],()g x x g x ∈-+∞∀∈-+∞=在[1,]-+∞实
数域上有界,且'()1,[1,]
g x x =<∀∈-+∞则由迭代式对任意初始值0[1,]x ∈-+∞()g x =产生的序列都收敛。
同时由()g x =可以看到,在0[,1]x ∈-∞-选取初值,对迭代结果所产生的虚数的实部和虚部也是收敛的。
如初值选取x=-3,得到20次的迭代结果如下:实部收敛于1.618,虚部收敛于0,
Columns 1 through 5
1.1688 + 0.6050i 1.4867 + 0.2035i 1.5782 + 0.0645i 1.6058 + 0.0201i 1.6143 + 0.0062i
Columns 6 through 10
1.6169 + 0.0019i 1.6177 + 0.0006i 1.6179 + 0.0002i 1.6180 + 0.0001i 1.6180 + 0.0000i
Columns 11 through 15
1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i
Columns 16 through 20
1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i 1.6180 + 0.0000i
x=-3
上图是初值选取为-3的迭代结果趋势图,可以看出,当迭代结果为虚数时,迭代结果最终还是收敛的。
在进行n 次迭代后,实部都会存在一个1n x >-,此时n x 相当于是在[1,]-+∞范围内的初始值,迭代公式产生的序列收敛。
所以初值的选取对数列的收敛性没有影响。
(3) 线性方程组迭代法的收敛性是不依赖初值的选取的。
比较线性与非线性问题迭代的差异,有何结论和问题。
ⅰ)对线性方程1212()()()f ax bx af x bf x +=+,设()f x ax b =+,则'()f x a =。
若线性方程的迭代是收敛的,则有'()1,11f x a a =<-<<对()f x ax b =+而言,在[,]-∞+∞上,都有,()[,]x f x ∈-∞+∞,
所以,对任何初值,方程的迭代都是收敛的,不受初值的影响。
若线性方程的迭代是发散的,则对任何初值都发散,方程迭代的收敛性也不受初值的影响。
ⅱ)对非线性方程的迭代,就复杂的多。
对于方程迭代发散的方程而言,无论初值如何选择,收敛性是不会改变的。
方程的迭代还是发散。
对方程迭代收敛的情况而言,若想要使得初值的选择不会影响收敛性,那必须要使得,()[,]x f x ∈-∞+∞并且在某一定点的邻域内'()1f x <,情况是很复杂的。