实验报告一Newton 迭代法求解非线性方程实验
一、实验内容
在公元1225年,比萨的数学家Leonardo(又称Fibonacci)宣布方程020010223=-++x x x 的一个根为368808107.1*≈x ,
当前颇为轰动,但没有人知道他是用什么办法得到的. 基于这个简单背景,希望我们能够利用Newton 法,来真切地体会这一结果.并取初值000000000.10=x 或500000000.10=x .
二、实验算法
第一步:非线性方程0)(=x f 取迭代函数为
()()()
'x x x f f x -
=? .
取恰当初值0x ,确定跟的容许误差ε,η的容许误差)(x f ,以及最大迭代的次数N.
第二步:用变量k 作为所进行的步数,即:
);;1(++<=k N k k for
并给定0x 的值 {//计算迭代函数:
()'
)
(111---
=-k k x x k k f
f x x
//对1--k k x x 和()k x f 进行与容许误差比较: 1--k k x x <ε或者()k x f <η,则跳出循环体,否则继续循环. 直至满足容许误差条件或者达到最大步数跳出循环}.
第三步:跳出循环,输出方程的近似根:k x .
三、变量说明
N 代表进行的最大步数,k 是代表当前进行的步数.c,d 分别代表
1--k k x x <ε的真值和()k x f <η的真值;a[N]代表
x [N]. p
和q 分别代表
()'11--k k x x f f 和,m,n 分别代表跟的容许误差和()k
x f 的容许误差,a[0]代表初值.
四、实验原理和流程图
实验原理 解非线性方程()
0=x f , Newton 法是利用)(x f 的近似取代,认
为近似方程的根即为原方程的根,即 在一定条件下,
())0处展开(在的x x Taylor f x =,()......)(')()(+-+=k x x x x x f f f k k 并取前两项即
())(')()(k x x x x x f f f k k -+≈并将其记为)(x g (近似方程),
显然0)(=x g 的根为
()')
(k k x x k f f x -
;
所以有
()'
)
(*k k x x k f
f x x -
≈
即可以通过给定初值进行迭代,于是有:
??
??
?
-=+0'1x f f x x k k
x x k k 即为牛顿迭代公式. 流程图
?
1ε<-+k k x x 开始
η
ε,,输入N 10
43201022
'
23)(++=-++=x x
f
x x x f k
k x x
')
()(1k k x x k k f
f x x -
=+
20
10212
1311-++=++++k k k x x x x f k ?
N k ≥1+=k k
否
否
否
是
k
x 输出是
是
?
1η<+k x f 1+=k k
五、源程序代码
#include
#include
#define N 100
main()
{
int k,c,d;
long double a[N],p,q,m=0.0000001, n=0.0000001;
for(k=1;k {a[0]=1.0; p=a[k-1]*a[k-1]*a[k-1]+2*a[k-1]*a[k-1]+10*a[k-1]-20; q=3*a[k-1]*a[k-1]+4*a[k-1]+10; a[k]=a[k-1]-p/q; c=(a[k]-a[k-1]) d=(p if((c||d)==1) break; } printf("%Lf\n", a[k]); } 六、实验结果 七、上机实验体会: 通过这次数值分析实验,在程序编译中我出现了很多问题,如○1单个变量名不能和数组变量的字母相同.○2C语言程序不能识别平方,只能用连乘.○3给数组赋初值的时候,不能在定义数组处定义.等 在此次试验也让我更进一步了解了数学与计算机的结合,并更懂得了程序的 方便性,我也认识到,自己在C语言方面的匮乏,以后在数学算法的基础上要加 强对计算机语言的学习,并将所学知识结合,解决实际问题. 实验报告二 矩阵的Doolittle 分解实验 一、实验内容 试对某经济系统在一个生产周期内的直接消耗系数矩阵 ?? ?? ? ?????=?20.010.010.010.020.020.010.025.025.03 3A 进行Doolittle 分解. 二、实验算法 第一步: 输入矩阵的阶数n ,和系数矩阵()ij a A =; 第二步:设置循环 ,计算ij u ,ij l . 最外部循环:for(k=0;k for (r=0;r for(r=0;r 三、变量说明 n 代表系数矩阵的阶数. i ,j ,k 作为角标.s 代表和. 四、实验原理 矩阵分解是把n 阶方阵A (一般是方程组的系数矩阵)分解成两个或以上简单矩阵的乘积,然后对矩阵A 的操作就转化为对这些简单矩阵的操作.Doolittle 分解就是矩阵分解的一种,把矩阵A 写成下列两个矩阵相乘的形式:A=LU ,其中L 为下三角矩阵,U 为上三角矩阵。这样我们可以把线性方程组 Ax=b 写成 b Ux L x LU Ax ===)()( 正如: LU A :111=? ??? ??????? ???????????????????????=????????? ????????????= 即为Doolittle 分解.这种分解源于Gauss 消元法,为求出矩阵L 和U ,根据阵乘法规则有 ij jj j i i i i i i j i a u u u l l l l U L =?????? ???? ? ???????????=?-00)0,,0,1,,,(21)1(321 可求得矩阵L,U. 令 y Ux =则原线性方程组b Ax =,化为两个简单的三角方程组: y Ux = (1) b Ly = (2) 于是可首先 求解(2)求得向量y ,然后求解(1), 从而求解线性方程组 Ax=b 的目的. 五、源程序代码 #include #define n 3 main() {int i,j; int k,r; long double l[n][n],u[n][n],s; long double a[n][n]={{0.25,0.10,0.10},{0.20,0.20,0.10},{0.10,0.10,0.20}}; for(k=0;k {for(j=k;j {s=0.0; for (r=0;r {s=s+l[k][r]*u[r][j];} u[k][j]=a[k][j]-s; printf("u[%d][%d]=%Lf\n",k,j,u[k][j]); } for(i=k+1;i {s=0.0; for(r=0;r {s=s+l[k][r]*u[r][k];} l[i][k]=(a[i][k]-s)/u[k][k]; printf("l[%d][%d]%Lf\n",i,k,l[i][k]);} } } 六、实验结果 七、上机实验体会 在这个试验中同样叶出现了很多问题,对L,U的求解输出中,输出的位置的不同,结果也就会出差错.经过多次调整,结果总算输出了. 通过此次试验,我理解了多重循环的运用,并了解了古人的聪明智慧,]讲将复杂问题简单化,现在的大学生们,应该学习他们的创新及钻研精神。 华北科技学院上机报告 系(部) 专业、班级 学号 课程名称数值分析 上机题目实验六,实验七 任课教师 指导教师 成绩(优、良、中、及格、不及格) 华北科技学院基础部 实验六 解线性方程组的迭代法 1.目的与要求: 1) 熟悉求解线性方程组的有关理论哈方法。 2) 会编制雅可比迭代和高斯—塞得尔迭代法。 3) 通过实际计算,进一步了解各算法的优缺点,选择合适的数值方法。 2.雅可比迭代法 算法 设方程组AX=b 的系数矩阵的对角元素0(1,2, ,),ii i n a ≠=M 为迭代次数容许的最大值,ε 为容许误差. ① 取初始向量(0)(0)(0),(,,,)12T x x x x n =令k=0; ② 对1,2,,i n =计算 (1) ()11();n k k i i ij j j ii j i x b a x a +=≠= -∑ ③ 如果 (1)() 1 ,n k k i i i x x ε+=-<∑则输出(1) k x +,结束;否则执行④, ④ 如果,k M ≥则不收敛,终止程序;否则1,k k ←+转②. 1.分别用雅可比迭代法与高斯-塞德尔迭代法解下列方程组: 2),311300010000 151335901100002709311000000 230010793000090,0 00305770502000007473000120000030410070000500272700 2 2910RI V R V =---????????---????????---????---??????==----???-??????--???--??????--? ???其中???? ??? ? 1.用雅可比迭代法计算: #include "stdafx.h" #include "iostream.h" 习题二 3、证明:当X 0=1.5时,迭代法X k+1=Xk +410和X k+1=21k X 310-都收敛于方程f(x)=x 3+4x 2-10=0在区间[1,2]内唯一实根x *,并分别用上述迭代法求满足于精度要求︱X k+1-X k ︱≤10-5的近似根。 解:证明:{先用迭代法求f(x)=x 3+4x 2-10=0的根。 (a )对x 3+4x 2-10=0变形有:4x 2=10-x 3 所以:X=21310X - 则相应的迭代公式为:X k+1=21k X 310- 取:X 0=1.5,根据计算可以看出看,我们认为得到的迭代序列是 收敛的。}(此行可忽略) { 由 f(x)=x 3+4x 2-10=0得迭代方程:X=21310X -=g (x ) 先证明在区间【1,2】上x=g (x )有实根。由于[1,2]上g ‘(x )存在,所以g (x )连续。作Q (x )=x-g(x),则Q(x)在[1,2]上也连续。由定理1条件2有:Q (1)=1-g (1)≤0,Q (,2)=1-g (2)≥0 故存在x *∈[1,2]使Q *(x )=0,即x *= Q *(x ) 又因为,x *是方程f(x)=x 3+4x 2-10=0在区间[1,2]内的唯一实根,(由定理一条件 2)对任意的x 0∈[1,2]时,X k ∈[1,2](k=0,1,2,3…) 因为:x *- X k+1=g (x *)-g (X k )=g ‘(h k )(x *- X k )故由条件1知: ︱X *-X k+1︱≤L ︱X *-X k ︱(k=0,1,2,3…)于是有:0≤︱X *-X k ︱≤L k ︱X *-X 0︱,0<L <1,立即可知:lim (k 趋于无穷)︱X *-X k ︱=0,从而lim (k 趋于无穷)X k= X *。所以当X 0=1.5时,迭代法X k+1=Xk +410和X k+1=21k X 310-都是由迭代法X k+1=g (X k )产生的迭代序列{ X k }收敛于方程f(x)=x 3+4x 2-10=0在区间[1,2]内唯一实 根x *。 正解如下: (1) (牛顿迭代法): 证明:对方程f(x)=x 3+4x 2-10=0在区间[1,2]内, (a ) f ‘(x)=3x 2+8x ,f ’‘(x)=6x+8,f ’‘(x)在区间[1,2]内连续; (b ) f (1)=-5,f (2)=14,f (1)f (2)<0; (c ) 对于任意的x ∈[1,2],都有f ‘(x)=/(不等于)0; (d ) f ’‘(x)在[1,2]上保号; 综上所述,当X 0=1.5时,迭代法X k+1=Xk +410和X k+1=21k X 310-都收敛于方程f(x)=x 3+4x 2-10=0在区间[1,2]内唯一实根x *。 (2)用牛顿迭代法求近似根。 方程f(x)=x 3+4x 2-10=0有唯一实根x *∈[1,2],容易验证,f(x)=x 3+4x 2-10在[1,2] 作业六:分别编写用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组Ax=B的标准程序,并求下列方程组的解。 可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1) = (2) = Jacobi迭代法: 流程图 开 始 判断b中的最大值 有没有比误差大 给x赋初值 进行迭代 求出x,弱到100次还没到,警告不收 结束 程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e for i=1:n d=A(i,i); if abs(d) 程序结果(1) (2) Gauss-Seidel迭代法: 程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3]; A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵A不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解A=D+L+U,D是对角阵,L是下三角阵,U是上三角阵U=zeros(n); D=zeros(n); G=zeros(n);%G=-inv(D+L)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化L和U for j=1:n if i 数值分析讲义 第三章线性方程组的解法 §3.0 引言 §3.1 雅可比(Jacobi)迭代法 §3.2 高斯-塞德尔(Gauss-Seidel)迭代法 §3.3 超松驰迭代法§3.7 三角分解法 §3.4 迭代法的收敛性§3.8 追赶法 §3.5 高斯消去法§3.9 其它应用 §3.6 高斯主元素消去法§3.10 误差分析 §3 作业讲评3 §3.11 总结 §3.0 引言 重要性:解线性代数方程组的有效方法在计算数学和科学计算中具有特殊的地位和作用.如弹性力学、电路分析、热传导和振动、以及社会科学及定量分析商业经济中的各种问题. 分类:线性方程组的解法可分为直接法和迭代法两种方法. (a) 直接法:对于给定的方程组,在没有舍入误差的假设下,能在预定的运算次数内求得精确解.最基本的直接法是Gauss消去法,重要的直接法全都受到Gauss消去法的启发.计算代价高. (b) 迭代法:基于一定的递推格式,产生逼近方程组精确解的近似序列.收敛性是其为迭代法的前提,此外,存在收敛速度与误差估计问题.简单实用,诱人. §3.1 雅可比Jacobi 迭代法 (AX =b ) 1 基本思想: 与解f (x )=0 的不动点迭代相类似,将AX =b 改写为X =BX +f 的形式,建立雅可比方法的迭代格式:X k +1=BX (k )+f ,其中,B 称为迭代矩阵.其计算精度可控,特别适用于求解系数为大型稀疏矩阵(sparse matrices)的方程组. 2 问题: (a) 如何建立迭代格式? (b) 向量序列{X k }是否收敛以及收敛条件? 3 例题分析: 考虑解方程组??? ??=+--=-+-=--2.453.82102 .72103 21321321x x x x x x x x x (1) 其准确解为X *={1, 1.2, 1.3}. 建立与式(1)相等价的形式: ??? ??++=++=++=84.02.01.083.02.01.072 .02.01.02 13312321x x x x x x x x x (2) 据此建立迭代公式: ?????++=++=++=+++84 .02.01.083.02.01.072.02.01.0)(2)(1)1(3 )(3 )(1)1(23)(2)1(1k k k k k k k k k x x x x x x x x x (3) 取迭代初值0) 0(3 )0(2)0(1===x x x ,迭代结果如下表. JocabiMethodP31.cpp 第六章非线性方程的数值解法习题解答 填空题: 1. 求方程()x f x =根的牛顿迭代格式是__________________。 Ans:1()1()n n n n n x f x x x f x +-=- '- 2.求解方程 在(1, 2)内根的下列迭代法中, (1) (2) (3) (4) 收敛的迭代法是(A ). A .(1)和(2) B. (2)和(3) C. (3)和(4) D. (4)和(1) 3.若0)()(,故迭代发散。 以上三中以第二种迭代格式较好。 2、设方程()0f x =有根,且'0()m f x M <≤≤。试证明由迭代格式1()k k k x x f x λ+=- (0,1,2,)k =L 产生的迭代序列{}0k k x ∞ =对任意的初值0(,)x ∈-∞+∞,当2 0M λ<< 时,均收敛于方程的根。 第4章解线性方程组的迭代法 用迭代法求解线性方程组与第4章非线性方程求根的方法相似,对方程组进行等价变换,构造同解方程组(对可构造各种等价方程组, 如分解,可逆,则由得到),以此构造迭代关系式 (4.1) 任取初始向量,代入迭代式中,经计算得到迭代序列。 若迭代序列收敛,设的极限为,对迭代式两边取极限 即是方程组的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛与否完全决定于迭代矩阵的性质,与迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。 可以证明迭代矩阵的与谱半径是迭代收敛的充分必要条件,其中是矩阵的特征根。事实上,若为方程组的解,则有 再由迭代式可得到 由线性代数定理,的充分必要条件。 因此对迭代法(4.1)的收敛性有以下两个定理成立。 定理4.1迭代法收敛的充要条件是。 定理4.2迭代法收敛的充要条件是迭代矩阵的谱半径 因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的 工作。前面已经提到过,若||A||p矩阵的范数,则总有。因此,若,则必为收敛矩阵。计算矩阵的1范数和范数的方法比较简单,其中 于是,只要迭代矩阵满足或,就可以判断迭代序列 是收敛的。 要注意的是,当或时,可以有,因此不能判断迭代序列发散。 在计算中当相邻两次的向量误差的某种范数小于给定精度时,则停止迭代计算,视为方程组的近似解(有关范数的详细定义请看3.3节。) 4.1雅可比(Jacobi)迭代法 4.1.1 雅可比迭代格式 雅可比迭代计算 元线性方程组 (4.2) 写成矩阵形式为。若将式(4.2)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式 实验报告 一、实验目的 1.迭代函数对收敛性的影响。 2.初值的选择对收敛性的影响。 二、实验题目 1.用简单迭代法求方程01)(3=--=x x x f 的根。 分别化方程为如下等价方程: 31+=x x ;13 -=x x ;x x 11+=;213-+=x x x 取初值5.10=x ,精度为4 10-,最大迭代次数为500,观察其计算结果并加以分析。 2.①用牛顿法求方程01)(3=-+=x x x f 在0.5附近的根, 分别取初值1000,100,2,1,5.0,5.0,1,2,100,10000-----=x 观察并比较计算结果,并加以分析。 ②用牛顿法求方程0)(3=-=x x x f 所有根。 三、实验原理 简单迭代法程序,牛顿迭代法程序。 四、实验内容及结果 五、实验结果分析 (1)实验1中用简单迭代法求方程01)(3=--=x x x f 的根: 取初始值5.10=x 的时候,等价方程2和4是不收敛的。等价方程1的迭代次数为6,近似值为1.324719474534364。等价方程3的迭代次数为7,近似值为1.324718688942791。说明不同的等价方程得到的结果以及迭代的次数是不一样的。 (2)实验2中用牛顿迭代法求方程01)(3=-+=x x x f 在0.5附近的根: 通过结果可知,当初始值越接近真实值时,迭代的次数就越少。 (3)实验3中用牛顿法求方程0)(3=-=x x x f 所有根: 可知该方程的根为01=x ,12=x ,13-=x ,由于方程是无重根的,所以可以直接用牛顿迭代法做,而不需要使用牛顿迭代加速法做。 一 实验目的 1.掌握求解线性方程组的高斯消元法及列主元素法; 2. 掌握求解线性方程组的克劳特法; 3. 掌握求解线性方程组的平方根法。 二 实验内容 1.用高斯消元法求解方程组(精度要求为610-=ε): 1231231 233272212240x x x x x x x x x -+=??-+-=-??-+=? 2.用克劳特法求解上述方程组(精度要求为610-=ε)。 3. 用平方根法求解上述方程组(精度要求为610-=ε)。 4. 用列主元素法求解方程组(精度要求为610-=ε): 1231231 233432222325x x x x x x x x x -+=??-+-=??--=-? 三 实验步骤(算法)与结果 1. 程序代码(Python3.6): import numpy as np def Gauss(A,b): n=len(b) for i in range(n-1): if A[i,i]!=0: for j in range(i+1,n): m=-A[j,i]/A[i,i] A[j,i:n]=A[j,i:n]+m*A[i,i:n] b[j]=b[j]+m*b[i] for k in range(n-1,-1,-1): b[k]=(b[k]-sum(A[k,(k+1):n]*b[(k+1):n]))/A[k,k] print(b) 运行函数: >>> A=np.array([[3,-1,2],[-1,2,-2],[2,-2,4]],dtype=np.float) >>> b=np.array([7,-1,0],dtype=np.float) >>> x=Gauss(A,b) 输出: 结果:解得原方程的解为x1=3.5,x2=-1,x3=-2.25 2 程序代码(Python3.6): import numpy as np A=np.array([[3,-1,2],[-1,2,-2],[2,-2,4]],dtype=float) L=np.array([[1,0,0],[0,1,0],[0,0,1]],dtype=float) U=np.array([[0,0,0],[0,0,0],[0,0,0]],dtype=float) b=np.array([7,-1,0],dtype=float) y=np.array([0,0,0],dtype=float) x=np.array([0,0,0],dtype=float) def LU(A): n=len(A[0]) i=0 while i 实验内容 1 用下列方法求方程201303==--x x x 在附近的根,要求准确到四位有效数字。 (1)牛顿法。(2)单点弦截法(3)双点弦截法 2 用Aitken 法求方程0123=--x x 在5.10=x 附近的根,精度要求为410-=ε。 三 实验步骤(算法)与结果 1: 用双点弦截法求方程201303==--x x x 在附近的根 ①算法的C 语言代码: #include 2:用Aitken 法求方程0123=--x x 在5.10=x 附近的根 ①算法的C 语言代码: #include 实验报告一:实验题目 一、 实验目的 掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。 二、 实验内容 1、编写二分法、牛顿迭代法程序,并使用这两个程序计算 02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 4 10- ,比较两种方法收敛速度。 2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。 3、由中子迁移理论,燃料棒的临界长度为下面方程的根cot x =(x 2?1)/2x ,用牛顿迭代法求这个方程的最小正根。 4、用牛顿法求方程f (x )=x 3?11x 2+32x ?28=0的根,精确至8位有效数字。比较牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。 三、 实验程序 第1题: 02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。 画图函数: function Test1() % f(x) 示意图, f(x) = x + exp(x) - 2; f(x) = 0 r = 0:0.01:1; y = r + exp(r) - 2 plot(r, y); grid on 二分法程序: 计算调用函数:[c,num]=bisect(0,1,1e-4) function [c,num]=bisect(a,b,delta) %Input –a,b 是取值区间范围 % -delta 是允许误差 %Output -c 牛顿迭代法最后计算所得零点值 % -num 是迭代次数 ya = a + exp(a) - 2; yb = b + exp(b) - 2; if ya * yb>0 return; end for k=1:100 c=(a+b)/2; yc= c + exp(c) - 2; if abs(yc)<=delta a=c; b=c; elseif yb*yc>0 b=c; yb=yc; else a=c; ya=yc; end if abs(b-a) 《数值计算方法》实验报告 实验名称:实验1 非线性方程的简单迭代法和Steffensen 迭代法 实验题目:分别用简单迭代法和Steffensen 迭代法求方程 010423=-+x x 在 [1, 2] 内的一个实根. 实验目的:理解并掌握简单迭代法和Steffensen 迭代法 基础理论:简单迭代法和Steffensen 迭代法 1).简单迭代法的原理:将一元非线性方程:0)(=x f 改写成等价方程:)(x x ρ= ,对此,从某个初始值x0开始,对应式)(x x ρ= 构成迭代公式 ,...1,0),(1==+k x x k k ρ ,这样就可以确定序列 {}k x (k=0,1,2…)。如果 {}k x 有极限 *lim x x k k =∞→ ,由式 ,...1,0),(1==+k x x k k ρ 两边取极限可得 )(**x x ρ= ,可知 * x 为方程0)(=x f 的近似解。 2)Steffensen 迭代法的原理: 通过把改进的Aitken 方法应用于根据不动点迭代所得到的线性收敛序列,将收敛速度加速到二阶。 ()???? ?????+---===+k k k k k k k k k k k x y z x y x x y z x y 2) ()(21ρρ []x x x x x x x +---=)(2)(()()(2ρρρρψ 实验环境:操作系统:Windows 7; 实验平台:Turbo C++ 实验过程:写出算法→编写程序→调试运行程序→计算结果 1)简单迭代法的算法: Input:初始近似值x0,精度要求del,最大迭代次数N Output:近似解x 或失败信息 1. n ←1 2. While n ≤N do; 3. x ←f(x0); 4. if | x-x0| - 0 -文档来源为:从网络收集整理.word 版本可编辑.欢迎下载支持. 数值分析实验报告 (3) 学院:信息学院 班级:计算机0903班 姓名:王明强 学号: 课题三 线性方程组的迭代法 一、问题提出 1、设线性方程组 ?? ? ?? ? ?? ? ?? ???? ? ????? ??? ??? ?????--------------------------136******** 412029137264221234179111016103524312053621775868323376162449113151201 30123122400105635680000121324??????????????? ?????????????????10987654321x x x x x x x x x x =??????? ?????????????????????????-2119381346323125 x * = ( 1, -1, 0, 1, 2, 0, 3, 1, -1, 2 )T 2、设对称正定阵系数阵线方程组 ??????????????????????????----------------------19243360021411035204111443343104221812334161206538114140231212200420424 ?? ??? ????????? ????????????87654321x x x x x x x x = ???????????? ? ?????????????---4515229232060 x * = ( 1, -1, 0, 2, 1, -1, 0, 2 )T 山西大学计算机与信息技术学院 实验报告 姓名学号专业班级 课程名称计算方法实验实验日期 成绩指导老师批改日期 实验名称实验三解线性方程组的迭代法 一、实验目的: 用雅可比和高斯—赛德尔迭代法解线性方程组A x=b,式中A为非奇异实矩阵。在给定迭代初值的情况下,进行迭代,直到满足精度要求。 二、实验方法 (1)雅可比迭代法设系数矩阵A为非奇异矩阵,且a ij0≠ ,(i=1,2,3,......,n),从第i个方程中解出 x i , 得其等价形式: ) ( 1 ,1 x a a x i n i j j ij ii i b∑ ≠ = - = ,取初始向量 ) ,...., , , ()0( )0( 3 )0( 2 )0( 1 )0(x x x x x n = ,可建立相应的 迭代公式: ) ( 1)( ,1 )1 (b x a a x i k j n i j j ij ij k i + - =∑ ≠ = + (2)高斯—赛德尔迭代法 每计算出一个新的分量便立即用它取代对应的旧分量进行迭代,可能收敛更快,据此思想课构造高斯 —赛德尔迭代法,其迭代公式为 ) ,...., 2,0 (), ( 11 11 ) ( )1 ( )1 (n i b x a x a a x j i j n i j k j ij k j ij ij k i = + - - =∑∑ - =+ = + + 三、实验内容 求使|| x x k k) ( )1 (- + ||20001 .0 ≤的近视解及相应的迭代次数。初值选为向量b。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - - - - - - - - - - - - 6 2 5 2 5 4 1 1 1 4 1 1 1 4 1 1 1 1 4 1 1 1 4 1 1 1 4 6 5 4 3 2 1 x x x x x x 四、实验程序 雅可比迭代法代码:#include"stdio.h" #include"math.h" #define n 6 #define Nmax 100 实验二:迭代法、初始值与收敛性 一:实验要求 考虑一个简单的代数方程 210,x x --= 针对上述方程,可以构造多种迭代法,如2 11111,1,n n n n n x x x x x +++=-=+ =在实 轴上取初值,分别用以上迭代做实验,记录各算法的迭代过程。 二:实验要求及实验结果 (1) 取定某个初始值,按如上迭代格式进行计算,它们的收敛性如何?重复选取不同放 入初始值,反复实验。请读者自行设计一种比较形象的记录方式(如何利用Matlab 的图形功能),分析三种迭代法的收敛性与初值的选取关系。 (2) 对三个迭代法中的某一个,取不同的初值进行迭代,结果如何?试分析对不同的初 值是否有差异? 实验内容: ⅰ)对2 11n 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') 数值分析中求解非线性方程的MATLAB求解程序(6种) 1.求解不动点 function [k,p,err,P]=fixpt(g,p0,tol,max1) %求解方程x=g(x) 的近似值,初始值为p0 %迭代式为Pn+1=g(Pn) %迭代条件为:在迭代范围内满足|k|<1(根及附近且包含初值)k为斜率 P(1)=p0; for k=2:max1 P(k)=feval(g,P(k-1)); err=abs(P(k)-P(k-1)); relerr=err/(abs(P(k))+eps); p=P(k); if (err if b-a M A T L新编计算方法迭代法牛顿法二分法实验报 告 Company Document number:WUUT-WUUY-WBBGB-BWYTT-1982GT 姓名 实验报告成绩 评语: 指导教师(签名) 年 月 日 说明:指导教师评分后,实验报告交院(系)办公室保存。 实验一 方程求根 一、 实验目的 用各种方法求任意实函数方程0)(=x f 在自变量区间[a ,b]上,或某一点附近的实根。并比较方法的优劣。 二、 实验原理 (1)、二分法 对方程0)(=x f 在[a ,b]内求根。将所给区间二分,在分点 2a b x -=判断是否0)(=x f ;若是,则有根2a b x -=。否则,继续判断是否0)()( +)(0x f 0))(('0=-x x x f 设0)('0≠x f ,则=x -0x )(') (00x f x f 。取x 作为原方程新的近似根1x ,然后将1x 作为0x 代入上式。迭代公式为:=+1 k x -0x )(')(k k x f x f 。 三、 实验设备:MATLAB 软件 四、 结果预测 (1)11x = (2)5x = (3)2x =0,09052 五、 实验内容 (1)、在区间[0,1]上用二分法求方程0210=-+x e x 的近似根,要求误差不 超过3105.0-?。 (2)、取初值00=x ,用迭代公式 =+1k x -0x )(')(k k x f x f ,求方程0210=-+x e x 的近似根。要求误差不超过3105.0-?。 (3)、取初值00=x ,用牛顿迭代法求方程0210=-+x e x 的近似根。要求误 差不超过3105.0-?。 六、 实验步骤与实验程序 (1) 二分法 第一步:在MATLAB 软件,建立一个实现二分法的MATLAB 函数文件如下: function x=agui_bisect(fname,a,b,e) %fname 为函数名,a,b 为区间端点,e 为精度 fa=feval(fname,a); %把a 端点代入函数,求fa fb=feval(fname,b); %把b 端点代入函数,求fb if fa*fb>0 error('两端函数值为同号'); 实验名称: 实验五 线性方程组的数值解法 指导教师: 数值分析实验组 实验时数: 2 实验设备:安装了Matlab 、C ++、VF 软件的计算机 实验日期:2014年 月 日 实验地点: 第五教学楼北802或902 实验目的: 1. 掌握线性方程组的迭代法和直接法的基本思想和基本步骤。 2. 理解各类数值解法的优缺点,并能自行编程求解。 3. 认识迭代法收敛的含义以及迭代法初值和方程组系数矩阵性质对收敛速度的影响,了解求解病态线性方程组的方法。 实验准备: 1. 在开始本实验之前,请回顾教科书的相关内容; 2. 需要一台准备安装Windows XP Professional 操作系统和装有数学软件的计算机。 实验内容及要求 A 题 考虑方程组b Hx =的求解,其中系数矩阵H 为Hilbert 阵, n j i j i h h H j i n n j i ,,2,1,,1 1 ,)(,, =-+= =? 这是一个著名的病态问题。通过首先给定解(例如取各个分量均为1)再计算出右端的办法给出确定的问题。 (1) 选择问题的维数为6,分别用列主元Gauss 消去法、Jacobi 迭代法、Gauss-Seidel 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何? (2) 逐步增大问题的维数,仍然用上述方法来解它们,计算的结果如何?计算的结果说明了什么?分析产生结果的原因。 说明:实验过程应包括对问题的简要分析、求解方法、求解步骤、程序及其必要的图表等内容。 实验过程: 本实验所选题为A 题 实验分析:b Hx =,H 矩阵可由Matlab 直接给出,为了设定参考解,首先设x 为分量全 为1的向量,求出b ,然后将H 和b 作为已知量,求x ,与设定的参考解对比。 对于列主元Gauss 消去法,Jacobi 迭代,Gauss-Seidel 迭代,SOR 迭代法,去迭取迭代初值 第六章非线性方程的数值解法习题解答 填空题: 1. 求方程()x f x =根的牛顿迭代格式是__________________。 Ans:1()1()n n n n n x f x x x f x +-=- '- 2.求解方程 在(1, 2)内根的下列迭代法中, (1) (2) (3) (4) 收敛的迭代法是(A ). A .(1)和(2) B. (2)和(3) C. (3)和(4) D. (4)和(1) 3.若0)()(,故迭代发散。 以上三中以第二种迭代格式较好。 2、设方程()0f x =有根,且'0()m f x M <≤≤。试证明由迭代格式1()k k k x x f x λ+=- ) 实验报告一:实验题目 一、 实验目的 掌握求解非线性方程根的二分法、简单迭代法和牛顿迭代法,并通过数值实验比较两种方法的收敛速度。 二、 实验内容 1、编写二分法、牛顿迭代法程序,并使用这两个程序计算02)(=-+=x e x x f 在[0, 1]区间的解,要求误差小于 4 10- ,比较两种方法收敛速度。 2、在利率问题中,若贷款额为20万元,月还款额为2160元,还期为10年,则年利率为多少?请使用牛顿迭代法求解。 3、由中子迁移理论,燃料棒的临界长度为下面方程的根,用牛顿迭 代法求这个方程的最小正根。 4、用牛顿法求方程 的根,精确至8位有效数字。比较 牛顿迭代法算单根和重根的收敛速度,并用改进的牛顿迭代法计算重根。 三、 实验程序 第1题: 02)(=-+=x e x x f 区间[0,1] 函数画图可得函数零点约为0.5。 画图函数: f un cti on Te st1() % f(x ) 示意图, f(x) = x + exp (x) - 2; f(x) = 0 r = 0:0.01:1; y = r + e xp(r) - 2 p lot(r, y); gri d on 二分法程序: 计算调用函数:[c,n um ]=bisec t(0,1,1e-4) fu ncti on [c,num ]=bisect (a,b,de lt a) %Inp ut –a,b 是取值区间范围 % -de lta 是允许误差 %O utput -c牛顿迭代法最后计算所得零点值 % -num 是迭代次数 ya = a + exp(a) - 2; yb = b + e xp(b) - 2;数值分析_迭代法
数值计算迭代法
数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
数值分析讲义线性方程组的解法
第六章非线性方程的数值解法习题解答
数值计算_第4章 解线性方程组的迭代法
数值分析非线性方程求根实验
数值分析实验2_求解线性方程组直接法
数值分析-方程迭代法
数值分析求解非线性方程根的二分法,简单迭代法和牛顿迭代法
非线性方程的简单迭代法和Steffensen迭代法
数值分析迭代法
计算方法实验三 解线性方程组的迭代法
数值分析 迭代法
数值分析中求解非线性方程的MATLAB求解程序(6种)
MATL新编计算方法迭代法牛顿法二分法实验报告
数值分析— 线性方程组的数值解法
第六章非线性方程的数值解法习题解答
数值分析求解非线性方程根的二分法、简单迭代法和牛顿迭代法