大学数学实验报告----迭代(一)——方程求解
- 格式:doc
- 大小:924.50 KB
- 文档页数:22
附录1:源程序
附录2:实验报告填写说明
1.实验项目名称:要求与实验教学大纲一致。
2.实验目的:目的要明确,要抓住重点,符合实验教学大纲要求。
3.实验原理:简要说明本实验项目所涉及的理论知识。
4.实验环境:实验用的软、硬件环境。
5.实验方案(思路、步骤和方法等):这是实验报告极其重要的内容。
概括整个实验过程。
对于验证性实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。
对于设计性和综合性实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。
对于创新性,还应注明其创新点、特色。
6.实验过程(实验中涉及的记录、数据、分析):写明具体实验方案的具体实施步骤,包括实验过程中的记录、数据和相应的分析。
7.实验结论(结果):根据实验过程中得到的结果,做出结论。
8.实验小结:本次实验心得体会、思考和建议。
9.指导教师评语及成绩:指导教师依据学生的实际报告内容,给出本次实验报告的评价。
浙江大学城市学院实验报告课程名称科学计算实验项目名称线性方程组的求解-迭代法实验成绩指导老师(签名)日期2012-4-6一.实验目的和要求1.掌握Jacobi 迭代方法,Gauss-Seidel 迭代方法,SOR 迭代方法的编程思想,能够分别用分量形式和矩阵形式编写相关程序。
2.观察SOR 迭代法中松弛因子变化情况对收敛的影响。
3.了解Hilbert 矩阵的病态性和作为线性方程组系数矩阵的收敛性。
二.实验内容和原理编程题2-1要求写出Matlab 源程序(m 文件),并有适当的注释语句;分析应用题2-2,2-3,2-4要求将问题的分析过程、Matlab 源程序和运行结果和结果的解释、算法的分析写在实验报告上。
2-1编程注释设11121121222212,n n n n nn n a a a b a a a b A b a a a b ⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥==⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦ 对下述求解线性方程组的Matlab 程序添上注释语句,其中A 和b 分别为线性方程组的系数矩阵和右端向量;0x 为迭代初始向量(0)X;max N 为容许迭代最大次数,eps 为迭代终止条件的精度(容许误差),终止条件为前后两次迭代解的差的向量2-范数。
1)Jacobi 迭代:Jacobimethod(A,b,x0,Nmax,eps)2)Gauss-Seidel 迭代:GaussSeidelmethod(A,b,x0,Nmax,eps)3)松弛迭代:SORmethod(A,b,x0,Nmax,eps,w)2-2分析应用题利用2-1中的程序来分析用下列迭代法解线性方程组:123456410100014101050141012101410501014120010146x x x x x x --⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----=⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥----⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦的收敛性,并求出使(1)()20.0001k k X X +-≤的近似解及相应的迭代次数,其中取迭代初始向量(0)X为零向量。
西京学院数学软件实验任务书实验四实验报告一、实验名称:线性方程组的J-迭代,GS-迭代,SOR-迭代。
二、实验目的:熟悉线性方程组的J-迭代,GS-迭代,SOR-迭代,SSOR-迭代方法,编程实现雅可比方法和高斯-赛德尔方法求解非线性方程组12123123521064182514x x x x x x x x +=⎧⎪++=⎨⎪++=-⎩的根,提高matlab 编程能力。
三、实验要求:已知线性方程矩阵,利用迭代思想编程求解线性方程组的解。
四、实验原理:1、雅可比迭代法(J-迭代法):线性方程组b X A =*,可以转变为:迭代公式(0)(1)()k 0,1,2,....k k J XXB X f +⎧⎪⎨=+=⎪⎩ 其中b M f U L M A M I B J 111),(---=+=-=,称J B 为求解b X A =*的雅可比迭代法的迭代矩阵。
以下给出雅可比迭代的分量计算公式,令),....,()()(2)(1)(k n k k k X X X X =,由雅可比迭代公式有b XU L MXk k ++=+)()1()(,既有i ni j k i iji j k iij k iij b X aXa X a +--=∑∑+=-=+1)(11)()1(,于是,解b X A =*的雅可比迭代法的计算公式为⎪⎩⎪⎨⎧--==∑∑-=+=+)(1),....,(111)()()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k iTn X a X a b a X X X X X 2、 高斯-赛德尔迭代法(GS-迭代法):GS-迭代法可以看作是雅可比迭代法的一种改进,给出了迭代公式:⎪⎩⎪⎨⎧--==∑∑-=+=+++)(1),....,(111)1()1()1()0()0(2)0(1)0(i j n i j k j ij k j ij i ii k iTn X a X a b a X X X X X 其余部分与雅克比迭代类似。
实验3 线性方程组数值解-迭代法一、实验目的:掌握Jaccobi 迭代法、Guass-Sidel 迭代法、松弛法求解线性方程组的数值解。
二、实验内容:1.1题目分别用雅格比法与高斯-赛德尔迭代法解下列方程组Ax =b ,研究其收敛性,上机验证理论分析是否正确,比较它们的收敛速度,观察右端项对迭代收敛有无影响。
(1)A 行分别为A 1=[6,2,-1],A 2=[1,4,-2],A 3=[-3,1,4]; b 1=[-3,2,4]T , b 2=[100,-200,345]T , (2) A 行分别为A 1=[1,0.8,0.8],A 2 [0.8,1,0.8],A 3=[0.8,0.8,1];b 1=[3,2,1] T , b 2=[5,0,-10]T , (3)A 行分别为A 1=[1,3],A 2=[-7,1];b =[4,6]T , 1.2原理和思路1.2.1 基本原理(1)Jacobi 迭代法设有n 阶方程组A x=b ,若系数矩阵非奇异,且0≠ii a (i = 1, 2,…, n ),将方程组改写成同解方程组:()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--11,221112323122221213132121111111n n n n n n nn n n n n n x ax a x a b a x x a x a x a b a x x a x a x a b a x然后写成迭代格式:()()()⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--+++)(11,)(22)(11)1()(2)(323)(121122)1(2)(1)(313)(212111)1(1111k n n n k n k n n nn k n k n n k k k k n n k k k x a x a x a b a x x a x a x a b a x x a x a x a b a x上式也可以简单地写为:),,2,1(1)(1)1(n i x a b a x k j n i j j ij i iik i =⎪⎪⎪⎭⎫ ⎝⎛-=∑≠=+对以上两式给定一组任意初值(0)(0)(0)(0)12(,,)Tn x x x x =后,经反复迭代可得到一向量序列()()()1(,)k k k Tn x x x =,如果x (k )收敛于****12(,,)T n x x x x =,则),,2,1(*n i x i =就是方程组A x=b 的解,该方法称为雅克比(Jacobi)迭代法。
《计算方法》实验报告一一、上机实验的问题和要求:用Newton 法求方程:x 7-28x 4+14=0在(0.1,1.9)中的近似值(初始近似值取为区间端点,迭代6次或误差小于0.00001)。
二、程序设计的基本思想,原理和算法描述:(包括程序的结构,数据结构,输入/输出设计,符号名说明等) Newton 迭代法的公式和使用条件:设函数在有限区间[a ,b]上二阶导数存在,且满足条件:1. )(a f )(b f <0;2. )(,,x f 在区间[a ,b]上不变号;3. )(,x f ≠0;4.)(,)(c f c f ≤,其中c 是a ,b 中使min ()(,a f ,)(,b f )达到的一个。
则对任意的初始近似值x0∈[a ,b],由Newton 迭代过程 x k+1=ψ(x k )=x k -)()(,kk x f x f ,k=0,1,2,…所生成的迭代序列{x k }平方收敛于方程f (x )=0在区间[a ,b]上的唯一解α。
设计思路:此程序比较简单,在设计时先把)(x f 和)(,x f 的表达式用c 语言表示出来,然后在经过一个while 循环做迭代,求出迭代后的解:x k+1=ψ(x k )=x k -)()(,kk x f x f ,当x k+1- x k 的绝对值小于0.00001时,循环终止。
循环结束时,方程的近似解已求出。
三、源程序及注释:#include "stdio.h" #include "math.h" main() {double x,x0=5,f,df; 给x0赋一个初值,程序使满足进入循环的条件 printf(" Please input x,x=[0.1,1.9]:\n x="); 输入一个端点a 或b scanf("%lf",&x);df=7*pow(x,6)-28*4*pow(x,3); 算出)(,x fwhile(fabs(x-x0)>=0.00001&&df!=0) 在迭代中如果|x-x0|<0.00001或)(,x f =0,则停止迭代 {x0=x; 迭代计算:x k+1=ψ(x k )=x k -)()(,kk x f x fx=x-(pow(x,7)-28*pow(x,4)+14)/(7*pow(x,6)-28*4*pow(x,3)); df=7*pow(x,6)-28*4*pow(x,3); }printf("\n The root is %lf",x); 打印出计算结果 getch(); }四、运行输出结果:输入x=0.1时的解 输入x=0.4时的解 输入x=1.9时的解五、调试和运行程序过程中产生的问题及采取的措施:调试程序时会报错,运行时一开始运行结果不正确,得不到理想结果,只有经过反复检查语言彻底消除错误。
仿真平台与工具应用实践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是非常实用的软件, 能够避免大量计算, 简化我们的工作, 带来便捷。
1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。
1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。
Matlab 脚本文件为Experiment6_1.m 。
迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。
实验报告一一、实验目的理解线性方程组直接法与迭代法思想,掌握常用算法的设计,掌握用MATLAB 实现的数值解法。
二、实验题目实验一 线性方程组迭代法实验 1、 迭代法的收敛速度用迭代法分别对n=20,n=200解方程组,b Ax =其中nn A ⨯⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛------------------=431513143151513143151513143151513143151314(1) 选取不同的初值0x 和不同的右端向量b,给定迭代误差,用两种迭代法计算,观测得到的迭代向量并分析计算结果给出结论;(2) 取定初值0x 和右端向量b,给定迭代误差,将A 的主对角元成倍放大,其余元素不变,用Jacobi 迭代法计算多次,比较收敛速度,分析计算结果并给出结论。
2、 SOR 迭代法松弛因子的选取用逐次超松弛(SOR )迭代法求解方程组,b Ax =其中 .5555551221212211212212121221121221212200199198321⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛----------=x x x x x x A (1) 给定迭代误差,选取不同的超松弛因子1>ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论;(2) 给定迭代误差,选取不同的低松弛因子1<ω进行计算,观测得到的近似值向量并分析计算结果,给出你的结论。
三、实验原理Jacobi 迭代法算法:步1 取初始点()0x ,精度要求ε,最大迭代次数N ,置0:=k ;步 2 由()n i x a b a x ni j j j ij i ii k i,,1,1,11 =⎪⎪⎭⎫⎝⎛-=∑≠=+ 或()b D x A D D x k 111)(--++-= 计算()1+k x ; 步3 若()()ε≤-∞+k k xx1,则停算,输出()1+k x作为方程组的近似解; 步4 若N k =,则停算,输出迭代失败信息;否则置1+=k k ,转布2。
用牛顿迭代法求方程的根一、 实验目的1. 用牛顿迭代法求解方程的根2. 了解迭代法的原理3. 改进和修缮迭代法二、 实验原理给定初始值0x ,ε为根的容许误差,η为()x f 的容许误差,N 为迭代次数的容许值。
1. 如果()0='x f 或迭带次数大于N ,则算法失败,结束;否则执行2.2. 计算()()0001x f x f x x '-=. 3. 若ε<-21x x 或()η<1x f ,则输出1x ,程序结束;否则执行4.4. 令10x x =,转向1.三、 实验题目求方程()03323=--+=x x x x f 在5.1附近的根。
四、 程序代码function Newtondiedai(f,a,b) %f 为a,b 是方程根的取值区间[a ,b]x1=a;% x1,x2为迭代中的Xn.Xn+1.x2=0; %最后输出的方程的根n=100;%迭代次数eps=1.0e-6;%根的容许误差ea=1.0e-8;%|f(x)|的容许误差df=diff(sym(f));%求导%求方程某点的值f1=subs(sym(f),findsym(sym(f)),a);f2=subs(sym(f),findsym(sym(f)),b);%当端点的函数值为0的时候,直接输出根if(f1==0)x2=a;x2endif(f2==0)x2=b;x2endfor(i=1:n)f1=subs(sym(f),findsym(sym(f)),x1);dfx=subs(sym(df),findsym(sym(df)),x1);x2=x1-f1/dfx;%迭代方程if(abs(x2-x1)<eps||abs(subs(sym(f),findsym(sym(f)),x2)<ea)) %当根的容许误差或f(x)|的容许误差都小于设定值的时候输出迭代根x2 %输出方程最后的根i %输出迭代次数returnendx1=x2;end五、求解结果在Mtalab中输入Newtondiedai('x^3+x^2-3*x-3',1,2)输出x2 =1.73205080787106i =6在Mtalab中输入Newtondiedai('x^3+x^2-3*x-3',1.5,2)输出x2 =1.73205080756970i =4六、实验分析1.在求解在1.5处附近的根,不难发现在输入区间左端值为1时需要迭代6次,而输入区间左端值为1.5时,却只要4次。
牛顿迭代法的实验报告牛顿迭代法是一种寻找函数零点的方法,它通过通过使用函数的导数来逼近实际零点。
在本实验中,我们使用了牛顿迭代法来求解一元高次方程的根。
实验目的:通过使用牛顿迭代法来求解一元高次方程的根,掌握牛顿迭代法的原理与应用。
实验器材与条件:- 电脑- MATLAB 软件实验原理:设函数 f(x) 在零点 x0 处有一阶导数f’(x0)不等于0,则 f(x)在点 x0 的切线方程为y = f’(x0) (x - x0) + f(x0)。
切线与 x 轴的交点为x1,有:f’(x0)(x1 - x0) + f(x0) = 0由于我们的目标是解方程 f(x) = 0,所以我们需要将上式改写成其中 x1 为由切线得到的下一个逼近值。
通过不断逼近 x1 直到误差满足一定要求,我们就可以以一个很高的精确度求解出方程的根。
实验步骤:本实验的目标是求解方程 x^3 - 2x -2 = 0 的根。
第一步,我们先定义该方程及其导数函数:syms x;f = x^3 - 2*x - 2;df = diff(f);其中 diff() 函数是 MATLAB 默认的求导函数。
第二步,我们设定初始值 x0,设定逼近误差 limit,然后进行牛顿迭代,直到误差小于 limit:x0 = 1;limit = 1e-6;diff_value = inf;while abs(diff_value) > limitx1 = x0 - subs(f, x0) / subs(df, x0);diff_value = subs(f, x1);x0 = x1;endx0通过运行上面的代码,我们可以得到方程的一个根,为 1.7693。
实验结果与分析:本实验顺利完成,我们使用牛顿迭代法成功求出了 x^3 - 2x - 2 = 0 的根,为 1.7693。
此结果与理论值非常接近,表明我们使用牛顿迭代法正确地找到了方程的根。
一、课题名称Matlab解线性方程组的迭代法二、目的和意义1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;3、体会上机计算时,终止步骤(予给的迭代次数),对迭代法敛散性的意义;4、体会初始解 x(,松弛因子的选取,对计算结果的影响三、实验要求1、体会迭代法求解线性方程组,并能与消去法做以比较;2、分别对不同精度要求,如由迭代次数体会该迭代法的收敛快慢; 54310,10,10−8722 .−s23 =ε3、对方程组2,3使用SOR方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者;4、给出各种算法的设计程序和计算结果。
四、问题描述给出下列几个不同类型的线性方程组,请用适当算法计算其解。
a=[4 -1 0 0 0 0 0 0 0 0 ;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0; 0 0 0 0 -1 4 -1 0 0 0; 0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0; 0 0 0 0 0 0 0 -1 4 -1; 0 0 0 0 0 0 0 0 -1 4];b=[7 5 -13 2 6 -12 14 -4 5 -5];n=10;x=[0 0 0 0 0 0 0 0 0 0];六、实验程序设计Jacobi 迭代法function z=chap8_7(a,b,n,x)for k=1:19for i=1:ns=0;for j=1:nif j~=i,s=s+a(i,j)*x(j);endendy(i)=(b(i)-s)/a(i,i);endx=y;x;endz=x计算方程组一>>a=[4,2,-3,-1,2,1,0,0,0,0;8,6,-5,-3,6,5,0,1,0,0;4,2,-2,-1,3,2,-1,0,3,1;0,-2,1, 5,-1,3,-1,1,9,4;-4,2,6,-1,6,7,-3,3,2,3;8,6,-8,5,7,17,2,6,-3,5;0,2,-1,3,-4,2,5,3 ,0,1;16,10,-11,-9,17,34,2,-1,2,2;4,6,2,-7,13,9,2,0,12,4;0,0,-1,8,-3,-24,-8,6,3, -1];>> b=[5;12;3;2;3;46;13;38;19;-21];>> n=10;>> x=[0 0 0 0 0 0 0 0 0 0]';>> z=chap8_7(a,b,n,x);z =1.0e+012 *Columns 1 through 9-0.0809 -0.1452 -0.3955 0.8764 0.5509 0.2161 0.1732 1.9353 0.2550Column 10-1.8123计算方程组二>> a=[4 2 -4 0 2 4 0 0 ; 2 2 -1 -2 1 3 2 0; -4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3; 2 1 -8 -1 22 4 -10-3; 4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];>> b=[0 -6 20 23 9 -22 -15 45];>> n=8;>> x=[0 0 0 0 0 0 0 0]';>> z=chap8_7(a,b,n,x);z =1.0e+005 *-2.6705 -4.0285 1.0957 1.5976 -0.6513 -1.7472 -0.0556 0.5478计算方程组三>> a=[4 -1 0 0 0 0 0 0 0 0 ;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4-1 0 0 0 0; 0 0 0 0 -1 4 -1 0 0 0; 0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0; 0 0 0 0 0 0 0 -1 4 -1; 0 00 0 0 0 0 0 -1 4];>> b=[7 5 -13 2 6 -12 14 -4 5 -5];>> n=10;>> x=[0 0 0 0 0 0 0 0 0 0];>> z=chap8_7(a,b,n,x);z =2.0000 1.0000 -3.0000 -0.0000 1.0000 -2.0000 3.0000 -0.0000 1.0000 -1.0000Gauss-Seidol迭代法function z=chap8_8(a,b,n,x)for k=1:19for i=1:ns=0;for j=1:i-1s=s+a(i,j)*y(j);ends1=0;for j=i+1:ns1=s1+a(i,j)*x(j);endy(i)=(b(i)-s-s1)/a(i,i);endx=y;x;endz=x计算方程组一>>a=[4,2,-3,-1,2,1,0,0,0,0;8,6,-5,-3,6,5,0,1,0,0;4,2,-2,-1,3,2,-1,0,3,1;0,-2,1,5,-1,3,-1,1,9,4;-4,2,6,-1,6, 7,-3,3,2,3;8,6,-8,5,7,17,2,6,-3,5;0,2,-1,3,-4,2,5,3,0,1;16,10,-11,-9,17,34,2,-1,2,2;4,6,2,-7,13,9,2,0,1 2,4;0,0,-1,8,-3,-24,-8,6,3,-1];>> b=[5;12;3;2;3;46;13;38;19;-21];>> n=10;>> x=[0 0 0 0 0 0 0 0 0 0]';>> z=chap8_8(a,b,n,x);z =1.0e+024 *0.0088 -0.0144 0.1171 -0.2433 -0.3164 0.1669 -0.2330 1.1938 0.0220 3.9729计算方程组二>> a=[4 2 -4 0 2 4 0 0 ; 2 2 -1 -2 1 3 2 0; -4 -1 14 1 -8 -3 5 6;0 -2 1 6 -1 -4 -3 3; 2 1 -8 -1 22 4 -10 -3; 4 3 -3 -4 4 11 1 -4;0 2 5 -3 -10 1 14 2;0 0 6 3 -3 -4 2 19];>> b=[0 -6 20 23 9 -22 -15 45];>> n=8;>> x=[0 0 0 0 0 0 0 0]';>> z=chap8_8(a,b,n,x);z =12.8578 -12.8010 4.3202 -3.8776 1.9548 -3.6841 -0.1256 1.1627计算方程组三>> a=[4 -1 0 0 0 0 0 0 0 0 ;-1 4 -1 0 0 0 0 0 0 0;0 -1 4 -1 0 0 0 0 0 0;0 0 -1 4 -1 0 0 0 0 0;0 0 0 -1 4 -1 0 0 0 0; 0 0 0 0 -1 4 -1 0 0 0; 0 0 0 0 0 -1 4 -1 0 0;0 0 0 0 0 0 -1 4 -1 0; 0 0 0 0 0 0 0 -1 4 -1; 0 0 0 0 0 0 0 0 -1 4];>> b=[7 5 -13 2 6 -12 14 -4 5 -5];>> n=10;>> x=[0 0 0 0 0 0 0 0 0 0];>> z=chap8_8(a,b,n,x);z =2.0000 1.0000 -3.0000 -0.0000 1.0000 -2.0000 3.0000 -0.0000 1.0000 -1.0000七、实验结果分析直接法得到的解是理论上准确的,但是我们可以看得出,它们的计算量都是n3数量级,存储量为n2量级,这在n比较小的时候还比较合适(n<1000 , 1G/s , 15秒 , 8M),但是对于现在的很多实际问题,往往要我们求解很大的n的矩阵,而且这些矩阵往往是系数矩阵就是这些矩阵含有大量的0元素。
数值分析实验报告之迭代法求非线性方程的根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根据收敛准则,判断迭代结果是否满足收敛条件。
雅可比迭代法求解线性方程组的实验报告一、实验题目分别利用雅可比迭代法和高斯-塞德尔迭代法求解以下线性方程组:使得误差不超过 0.00001。
二、实验引言1.实验目的①掌握用迭代法求解线性方程组的基本思想和步骤,熟悉计算机fortran 语言;②了解雅可比迭代法在求解方程组过程中的优缺点。
2.实验意义雅克比迭代法就是众多迭代法中比较早且较简单的一种,求解方便实用。
三、算法设计1.雅可比迭代法原理:设有线性方程组Ax=b 满足0≠ii a , 将方程组变形为: x=Bx+f, 则雅可比(Jacobi)迭代法是指f Bx X k k +=+)1(,即 由初始解逐步迭代即可得到方程组的解。
算法步骤如下:⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.7210321321321x x x x x x x x x步骤1.给定初始值)0()0(2)0(1,,,n x x x ⋯,精度e,最大容许迭代次数M ,令k=1。
步骤2.对i=1,2,…,n 依次计算)0()1()0()1(11||)n ,2,1,0(/)(i i i i i ii ii j ni j j ij j x x x x e i a a x a b x →-=⋯=≠-=∑≠=,步骤3.求出}{max 1i ni e e ≤≤=,若ε<e ,则输出结果)n ,,2,1()0(⋯=i x i ,停止计算。
否则执行步骤4.步骤4.若,1,k k M k →+<转步骤2继续迭代。
若,M k ≥表明迭代失败,停止计算。
2.算法流程图四、程序设计program jacobi implicit none integer::i,j integer::ksave kreal,parameter::e=0.001 integer,parameter::n=3 real::x(n),y(n),b(n)data b/7.2,8.3,4.2/real::Dreal::a(n,n)open (unit=10,file='1.txt')data a/10,-1,-1,-1,10,-1,-2,-2,5/write(10,*)"**********矩阵A的形式为**********" write(10,"(1x,3f6.2,/)")aforall(i=1:n)x(i)=0end forallk=0100 D=0do i=1,ny(i)=b(i)do j=1,nif(i/=j) y(i)=y(i)-a(i,j)*x(j)end doy(i)=y(i)/a(i,i)end dodo j=1,nD=abs(x(j)-y(j))end doforall(i=1:n)x(i)=y(i)end forallif(D>=e) thenk=k+1write(10,*)"迭代次数为:",kgoto 100elsegoto 200end if200 write(10,*)"****************************************"write(10,*)"用jacobi方法解得的结果X[t]为:"write(10,"(1x,3f6.2,/)")x(:)stopend program五、结果及讨论1.实验结果**********矩阵A的形式为********** 10.00 -1.00 -1.00-1.00 10.00 -1.00-2.00 -2.00 5.00迭代次数为: 1迭代次数为: 2迭代次数为: 3迭代次数为: 4迭代次数为: 5迭代次数为: 6迭代次数为:7**************************************** 用jacobi方法解得的结果X[t]为:1.10 1.20 1.302.讨论分析(1)误差从上述输出结果中可以看出,当迭代次数k增大时,迭代值x1,y1,z1会越来越逼近方程组的精确解x=1.0,y=1.2,z=1.3。