迭代法实验

合集下载

大学数学实验报告----迭代(一)——方程求解

大学数学实验报告----迭代(一)——方程求解

Do M n , n, 2, 100
运行结果:
M n_Integer : Module y, k , m 2; k m ^ n 1 ;
x Mod k, n ;
Print n, " ", PrimeQ n , " ", x, "
", GCD m, n
Do M n , n, 2, 100
2 True 0 2 3 True 1 1 4 False 0 2 5 True 1 1 6 False 2 2 7 True 1 1 8 False 0 2 9 False 4 1 10 False 2 2 11 True 1 1 12 False 8 2 13 True 1 1 14 False 2 2 15 False 4 1 16 False 0 2 17 True 1 1 18 False 14 2 19 True 1 1 20 False 8 2 21 False 4 1 22 False 2 2 23 True 1 1 24 False 8 2 25 False 16 1 26 False 2 2 27 False 13 1 28 False 8 2 29 True 1 1 30 False 2 2 31 True 1 1 32 False 0 2 33 False 4 1 34 False 2 2 35 False 9 1 36 False 32 2 37 True 1 1 38 False 2 2 39 False 4 1 40 False 8 2
99 False 3 27 100 False 1 67 Null2
m=4 时
输入程序:
M n_Integer : Module y, k , m 4; k m ^ n 1 ; x Mod k, n ; Print n, " ", PrimeQ n , " ", GCD m, n , " ", x Do M n , n, 2, 100

雅各比迭代实验报告(3篇)

雅各比迭代实验报告(3篇)

第1篇一、实验目的1. 理解雅各比迭代法的原理和应用。

2. 掌握雅各比迭代法的计算步骤和实现方法。

3. 通过实验验证雅各比迭代法在求解线性方程组中的有效性和收敛性。

二、实验原理雅各比迭代法是一种求解线性方程组的迭代方法。

对于形如Ax=b的线性方程组,其中A是n×n的系数矩阵,x是n维未知向量,b是n维常数向量,雅各比迭代法的基本思想是将方程组Ax=b转化为一系列的简单方程进行迭代求解。

设A为对角占优矩阵,则雅各比迭代法的迭代公式为:x_{k+1} = (D - L)^{-1}(b - Ux_k)其中,D是A的对角矩阵,L是A的非对角元素中下三角矩阵,U是A的非对角元素中上三角矩阵。

三、实验内容1. 准备实验环境:安装MATLAB软件,创建实验文件夹。

2. 编写实验程序:(1)定义系数矩阵A和常数向量b。

(2)计算对角矩阵D、下三角矩阵L和上三角矩阵U。

(3)初始化迭代变量x_0。

(4)设置迭代次数N和容许误差ε。

(5)进行雅各比迭代计算,并输出每一步的迭代结果。

(6)判断迭代是否收敛,若收敛则输出最终结果,否则输出未收敛信息。

3. 运行实验程序,观察迭代过程和结果。

四、实验步骤1. 创建实验文件夹,打开MATLAB软件。

2. 编写实验程序,保存为“雅各比迭代法实验.m”。

3. 运行实验程序,观察迭代过程和结果。

4. 分析实验结果,验证雅各比迭代法的有效性和收敛性。

五、实验结果与分析1. 运行实验程序,得到以下迭代过程和结果:迭代次数 | 迭代结果---------|---------1 | x_1 = [0.3333, 0.3333]2 | x_2 = [0.3333, 0.3333]3 | x_3 = [0.3333, 0.3333]...N | x_N = [0.3333, 0.3333]2. 分析实验结果:(1)从实验结果可以看出,雅各比迭代法在求解线性方程组时,经过有限次迭代即可收敛。

迭代法实验

迭代法实验

实验五线性方程组的迭代法实验一. 实验目的(1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭代过程的收敛性,以及解决某些实际的线性方程组求解问题。

(2)熟悉Matlab编程环境,利用Matlab解决具体的方程求根问题。

二. 实验要求建立Jacobi迭代公式、Gauss-Seidel迭代公式和超松弛迭代公式,用Matlab软件实现线性方程组求解的Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代法,并用实例在计算机上计算。

三. 实验内容1. 实验题目(1)分别利用Jacobi迭代和Gauss-Seidel迭代求解下列线性方程组,取x0={0 ,0,0,0,0-,o}t (2)分别取w=1、1.05、1.1、1.25和 1.8,用超松弛法求解上面的方程组,要求精度为510。

2. 设计思想1.Jacobi迭代: Jacobi迭代的设计思想是将所给线性方程组逐步对角化,将一般形式的线性方程组的求解归结为对角方程组求解过程的重复。

2.Gauss-Seidel迭代: Gauss-Seidel迭代的设计思想是将一般形式的线性方程组的求解过程归结为下三角方程组求解过程的重复。

3.超松弛迭代:基于Gauss-Seidel迭代,对i=1,2,…反复执行计算迭代公式,即为超松弛迭代。

3. 对应程序1.Jacobi迭代:function [x,k]=Jacobimethod(A,b,x0,N,emg)%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;k=0;r=max(abs(b-A*x1));while r>emgfor i=1:nsum=0;for j=1:nif i~=jsum=sum+A(i,j)*x1(j);endendx2(i)=(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回');return;endendx=x1;2.Gauss-Seidel迭代:function [x,k]=Gaussmethod(A,b,x0,N,emg)%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;r=max(abs(b-A*x1));k=0;while r>emgfor i=1:nsum=0;for j=1:nif j>isum=sum+A(i,j)*x1(j);elseif j<isum=sum+A(i,j)*x2(j);endendx2(i)=(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回');return;endendx=x1;3.超松弛(SOR)迭代:function [x,k]=SORmethod(A,b,x0,N,emg,w)%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解%w表示松弛因子n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;r=max(abs(b-A*x1));k=0;while r>emgfor i=1:nsum=0;for j=1:nif j>=isum=sum+A(i,j)*x1(j);elseif j<isum=sum+A(i,j)*x2(j);endendx2(i)=x1(i)+w*(b(i)-sum)/A(i,i); endr=max(abs(x2-x1)); x1=x2; k=k+1; if k>Ndisp('迭代失败,返回'); return; end end x=x1;四. 实验体会 在同等精度下,Gauss-Seidel 迭代法比Jacobi 迭代法收敛速度快。

计算方法-线性方程组的迭代法实验

计算方法-线性方程组的迭代法实验

实验五 线性方程组的迭代法实验一. 实验目的(1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭代过程的收敛性,以及解决某些实际的线性方程组求解问题。

(2)熟悉Matlab 编程环境,利用Matlab 解决具体的方程求根问题。

二. 实验要求建立Jacobi 迭代公式、Gauss-Seidel 迭代公式和超松弛迭代公式,用Matlab 软件实现线性方程组求解的Jacobi 迭代法、Gauss-Seidel 迭代法和超松弛迭代法,并用实例在计算机上计算。

三. 实验内容1. 实验题目(1)分别利用Jacobi 迭代和Gauss-Seidel 迭代求解下列线性方程组,取()T 0,0,0,0,0,0=x ,要求精度510-=ε:⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡---------------626050410100141010014001100410010141001014654321x x x x x x ①Jacobi 迭代:②Gauss-Seidel迭代:(2)分别取1ω、1.05、1.1、1.25和1.8,用超松弛法求解上面的方程组,要求精度=为5ε。

=10-超松弛迭代代码如下所示:运行时初始化如下:分别以不同的松弛因子代入,W=1:W=1.05W=1.1:W=1.25W=1.8:当最大迭代次数增加时,我们可以看到,x向量的各个元素都变无穷大了,迭代发散2. 设计思想要求针对上述题目,详细分析每种算法的设计思想。

求解线性方程组的迭代法,其实质是将所给的方程组逐步地对角化或三角化,即将线性方程组的求解过程加工成对角方程组或三角方程组求解过程的重复。

⑴Jacobi迭代:将一般形式的线性方程组归结为对角方程组求解过程的重复;⑵Gauss-Seidel迭代:将一般形式的线性方程组的求解归结为下三角方程组求解过程的重复;⑶超松弛法:选择合适的松弛因子,利用旧值生成新值,使迭代加速;四.实验体会对实验过程进行分析总结,对比求解线性方程组的不同方法的优缺点,指出每种方法的设计要点及应注意的事项,以及自己通过实验所获得的对线性方程组求解问题的各种解法的理解。

MAAB计算方法迭代法牛顿法二分法实验报告

MAAB计算方法迭代法牛顿法二分法实验报告

MAAB计算方法迭代法牛顿法二分法实验报告实验目的:比较MAAB计算方法中迭代法、牛顿法和二分法的优缺点,探究它们在求解方程中的应用效果。

实验原理:1、迭代法:将方程转化为x=f(x)的形式,通过不断迭代逼近方程的根。

2、牛顿法:利用函数在特定点的切线逼近根的位置,通过不断迭代找到方程的根。

3、二分法:利用函数值在区间两端的异号性质,通过不断二分缩小区间,最终逼近方程的根。

实验步骤:1、选择一元方程进行求解,并根据方程选择不同的计算方法。

2、在迭代法中,根据给定的初始值和迭代公式,进行迭代计算,直到满足预设的迭代精度要求。

3、在牛顿法中,选择初始点,并根据切线方程进行迭代计算,直到满足预设的迭代精度要求。

4、在二分法中,选择区间,并根据函数值的异号性质进行二分,直到满足预设的迭代精度要求。

5、根据计算结果,比较三种方法的求解效果,包括迭代次数、计算时间、求解精度等指标。

实验结果与分析:通过对多个方程进行测试,得到了以下实验结果:1、迭代法的优点是简单易懂,适用范围广,但当迭代公式不收敛时会导致计算结果不准确。

2、牛顿法的优点是收敛速度较快,但需要计算函数的一阶导数和二阶导数,对于复杂函数较难求解。

3、二分法的优点是收敛性较好,不需要导数信息,但收敛速度较慢。

4、对于线性方程和非线性方程的求解,牛顿法和迭代法通常比二分法更快速收敛。

5、对于多重根的方程,二分法没有明显优势,而牛顿法和迭代法能更好地逼近根的位置。

6、在不同的方程和初值选择下,三种方法的迭代次数和求解精度略有差异。

7、在时间效率方面,二分法在收敛速度较慢的同时,迭代次数较少,牛顿法在收敛速度较快的同时,迭代次数较多,而迭代法对于不同方程有较好的平衡。

结论:1、对于不同类型的方程求解,可以根据具体情况选择合适的计算方法。

2、迭代法、牛顿法和二分法各有优缺点,没有绝对的最优方法,需要权衡各种因素选择最适合的方法。

3、在实际应用中,可以根据方程的特点和精度要求综合考虑不同方法的优劣势,以获得较好的求解效果。

数学数学实验Newton迭代法

数学数学实验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法具有局部收敛性,所以在实际问题中,当实际问题本身能提供接近于根的初始近似值时,就可保证迭代序列收敛,但当初值难以确定时,迭代序列就不一定收敛。

迭代法求平方根C语言实验报告

迭代法求平方根C语言实验报告

实验五: 迭代法求平方根
物理学416班赵增月F12 2011412194 日期: 2013年10月31日
一·实验目的
1.熟练掌握程序编写步骤;
2.学习使用循环结构。

二·实验器材
1.电子计算机;
2.VC6.0
三·实验内容与流程
1.流程图
2.输入以下程序#include<stdio.h>
#include<math.h>
void main()
{
float x2,x1,a;
printf("请输入实数a=");
scanf("%f",&a);
x2=a*0.5;
do
{ x1=x2;
x2=0.5*(x1+a/x1);
}while(fabs(x2-x1)>1e-5);
printf("a 的平方根是: %f\n",x2);
}
四·实验结果
运行显示如下:
请输入实数a=4
a 的平方根是: 2.000000
Press any key to continue
五·实验总结与反思
1.注意循环的初始值的设定, 要保证循环可以进行;
2.循环必须有结束的条件, do while结构中, 不满足循环条件跳出循环。

3.。

MATLAB计算方法迭代法牛顿法二分法实验报告

MATLAB计算方法迭代法牛顿法二分法实验报告

MATLAB计算方法迭代法牛顿法二分法实验报告实验报告一、引言计算方法是数学的一门重要应用学科,它研究如何用计算机来解决数学问题。

其中,迭代法、牛顿法和二分法是计算方法中常用的数值计算方法。

本实验通过使用MATLAB软件,对这三种方法进行实验研究,比较它们的收敛速度、计算精度等指标,以及它们在不同类型的问题中的适用性。

二、实验方法1.迭代法迭代法是通过不断逼近解的过程来求得方程的根。

在本实验中,我们选择一个一元方程f(x)=0来测试迭代法的效果。

首先,我们对给定的初始近似解x0进行计算,得到新的近似解x1,然后再以x1为初始近似解进行计算,得到新的近似解x2,以此类推。

直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。

本实验将通过对复杂方程的迭代计算来评估迭代法的性能。

2.牛顿法牛顿法通过使用函数的一阶导数来逼近方程的根。

具体而言,对于给定的初始近似解x0,通过将f(x)在x0处展开成泰勒级数,并保留其中一阶导数的项,得到一个近似线性方程。

然后,通过求解这个近似线性方程的解x1,再以x1为初始近似解进行计算,得到新的近似解x2,以此类推,直到两次计算得到的近似解之间的差值小于规定的误差阈值为止。

本实验将通过对不同类型的方程进行牛顿法的求解,评估它的性能。

3.二分法二分法是通过将给定区间不断二分并判断根是否在区间内来求方程的根。

具体而言,对于给定的初始区间[a,b],首先计算区间[a,b]的中点c,并判断f(c)与0的大小关系。

如果f(c)大于0,说明解在区间[a,c]内,将新的区间定义为[a,c],再进行下一轮的计算。

如果f(c)小于0,说明解在区间[c,b]内,将新的区间定义为[c,b],再进行下一轮的计算。

直到新的区间的长度小于规定的误差阈值为止。

本实验将通过对复杂方程的二分计算来评估二分法的性能。

三、实验结果通过对一系列测试函数的计算,我们得到了迭代法、牛顿法和二分法的计算结果,并进行了比较。

实验4 求解线性方程组的迭代法

实验4 求解线性方程组的迭代法

实验4 解线性方程组的迭代法一、稀疏矩阵的生成和运算实验内容:稀疏矩阵相关命令的熟悉。

实验要求:1、熟悉sparse、full、nnz、spy等命令的使用方法.(实验报告)注意:spy使用时要加上输入参数,直接运行spy会出现与本课程无关的结果。

2、了解sprand命令的用法。

3、熟悉speye、condest、normest、spdiags等命令的使用方法,并生成107阶的三对角矩阵:(实验报告)二、大型稀疏线性方程组的求解实验内容:用不同的迭代法求解n阶大型稀疏矩阵Ax=b(n=1e+4)。

实验要求:(1)数学问题的生成:(a)使用sprand命令生成,稀疏度0.001,并通过spy观察矩阵的结构;(b)运行PPT第21页的两段代码,分别生成A,运行结果有什么区别?注意:如果用稠密方式生成矩阵,可能会导致内存不够。

(2)增大矩阵阶数到1e+6,使用MATLAB自带的pcg与“\”运算,以及分别Gauss消去法、Jacobi迭代法和Gauss-Seidel迭代法分别求解以下Sx=b,看看运算时间对比:(实验报告)b为全1向量,S为以下代码所生成:m=1000,n=m*m;eone=ones(m,1);s=spdiags([-eone,8*eone,-eone],[-1,0,1],m,m);E=speye(m);a1=blkdiag(kron(E,s));a2=spdiags([ones(n,1)],[m],n,n);A=a1-a2-a2';注意:pcg命令只适用于对称正定矩阵三、病态的线性方程组的求解实验内容:考虑方程组Hx=b的求解,其中系数矩阵H为Hilbert矩阵,首先给定解(例如取为各个分量均为1)再计算出右端b的办法给出确定的问题。

实验要求:(1)设定n=6,分别用Gauss消去法、Jacobi迭代法和Gauss-Seidel迭代法求解方程组,其各自的结果如何?各方法的误差比较如何?(实验报告)(2)逐步增大问题的维数100、1000、3000,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(实验报告)。

牛顿迭代法的数值实验和仿真

牛顿迭代法的数值实验和仿真

牛顿迭代法的数值实验和仿真牛顿迭代法是一种广泛应用于求解非线性方程的方法。

它的基本思想是通过不断接近方程的根,使得函数在根附近的一段区间内表现出线性的特征,从而不断逼近方程的解。

在本文中,我们将介绍牛顿迭代法的数值实验和仿真,并通过实例来展示该方法在实际问题中的应用。

1. 牛顿迭代法的原理牛顿迭代法的原理是利用泰勒级数来逼近函数的根。

具体来说,对于非线性方程 f(x) = 0,我们首先可以通过牛顿迭代公式:$x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}$来计算出一个初始解 $x_0$,然后不断通过公式进行迭代,直到满足一定的收敛条件。

其中,$f'(x)$ 表示 $f(x)$ 对 $x$ 的导数,也就是函数的斜率。

这个公式的推导是通过将函数在 $x_n$ 处进行一阶泰勒展开得到的。

2. 牛顿迭代法的数值实验为了验证牛顿迭代法的有效性,我们可以进行一些简单的数值实验。

现在考虑求解方程 $x^3 - 5x^2 + 3x -7 = 0$ 在 $[1,2]$ 中的解。

我们首先可以通过图像观察到该方程在1 到2 之间有一个根。

我们可以用 Matlab 程序来实现迭代计算,代码如下:function [x,it] = newton(f,df,x0,tol,maxit)for it = 1:maxitx = x0-f(x0)/df(x0);if abs(x-x0) < tol, return, endx0 = x;enderror('Maximum number of iterations reached')在代码中,f(x) 和 df(x) 分别表示要求解的方程和其一阶导数。

tol 表示迭代的停止条件,如果$|x_{n+1}-x_n|<tol$,则停止迭代。

maxit 表示最大的迭代次数,如果迭代次数超过了该限制,则停止迭代。

我们可以通过调用该程序,输入相应的参数来进行数值实验。

Jacobi迭代法求解线性方程组实验报告

Jacobi迭代法求解线性方程组实验报告

仿真平台与工具应用实践Jacobi迭代法求解线性方程组实验报告院系:专业班级:姓名:学号:指导老师:一、实验目的熟悉Jacobi迭代法原理;学习使用Jacobi迭代法求解线性方程组;编程实现该方法;二、实验内容应用Jacobi迭代法解如下线性方程组:, 要求计算精度为三、实验过程(1)、算法理论迭代格式的引出是依据迭代法的基本思想: 构造一个向量系列, 使其收敛至某个极限, 则就是要求的方程组的准确解。

Jacobi迭代将方程组:在假设, 改写成如果引用系数矩阵, 及向量, , ,方程组(1)和(2)分别可写为: 及, 这样就得到了迭代格式用迭代解方程组时, 就可任意取初值带入迭代可知式, 然后求。

但是, 比较大的时候, 写方程组和是很麻烦的, 如果直接由, 能直接得到, 就是矩阵与向量的运算了, 那么如何得到, 呢?实际上, 如果引进非奇异对角矩阵将分解成:要求的解, 实质上就有而是非奇异的, 所以存在, 从而有我们在这里不妨令就得到迭代格式:(2)算法框图(3)、算法程序m 文件:function x=jacobi(A,b,P,delta,n)N=length(b); %返回矩阵b的最大长度for k=1:nfor j=1:Nx(j)=(b(j)-A(j,[1:j-1,j+1:N])*P([1:j-1,j+1:N]))/A(j,j);enderr=abs(norm(x'-P)); %求(x'-P)模的绝对值P=x';if(err<delta) %判断是否符合精度要求break;endendE=eye(N,N); %产生N行N列矩阵D=diag(diag(A));f=A*inv(D); %f是A乘D的逆矩阵B=E-f;Px=x';k,errBMATLAB代码:>> clear allA=[4, -1, 1;4, -8, 1;-2, 1, 5];b=[7, -21, 15]';P=[0,0,0]';x=jacobi(A,b,P,1e-7,20)(4)、算法实现用迭代法求解方程组:正常计算结果是2, 3, 4 , 下面是程序输出结果:P =2.00004.00003.0000k =17err =9.3859e-008B =0 -0.1250 -0.2000-1.0000 0 -0.20000.5000 0.1250 0x =2.00004.00003.0000四、实验体会五、MATLAB是非常实用的软件, 能够避免大量计算, 简化我们的工作, 带来便捷。

迭代法求解方程问题实验报告

迭代法求解方程问题实验报告

迭代法求解方程问题实验报告姓名:殷伯旭 班级:信计0801班 学号:u200810065一. 实验目的运用数学知识与matlab 相结合,运用数学方法,建立数学模型,用matlab 软件辅助求解模型,解决实际问题。

二. 实验任务求方程1020x e x +-=的一个近似解,误差不超过410-,要求: 设计4种求解的迭代法,讨论其收敛性,并求出满足精度的近似解;三. 实验分析与求解题目要求设计四种迭代方法,我们考虑用书上的四种迭代思想:方法一:用Steffenson 迭代法,首先构造函数:2()10xe g x -=, 则迭代公式为:21(())k k k k k k kg x x x x +-=- 方法二:一般的迭代法,1210k k x e x +-=方法三:单点弦截法法,固定01()()()()0.25,f a b a f b f a a x x --==-, 其中端点120,a b ==,则迭代公式为:010()()()()k k k k k f x x x x x f x f x +=--- 方法四:双点弦截法法,迭代公式为:111()()()()k k k k k k k f x x x x x f x f x +--=--- 实验程序:function shiyan112%%%%%方法一: stefften 迭代x0=0.25;g0=(2-exp(x0))/10;gg0=(2-exp(g0))/10;x1=x0-(g0-x0)^2/(gg0-2*g0+x0);n1=0;while abs(x1-x0)>0.00001x0=x1;g0=(2-exp(x0))/10;gg0=(2-exp(g0))/10;x1=x0-(g0-x0)^2/(gg0-2*g0+x0);n1=n1+1;x(n1)=x1;endn1x0=x1%%%%%方法二: 一般迭代x20=0.25;x21=(2-exp(x20))/10;n2=0;while abs(x21-x20)>0.00001x20=x21;x21=(2-exp(x20))/10;n2=n2+1;endn2x20=x21%%%%%方法三: 单点弦截法x30=0.25;a=0;b=0.5;n3=0;fa=exp(a)+10*a-2;fb=exp(b)+10*b-2;x31=a-fa*(b-a)/(fb-fa);f30=exp(x30)+10*x30-2;f31=exp(x31)+10*x31-2;x32=x31-f31*(x31-x30)/(f31-f30); while abs(x32-x31)>0.00001x31=x32;f31=exp(x31)+10*x31-2;x32=x31-f31*(x31-x30)/(f31-f30);n3=n3+1;endn3x30=x32%%%%%%%方法四:双点弦截法x40=0.25;x41=0.5;n4=0;f40=exp(x40)+10*x40-2;f41=exp(x41)+10*x41-2;x42=x41-f41*(x41-x40)/(f41-f40);while abs(x42-x41)>0.00001x40=x41;x41=x42;f40=exp(x40)+10*x40-2;f41=exp(x41)+10*x41-2;x42=x41-f41*(x41-x40)/(f41-f40);n4=n4+1;endn4x40=x42运行结果:(1) 方法一: x =0.0905 ; 迭代次数: n1 = 2(2)方法二: x =0.0905 ; 迭代次数: n2 = 5(3) 方法三: x =0.0905 ; 迭代次数: n3 = 2(4) 方法四: x =0.0905 ; 迭代次数: n4 =33)实验总结通过自主学习matlab,编程能力有了较大提高,并将其应用于数值代数刚学的一种思想,在加深对该领域印象的同时对matlab有了更深一层的了解。

实验二:迭代法、初始值与收敛性

实验二:迭代法、初始值与收敛性

实验二:迭代法、初始值与收敛性一:实验要求考虑一个简单的代数方程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进行实验,并画出迭代结果的趋势图。

计算方法jacobi迭代法与高斯seidel迭代法实验

计算方法jacobi迭代法与高斯seidel迭代法实验

实验名称:实验3 jacobi 迭代法与Gauss-seidel 迭代法 实验题目:给定线性方程组Ax=b 如下⎪⎪⎩⎪⎪⎨⎧=+--=-+-=+-+-=+-15831110225311621043243214321321x x x x x x x x x x x x x x 实验目的:掌握用jacobi 迭代法与Gauss-seidel 迭代法求解线性方程组的基本步骤。

基础理论:jacobi 迭代法基本思路是方程组Ax=b 等价于x=Bx+f,然后通过迭代算出方程组的解;Gauss-seidel 迭代法主要是通过对A 的分解,构造迭代公式,进而迭代算出方程组的解。

实验环境:操作系统:Windows XP ;实验平台:matlab实验过程: 方法一: jacobi 迭代法程序:n=4;A=[10,-1,2,0;-1,11,-1,3;2,-1,10,-1;0,3,-1,8]; b=[6,25,-11,15];x0=[0,0,0,0];x0=zeros(n,1);x=x0;epsilon=input('\n 精度=');N=input('\n 最大迭代次数N=');fprintf('\n%d:',0);for i=1:nfprintf('\%f',x0(i));end%以下是迭代过程for k=1:N%这是第k步迭代,迭代前的向量在x0[]中,迭代后的在x[]中normal=0;for i=1:nx(i)=b(i);for j=1:nif j~=ix(i)=x(i)-A(i,j)*x0(j);endendx(i)=x(i)/A(i,i);temp=abs(x(i)-x0(i));%求范数与迭代在同一个循环中if temp > normalnormal=temp; %这里用的是无穷范数endend %第i步迭代结束fprintf('\n%d:',k);for i=1:nx0(i)=x(i); %为下一次迭代准备初值fprintf('%f',x(i)); %输出迭代过程endif normal < epsilonreturn;endendfprintf('\n\n迭代%d次后仍未求得满足精度的解\n',N); 结果:结果分析:jacobi迭代法解线性方程组迭代的次数较多。

数学实验-迭代(方程求解)

数学实验-迭代(方程求解)

实验六 迭代(方程求解)一.实验目的:认识迭代数列,考察迭代数列的收敛性.并学会用Mathematica 系统对线性和非线性的方程组进行迭代求解.二.实验环境:计算机,Mathematica 数学软件,Word 文档,课本。

三.实验的基本理论和方法:给定迭代函数f(x)以及一个初值0x 利用1(),0,1,n n x f x n +==⋅⋅⋅迭代得到数列n x ,0,1,n =⋅⋅⋅.如果数列n x 收敛与某个*x ,则有**()x f x =.即*x 是方程()x f x =的解.由此用如下的方法求方程()0g x =的近似解。

将方程()0g x =改写为等价的方程()x f x =,然后选取一初值利用1(),0,1,n n x f x n +==⋅⋅⋅做迭代.迭代数列n x 收敛的极限就是()0g x =的解.线性方程组以及非线性方程组的求解与单变量的方程求解方法类似.实验内容和步骤四.实验内容与结果 1.线性方程组⑴编写给定初值0x 及迭代函数()f x ,迭代n 次产生相应的序列.⑵给函数()(2/)f x x x =+初值为0进行迭代80次所产生的迭代序列并显示. 输入程序:Iterate f_,x0_,n_Integer :Module t ,i,temp x0,AppendTo t,temp ;For i1,in,i ,tempf temp ;AppendTo t,temp;tf x_:x 2x2;Iterate f,1.,80运行结果得:1.,1.5,1.41667,1.41422,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421,1.41421输入程序:NTIterate g_,x0_,n_Integer :Modulei,var x0,t ,h,h x_Dt g x ,x;For i 1,i n,i ,AppendTo t,var ;If h var0,var N var g var h var ,20, Print"Divided by Zero after",i,"'s iterations.";Break ;tg x_:x^32;NTIterate g,1,40运行结果得:1,1.3333333333333333333,1.2638888888888888889,1.2599334934499769665,1.259921050017769774,1.259921049894873165,1.259921049894873165,1.259921049894873165,1.25992104989487316,1.25992104989487316,1.25992104989487316,1.2599210498948732,1.2599210498948732,1.2599210498948732,1.259921049894873,1.259921049894873,1.259921049894873,1.259921049894873,1.25992104989487,1.25992104989487,1.25992104989487,1.2599210498949,1.2599210498949,1.2599210498949,1.259921049895,1.259921049895,1.259921049895,1.259921049895,1.25992104989,1.25992104989,1.25992104989,1.2599210499,1.2599210499,1.2599210499,1.259921050,1.259921050,1.259921050,1.259921050,1.25992105, 1.259921052. 非线性方程组⑴对于给定的矩阵M ,数组f 和初始向量0x ,由迭代1n n x Mx f +=+编写迭代程序,并选择初值分别迭代20和50次所产生的序列. 迭代40次运行结果: 输入程序:LSIterate m_,f_List,f0_List,n_Integer :Modulei,var f0,t Table ,i,n,For i1,in,i,tivar;varm.varf ;t m1,0.4,0.5,1;f1,1;f00,0;LSIterate m,f,f0,40运行结果得:0,0, 1.,1., 2.4,2.5, 4.4,4.7,7.28,7.9,11.44,12.54,17.456,19.26,26.16,28.988,38.7552,43.068,56.9824,63.4456,83.3606,92.9368,121.535,135.617,176.782,197.385,256.736,286.776,372.446,416.144,539.904,603.367,782.251,874.319,1132.98,1266.44,1640.56,1833.93,2375.13,2655.21,3438.22,3843.78,4976.73,5563.88,7203.28,8053.25,10425.6,11655.9,15088.9,16869.7,21837.8,24415.1,31604.9,35335.,45739.9,51138.5,66196.3,74009.4,95801.,107109.,138645.,155010.,200650.,224334.,290385.,324660.,420250.,469854.,608192.,679980.,880185.,984077.,1.27382106,1.42417106, 1.84349106,2.06108106,2.66792106,2.98282106,3.86105106,4.31678106迭代60次运行结果输入程序:LSIterate m_,f_List,f0_List,n_Integer:Modulei,var f0,t Table,i,n,For i1,i n,i,t i var;var m.var f;tm1,0.4,0.5,1;f1,1;f00,0;LSIterate m,f,f0,60运行结果得:1,1.3333333333333333333,1.2638888888888888889,1.2599334934499769665,1.259921050017769774,1.259921049894873165,1.259921049894873165,1.259921049894873165,1.25992104989487316,1.25992104989487316,1.25992104989487316,1.2599210498948732,1.2599210498948732,1.2599210498948732,1.259921049894873,1.259921049894873,1.259921049894873,1.259921049894873,1.25992104989487,1.25992104989487,1.25992104989487,1.2599210498949,1.2599210498949,1.2599210498949,1.259921049895,1.259921049895,1.259921049895,1.259921049895,1.25992104989,1.25992104989,1.25992104989,1.2599210499,1.2599210499,1.2599210499,1.259921050,1.259921050,1.259921050,1.259921050,1.25992105,1.25992105⑵改写矩阵的等价形式,给定数组f 和初始向量0x ,运用迭代格式11()x I D A x D b --=-+编写迭代程序。

牛顿迭代法实验课件

牛顿迭代法实验课件

05
结论与展望
牛顿迭代法的优缺点总结
收敛速度快
牛顿迭代法在初始点接近真实根的情况下具有非常快的收敛速度。
适用于多维问题
可以推广到多维问题,通过引入更多的方程和变量来求解复杂的问题。
牛顿迭代法的优缺点总结
• 适用于非线性问题:能够处理非线性方程 的求解问题,这是许多其他方法无法做到 的。
牛顿迭代法的优缺点总结
初始值影响
初始值对迭代结果有一定影响,但只要在合理范围内,最终都能 收敛到正确解。
结果误差分析
绝对误差
(|x - x_{true}| = 0.00002698)
相对误差
(frac{|x - x_{true}|}{|x_{true}|} = 0.0027%)
误差来源
主要来源于舍入误差和计算过程中的近似处理。
牛顿迭代法实验课件
目录
• 引言 • 牛顿迭代法的基本原理 • 牛顿迭代法的实现步骤 • 实验结果与分析 • 结论与展望
01
引言
牛顿迭代法的定义
牛顿迭代法是一种数值计算方法,通 过迭代的方式求解非线性方程的根。
它基于牛顿定理,即函数在某点的切 线与x轴的交点即为该函数的根。
牛顿迭代法的应用场景
在金融领域的应用
牛顿迭代法可以用于求解金融领 域中的复杂模型和优化问题,例 如资产定价和风险管理。
在工程领域的应用
牛顿迭代法可以用于求解各种工 程领域的优化问题,例如结构分 析和控制系统设计。
感谢您的观看
THANKS
通过改进初始点的选择方法,提 高迭代过程的成功率和收敛速度。
在迭代过程中引入阻尼因子,以 避免迭代过程在鞍点处停滞不前。
根据迭代过程中的误差信息,自 适应地调整步长,以提高收敛速 度和稳定性。

迭代法实验报告

迭代法实验报告

迭代法实验报告 一. 实验目的:掌握迭代方法的用处 二. 实验环境:Cfree5.0 三. 实验时间:2013年6月20日 四. 实验地点:电子信息楼1201教室 五. 实验内容:运用编程实现迭代方法可以更好的解线性方程组,得到线性方程的解。

六. 实验理论依据:高斯-赛德尔(Gauss-Seidel )迭代公式我们注意到在雅可比迭代法中并没有对新算出的分量11k x +,12k x +,,11k i x +-进行充分利用.不妨设想,在迭代收敛的条件下,我们把(1)()()()11211331111(1)()()()22112332222(1)()()()1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++--⎧=---+⎪⎪⎪=---+⎪⎨⎪⎪⎪=---+⎪⎩式中第一个方程算出的11k x +立即投入到第二个方程中,代替()1k x 进行计算,当12k x +算出后代替()2k x 马上投入到第三个方程中计算,依次进行下去,这样也许会得到更好的收敛效果.根据这种思路建立的一种新的迭代格式,我们称为高斯-赛德尔(Gauss-Seidel )迭代公式,高斯=赛德尔迭代法的分量形式:(1)()()()11211331111(1)(1)()()22112332222(1)(1)(1)(1)1122,111()1(1(k k k k n n k k k k n n k k k k n n n n n n nn x a x a x a x b a x a x a x a x b a x a x a x a x b a +++++++--⎧=---+⎪⎪⎪=---+⎪⎨⎪⎪⎪=---+⎪⎩高斯-赛德尔迭代法的矩阵形式:(1)(),(0,1,2,)k k x Bx f k +=+=其中1()B D L U -=-,1()f D L b -=- B 称为高斯-赛德尔迭代矩阵,f 称为高斯-赛德尔迭代常量..七. 运行代码如下:#include"stdio.h"#include"math.h"int main(){bool pan1=true;int n,n1,n2=0,k=0;doublenum[100][100],L[100][100],U[100][100],x[100],y[100],num1=0,b[100],D[100][100],x1[200][200],x2[200][200];printf("\n");printf("*******************************高斯迭代法解如下********************************");printf("输入要输入矩阵的阶数为(按Enter 输入矩阵数字):");//输入矩阵的阶数scanf("%d",&n1);for(int i=0;i<n1;i++)//输入矩阵的数{printf("输入第%d行数字为(按Enter进入下一行的输入):",i+1);for(int j=0;j<n1;j++){scanf("%lf",&num[i][j]);}}//输入矩阵的数结束for(int i=0;i<n1;i++)//求解对角线上的矩阵数{for(int j=0;j<n1;j++){if(i==j){D[i][j]=num[i][j];L[i][j]=0;U[i][j]=0;}if(i>j){L[i][j]=-num[i][j];}if(i<j){U[i][j]=-num[i][j];}}}//求解对角线上的矩阵数结束printf("=================================输出D的矩阵为==================================");for(int i=0;i<n1;i++)//输出D矩阵 {for(int j=0;j<n1;j++){printf("%10lf",D[i][j]);}printf("\n");}printf("\n");printf("=================================输出L的矩阵为==================================");for(int i=0;i<n1;i++)//输出L矩阵{for(int j=0;j<n1;j++){printf("%10lf",L[i][j]);}printf("\n");}printf("\n");printf("=================================输出U的矩阵为==================================");for(int i=0;i<n1;i++)//输出U矩阵{for(int j=0;j<n1;j++){printf("%10lf",U[i][j]);}printf("\n");}printf("输入矩阵右端常数为(以空格隔开,按回车进行下一步):");//输入b的值for(int i=0;i<n1;i++){scanf("%lf",&b[i]);}//输入b的值结束printf("输入初始化x(0)的矩阵值(以空格隔开,按回车得到结果):");//输入x的值for(int i=0;i<n1;i++){scanf("%lf",&x2[0][i]);}while(pan1)//高斯迭代法的for语句部分 {for(int i=0;i<n1;i++){for(int j=0;j<i;j++){num1+=num[i][j]*x2[k+1][j];}for(int j1=i+1;j1<n1;j1++){num1+=num[i][j1]*x2[k][j1];}x2[k+1][i]=(b[i]-num1)/num[i][i];num1=0;}for(int i=0;i<n1;i++) {if(fabsf(x2[k+1][i]-x2[k][i])<0.002) {n2++;}}if(n2==n1){pan1=false; }else{k++;pan1=true; }}//高斯迭代法的for语句部分结束printf("迭代次数k的值为:%d\n",k);//输出迭代次数printf("输出的迭代法解的结果为:\n"); for(int i=0;i<n1;i++)//输出x的解{printf("第%d个x的值为:%lf\n",i+1,x2[k][i]);}printf("\n");}八.运行结果如下:九.实验心得:高斯=赛德尔迭代法其系数矩阵是严格对角占优的,所以高斯=赛德尔迭代法有很好的收敛性。

迭代法实验报告

迭代法实验报告

迭代法实验报告迭代法实验报告引言:迭代法是一种常见的数值计算方法,通过反复迭代逼近解的过程,来解决一些复杂的数学问题。

本实验旨在通过实际操作,深入理解迭代法的原理和应用,并通过实验数据验证其有效性。

一、实验目的本实验的主要目的有以下几点:1. 掌握迭代法的基本原理和步骤;2. 熟悉迭代法在数值计算中的应用;3. 理解迭代法的收敛性和稳定性;4. 验证迭代法在实际问题中的有效性。

二、实验原理迭代法是一种通过不断逼近解的方法,其基本原理可概括为以下几步:1. 选择一个初始值作为迭代的起点;2. 根据问题的特点和要求,构造一个递推公式;3. 通过不断迭代计算,逐步逼近解;4. 判断迭代过程是否收敛,并确定最终的解。

三、实验步骤1. 选择合适的初始值。

初始值的选择对迭代的结果有重要影响,通常需要根据问题的特点进行合理选取。

2. 构造递推公式。

根据问题的数学模型,建立递推公式,将问题转化为迭代求解的形式。

3. 进行迭代计算。

根据递推公式,进行迭代计算,直到满足收敛条件或达到预定的迭代次数。

4. 判断迭代结果。

根据实际问题的要求,判断迭代结果是否满足精度要求,并进行相应的调整和优化。

四、实验结果与分析通过实验操作,我们得到了一组迭代计算的结果。

根据实验数据,我们可以进行以下分析:1. 收敛性分析。

通过观察迭代过程中的数值变化,我们可以判断迭代法的收敛性。

如果数值逐渐趋于稳定,且与理论解的误差在可接受范围内,说明迭代法收敛。

2. 稳定性分析。

迭代法的稳定性是指在初始值变化时,迭代结果是否保持稳定。

通过改变初始值,我们可以观察迭代结果的变化情况,从而评估迭代法的稳定性。

3. 精度分析。

迭代法的精度取决于迭代过程中的误差累积情况。

通过与理论解的比较,我们可以评估迭代法的精度,并对迭代过程进行优化。

五、实验结论通过本次实验,我们深入了解了迭代法的原理和应用,通过实际操作验证了迭代法在数值计算中的有效性。

实验结果表明,迭代法在解决复杂数学问题中具有较高的准确性和稳定性,能够满足实际应用的需求。

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根

数值分析实验报告之迭代法求非线性方程的根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根据收敛准则,判断迭代结果是否满足收敛条件。

牛顿迭代法实训总结

牛顿迭代法实训总结

牛顿迭代法实训总结一、实验目的及原理通过上述牛顿迭代法实验,我们可以观察到水力坡度不仅与径向压强有关,而且还与径向剪应力和切向压强有关。

因此,当对水流进行控制时,我们必须将切向压强及径向剪应力综合考虑。

设想,将水流分为上下两层:上层为较小面积的稳定层;下层为较大面积的运动层。

如图1所示,在实际工程中,人们往往把稳定层作为输水管道的中间部分。

同时,也会在稳定层内增设一定厚度的保护层,这样可以使运动层承受一部分径向压强,而运动层内的流体又被稳定层阻挡,从而使其不能全部流出。

3))按步骤实验并记录数据,得出实验结论。

1)检查设备,了解仪器的名称、功能及用途。

2)将一支标准刻度的水压力表1支,装满标准容积的量筒2只,并注明它们的正确读数。

3)称取0。

5ln 水于两只量筒中,同时记录正确读数。

在该实验中,选择“ 0。

5— 0。

9”的一段量筒,利用它与固定管直径之比,即可调节管道的水力坡度。

4)将“ 0。

5— 0。

9”的那段量筒移至管内另一端,再次将量筒水位记录于“ 0。

5— 0。

9”处,使其“水头”恰等于管道上游最高水位加“上游水头”,此时,该段量筒就成为正确的“测量杯”。

4)设计方案,测定并记录水力坡度实验时,首先应确定被测定的水力坡度( 0。

02~0。

04)。

其次,要选择合适的管道口径,以便选用合适的刻度水压表。

一般应根据所需水头,使测定的值为工程需要的最小坡度。

5)在安全的前提下,尽可能采用多个刻度水压表。

如图2所示,将一支带有圆弧形的长柄直尺(或三角尺)装在水压力表上,将“水头”标在圆弧形水压力表下方,通过改变量尺长度的方法,使量尺圆弧半径依次变大,由此得到相应的水力坡度。

这种量尺叫做“百分表”。

如果水压力表是可调节式的,则可以通过改变量尺圆弧半径,来改变量尺水头高度,以改变水力坡度。

5)处理数据,绘出图象。

6)按步骤实验并记录数据,得出实验结论。

1)检查设备,了解仪器的名称、功能及用途。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五线性方程组的迭代法实验一. 实验目的(1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭代过程的收敛性,以及解决某些实际的线性方程组求解问题。

(2)熟悉Matlab编程环境,利用Matlab解决具体的方程求根问题。

二. 实验要求建立Jacobi迭代公式、Gauss-Seidel迭代公式和超松弛迭代公式,用Matlab软件实现线性方程组求解的Jacobi迭代法、Gauss-Seidel迭代法和超松弛迭代法,并用实例在计算机上计算。

三. 实验内容1. 实验题目(1)分别利用Jacobi迭代和Gauss-Seidel迭代求解下列线性方程组,取x0={0 ,0,0,0,0-,o}t (2)分别取w=1、1.05、1.1、1.25和 1.8,用超松弛法求解上面的方程组,要求精度为510。

2. 设计思想1.Jacobi迭代: Jacobi迭代的设计思想是将所给线性方程组逐步对角化,将一般形式的线性方程组的求解归结为对角方程组求解过程的重复。

2.Gauss-Seidel迭代: Gauss-Seidel迭代的设计思想是将一般形式的线性方程组的求解过程归结为下三角方程组求解过程的重复。

3.超松弛迭代:基于Gauss-Seidel迭代,对i=1,2,…反复执行计算迭代公式,即为超松弛迭代。

3. 对应程序1.Jacobi迭代:function [x,k]=Jacobimethod(A,b,x0,N,emg)%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;k=0;r=max(abs(b-A*x1));while r>emgfor i=1:nsum=0;for j=1:nif i~=jsum=sum+A(i,j)*x1(j);endendx2(i)=(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回');return;endendx=x1;2.Gauss-Seidel迭代:function [x,k]=Gaussmethod(A,b,x0,N,emg)%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;r=max(abs(b-A*x1));k=0;while r>emgfor i=1:nsum=0;for j=1:nif j>isum=sum+A(i,j)*x1(j);elseif j<isum=sum+A(i,j)*x2(j);endendx2(i)=(b(i)-sum)/A(i,i);endr=max(abs(x2-x1));x1=x2;k=k+1;if k>Ndisp('迭代失败,返回');return;endendx=x1;3.超松弛(SOR)迭代:function [x,k]=SORmethod(A,b,x0,N,emg,w)%A是线性方程组的左端矩阵,b是右端向量,x0是迭代初始值% N表示迭代次数上限,emg表示控制精度,k表示迭代次数,x是解%w表示松弛因子n=length(A);x1=zeros(n,1);x2=zeros(n,1);x1=x0;r=max(abs(b-A*x1));k=0;while r>emgfor i=1:nsum=0;for j=1:nif j>=isum=sum+A(i,j)*x1(j);elseif j<isum=sum+A(i,j)*x2(j);endendx2(i)=x1(i)+w*(b(i)-sum)/A(i,i); endr=max(abs(x2-x1)); x1=x2; k=k+1; if k>Ndisp('迭代失败,返回'); return; end end x=x1;四. 实验体会 在同等精度下,Gauss-Seidel 迭代法比Jacobi 迭代法收敛速度快。

一般来说,Gauss-Seidel 迭代法比Jacobi 迭代法收敛要快,但有时反而比Jacobi 迭代法要慢,而且Jacobi 迭代法更易于优化。

因此,两种方法各有优缺点,使用时要根据所需适当选取。

当松弛因子为1时,超松弛迭代方法等同于Gauss-Seidel 迭代法,这和理论推导完全相同。

另外,超松弛迭代法的收敛速度完全取决于松弛因子的选取,一个适当的因子能大大提高收敛速度。

实验四 线方程组的直接解法一、问题提出给出下列几个不同类型的线性方程组,请用适当算法计算其解。

1、 设线性方程组123456789104231210000865365010042213210310215131194426167332386857172635021342530116101191734212246271392012400183248631x x x x x x x x x x --⎡⎡⎤⎢⎢⎥--⎢⎢⎥⎢⎢⎥---⎢⎢⎥---⎢⎢⎥⎢⎢⎥---⎢⎢⎥--⎢⎢⎥⎢⎢⎥--⎢⎢⎥---⎢⎥⎢⎥-⎢⎥⎢⎥-----⎣⎦⎣5123234613381921⎤⎡⎤⎥⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥=⎥⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥-⎣⎦⎦(1,1,0,1,2,0,3,1,1,2)T x *=--2、 设对称正定阵系数阵线方程组1234567842402400022121320641141835620021614332321812241039433441114220253101142150633421945x x x x x x x x -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎢⎥⎢⎥⎢---⎢⎥⎢⎥⎢--⎢⎥⎢⎢⎥⎣⎦⎣⎦⎣⎦⎥⎥⎥⎥ (1,1,0,2,1,1,0,2)T x *=--三对角形线性方程组123456789104100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014x x x x x x x x x x -⎡⎤⎡⎤⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎢⎥--⎢⎢⎥⎢⎢⎥-⎣⎦⎣⎦7513261214455⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥-⎢⎥⎢⎥⎢⎥-⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥-⎣⎦*(2,1,3,0,1,2,3,0,1,1)Tx =---二、要求1、 对上述三个方程组分别利用Gauss 顺序消去法与Gauss 列主元消去法;平方根法与改进平方根法;追赶法求解(选择其一);2、 应用结构程序设计编出通用程序;3、 比较计算结果,分析数值解误差的原因;4、 尽可能利用相应模块输出系数矩阵的三角分解式。

三、目的和意义1、通过该课题的实验,体会模块化结构程序设计方法的优点;2、运用所学的计算方法,解决各类线性方程组的直接算法;3、提高分析和解决问题的能力,做到学以致用;3、 通过三对角形线性方程组的解法,体会稀疏线性方程组解法的特点。

四、实验学时:2学时 五、实验步骤:1.进入C 或matlab 开发环境; 2.根据实验内容和要求编写程序; 3.调试程序; 4.运行程序;5.撰写报告,讨论分析实验结果.实验五 解线性方程组的迭代法一、问题提出对实验四所列目的和意义的线性方程组,试分别选用Jacobi 迭代法,Gauss-Seidel 迭代法和SOR 方法计算其解。

二、要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如34510,10,10ε---=由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。

三、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤(1)k kxx ε+∞-<或k>(给予的迭代次数),对迭代法敛散性的意义;4、 体会初始解0x ,松弛因子的选取,对计算结果的影响。

四、实验学时:2学时 五、实验步骤:1.进入C 或matlab 开发环境;2.根据实验内容和要求编写程序; 3.调试程序; 4.运行程序;5.撰写报告,讨论分析实验结果.例3 例3 用平方根法分解对称正定矩阵⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--=5375217522541114....A解 5021241121211111.l a l a l -=-=====5021113131.l a l ===22502542212222=-=-=..l a l()51250507522221313232....l l l a l =--=-= 1252250532322313333=--=--=...l l a l于是T LL A =,其中⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-=151500050002...L由于A 为对称矩阵,因此,在电算时只要存储A 的下三角部分,其需要存储()121+n n 个元素,可用一维数组存放,即(){}nn n n a ,...a ,a ,...,a ,a n n A 212111121=⎥⎦⎤⎢⎣⎡+ 矩阵元素ij a 存放在()⎥⎦⎤⎢⎣⎡+121n n A 的第()j i i +-121个位置,L 的元素存放在A 的相应位置上.另外,平方根法的运算量是开平方 n 次;乘除法 nn n 31236123++次; 加减法 nn n 676123-+次. 当n 比较大时,平方根法的运算量和存贮量约为高斯消元法的二分之一,因此它是求解对称正定矩阵比较好的方法.为了避免开方运算,我们可以采用下面的分解式()24TLDL A =其中L 是单位下三角阵,D 是对角阵,由矩阵乘法,可得L 与D 的计算公式.对于n ,...,,i21=,有()2512111-=∑-=-=i ,...,,k d )l d l a (l k j k kj j ij ik ik()26112,d l a d j i j ij ii i ∑-=-=为了避免重复计算,我们引入()27jij ij d l t =于是上述公式可改写成对于n ,...,,i21=,有()2812111-=∑-=-=i ,...,,k ,l t a t k j kj ij ik ik()2921n,...,,k ,d t l kikik ==()3011,l t a d i j ij ij ii i ∑-=-=计算出LD T=的第i 行元素121-=i ,...,k ,t ik 后,存放在A 的第i 行相应位置,然后再计算L 的第i 行元素ik l 仍然存放在A 的第i 行,即用ik t 冲掉ik a ,再用ik l 冲掉ik t ,D 的对角线元素存放在A 的相应位置上.对称正定矩阵A 按TLDL 的分解和按T LL 分解其计算量差不多,但TLDL 分解不需要开方计算,它称为改进的平方根法. 四 追赶法在计算样条函数,解常微分方程边值问题,解热传导方程等都会要求解系数矩阵呈三对角线形的线性方程组,这时⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=------nn nn n n n n n n a a a a a a a a a a A 1111212322211211的LU 分解中,矩阵L 和U 分别取下二对角线和上二对角线形式,设⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=-nn nn l l l l l L 1222111 , ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=-111112n n u u U由LU A =得计算公式1111l a = n ,...,,i ,l a ii ii 3211==-- n ,...,,i ,l u l a ,ii i i ii ii 3211=+=-- 121111-==++n ,...,,i ,u l a ii i ii即1111a l =111212l a u =11--=ii ii a li i ii ii ii u l a l 11---=ii ii ii l a u 11++=n ,...,,i 32=此时,求解b Ax =等价于解两个二对角线方程组()31⎩⎨⎧==yUx b Ly自上而下解方程组b Ly =形象地称为“追”.1111l b y =()323211n,...,i ,l y l b y iii ii i i =-=--自下而上解方程组y Ux =称为“赶”.()3312111,,...,n i ,x u y x y x i ii i i nn -=-==++习惯,上述求解方法称为“追赶法”. 例4 用追赶法解三对角线方程组⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=-120202124343232121x x x x x x x x x x 解 由三对角分解公式有21111==a l21111212-==l a u 12121-==a l2321212212222=-=-=u l a l 2222323-==a u 13232-==a l3423323333=-=u l a l 43333434-==a u 14343-==a l4534434444=-=u l a l而由“追”公式有211111==l b y 312212122=-=l y l b y 413323233=-=l y l b y 14434344=-=l y l b y最后,由“赶”公式得原方程组的解144==y x 143433=-=x u y x 132322=-=x u y x121211=-=x u y x追赶法公式实际上就是把高斯消元法用到求解三对角线方程组上去的结果,这时由于A 特别简单,因此使得求解的计算公式非常简单,而且计算量仅有45-n 次乘除法,33-n 次加减法,仅占25-n 个存贮单元,所以可以在小机器上解高阶三对角线形的线性代数方程组.求解线性方程组的直接解法二 实验部分本章实验内容:实验题目:Gauss 消元法,追赶法,范数。

相关文档
最新文档