基于matlab的数学实验线代中的若干问题Word文档格式.docx
《基于matlab的数学实验线代中的若干问题Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于matlab的数学实验线代中的若干问题Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
下面我们通过一个具体的代数方程求根的例子来说明选择的依据和准则,
例 用迭代法求代数方程根的例子:
让我们来求如下方程的根
(2)
首先要确定适当的包含根的区间,这可以依据闭区间上连续函数的介值定理来确定,例如,,,所以方程
(2)至少有一个实根属于区间,图1表明区间中只含有一个根,显然方程
(2)的根不易直接求得。
图1
下面,我们采用迭代法求方程
(2)位于区间中的根,为此构造迭代算法如下(原因稍后加以说明):
,(3)
在区间中任取一个迭代初值,如取初值。
执行下面的程序:
EqutIteration.m:
x=[];
x
(1)=2;
n=100;
fori=1:
100;
x(i+1)=(0.3+x(i)*sin(x(i)))/(x(i)*(2.3-x(i)));
ifabs(x(i+1)-x(i))<
1e-15;
break
else
N=i+1;
end
end
N
x
plot([1:
length(x)],x)
title('
ITERATIONFORSOLVINGEQUATION'
)
gtext('
CurveofIteration'
共迭代42次,得到结果如下:
2.00003.53100.23940.72330.68280.66180.65190.64730.64530.64440.64410.64390.64380.6438
0.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.6438
0.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.64380.6438
可以看出n=13以后,在取4位有效数字时不再变化,下图也表明了这一事实,事实上(能够证明)用迭代所求方程的根,误差不超过9.91514e-020,这是相当精确的。
图2
以上我们已经看到,按迭代算法(3)生成的数列不仅收敛而且收敛于所求方程的根,这种收敛性是对迭代算法的基本要求,下面的定理给出了迭代算法收敛的一个充分条件:
定理 设方程在上存在唯一解,是方程的等价形式,如果
1、在上连续可微;
2、对任何,;
3、,
则对任何,由迭代算法
, (4)
生成的序列收敛于方程在上的唯一解。
问题与实验1:
用迭代算法(3)能否求出方程
(2)的所有解?
不妨用程序EqutIteration.m先做实验,再说明原因。
问题与实验2:
就方程
(2)或选择别的例子构造不同的收敛迭代法,通过实验和比较,你可能会有所感悟。
2.3 (非)线性方程组的场合
用迭代法求解线性方程组,首先要把线性方程组写成等价的形式
(5)
式(5)的右端称为迭代格式,由迭代格式(5)确定如下的迭代算法:
(6)
对于给定的线性方程组,可以写成不同的(无穷多)迭代格式,有意义的(可用的)迭代格式应具有收敛性―生成的解向量序列收敛于方程组的解;
而好的迭代法应具有较高的收敛速度。
关于迭代法收敛性的两个判别条件:
a、充分必要条件是:
矩阵的谱半径
b、充分条件是:
矩阵的某个算子范数。
设是方程组(5)的解,是迭代法(6)生成的任一序列,因为
,
所以
(7)
设,其中矩阵是矩阵的Jordan标准型,那么容易验证,并且
(8)
此外,因为
(9)
(10)
注:
迭代格式(6)所确定的迭代法收敛与否,完全由系数矩阵决定,而与常数项无关.
例 用迭代法求线性方程组根的例子:
让我们来求5阶线性方程组:
其中
A=[4.39990.6686-1.60410.5287-1.0106;
0.69005.19080.25730.21930.6145;
0.8156-1.20254.0565-0.92190.5077;
0.7119-0.01981.41513.17071.6924;
1.2902-0.1567-0.8051-0.05925.5913]
b=[-0.4326;
-1.6656;
0.1253;
0.2877;
-1.1465]
构造迭代法(Jacobi迭代法)如下:
(5)
其中,
=
[0-0.15200.3646-0.12020.2297
-0.13290-0.0496-0.0422-0.1184
-0.20110.296400.2273-0.1252
-0.22450.0062-0.44630-0.5338
-0.23080.02800.14400.01060]
=[-0.0983
-0.3209
0.0309
0.0907
-0.2051]
使用程序
ITERA_J:
0.7120-0.01981.41513.17071.6924;
1.2902-0.1567-0.8051-0.05925.5913];
D=diag(diag(A));
LU=D-A;
M=D\LU;
f=D\b;
z=[];
x(:
1)=eye(5,1);
N=2000;
N;
ifnorm(A*x(:
i)-b)<
1e-010;
m=i;
x(:
i+1)=M*x(:
i)+f;
z=x(:
i+1);
m
e=norm(A*z-b)
JACOBIITERATIONOFLINEAREQUATIONS'
x1'
x2'
x3'
x4'
x5'
迭代42次,误差向量<
7.0162e-011,并且看出23以后,在取4位有效数字时不再变化,迭代过程如图3所示。
图3
问题与实验3:
一元线性迭代的收敛性条件怎样表述?
问题与实验4:
在本例中,,这时迭代序列是收敛的,就本例或选择别的例子,按和构造不同的迭代法,通过实验和比较,并给出你对实验结果的解释(如关于收敛性、收敛速度等),当然这需要你首先知道矩阵范数的概念,并且对它有比较好的理解。
1.4 不动点、k循环与混沌
我们已经知道任何函数(包括一元函数和多元函数)在其定义域内都对应一种迭代,对于非线性函数迭代来说,不动点是下面所定义的—循环的特例(1—循环):
定义:
设由迭代算法,,生成的序列具有如下性质:
(自然数集合),,,当时,
,, (6)
那么称是由迭代算法生成的—循环。
引例 关于迭代
(7)
实验与讨论。
容易求得迭代(7)有两个不动点:
和,图4给出了及迭代初值分别取和时,迭代收敛于的情形:
使用程序(ITERA1:
a=2;
y=[];
x
(1)=input('
pleaseinputthefirsevalueofiterationx
(1)=:
'
);
%x
(1)=0.01
y
(1)=input('
pleaseinputthefirsevalueofiterationy
(1)=:
%y
(1)=0.9
n=input('
pleaseinputthetotalnumberofiterationn=:
%n=150
n-1;
x(i+1)=a-(x(i)-sqrt(a))^2;
y(i+1)=a-(y(i)-sqrt(a))^2;
subplot(2,1,1)
plot(1:
n,x,'
bo'
subplot(2,1,2)
n,y,'
r*'
图4
图5给出了时,出现4—循环的情形:
使用程序(ITERA2:
a=3;
%2.5
%n=200
图5
图6给出了时,出现8—循环的情形:
使用程序(ITERA3:
a=3.16;
%1.5
%n=500
图6
图7给出了时,出现混沌现象的情形,迭代初值分别取、、和。
使用程序(ITERA4:
a=4;
please