数值分析 实验报告四_第1页
数值分析 实验报告四_第2页
数值分析 实验报告四_第3页
数值分析 实验报告四_第4页
数值分析 实验报告四_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数学与信息工程学院实验报告课程名称:计算方法实验室:7404实验台号:班级:11数学(1)班姓名:陈露实验日期:2014年5月21日实验名称线性方程组迭代解法及常微分方程数值解法实验目的和要求1.Jacobi迭代法的Matlab实现;2.G-S迭代法的Matlab实现;3.选做:超松弛迭代法。4.Euler法的Matlab实现; 5.改进Euler法的Matlab实现实验内容和步骤:实验内容:Thelinearsystemhasthesolution,Usethejacobimethodwithtoapproximatethesolutiontothelinearsystemtowithininthenorm.ProgramtheG-Smethodandtestitontheseexamples:.3、给定初值问题(1)用欧拉法(h=0.05)求数值解。(2)用改进欧拉法(h=0.05)求数值解。实验步骤:Jacobi迭代法实验编程1.新建M文件JacobiIteration.m输入:functionx=JacobiIteration(A,b,x0,delta,l)%用Jacobi迭代法解线线性方程组AX=b,x0为初始向量(以行向量的形式输入),%delta为给定的误差限,l为给定的最大迭代次数。[n,m]=size(A);ifn~=mfprintf('系数矩阵行列不相等');returnendifn~=length(b)fprintf('系数矩阵与常数项矩阵的维数不相等');returnendfori=1:nifabs(A(i,i))<1e-10fpritf('失败信息:因为系数矩阵的主对角线元素近似为0,Jacobi迭代失败。');returnendendifnargin<3%如果只输入前两个变量的值,则初值取零向量x0=zeros(1,n);endifnargin<4delta=1e-6;endifnargin<5l=100;endfork=1:lfori=1:nx(i)=(b(i)-A(i,1:n)*x0'+A(i,i)*x0(i))/A(i,i);endifmax(abs(x-x0))<deltafprintf('经过%3d次迭代,得到近似解为:',k);returnendx0=x;endfprintf('迭代了%3d次,还是没有达规定的误差要求',l);2.在MATLAB工作窗口输入:>>A=[12-2;111;221];b=[725]';x0=[000];delta=10^(-5);l=100;>>x=JacobiIteration(A,b,x0,delta,l)运行结果经过4次迭代,得到近似解为:x=12-1G-S迭代法1)实验编程1.新建M文件GaussSeidel.m输入:functionx=GaussSeidel(A,b,x0,delta,l)%用高斯-塞德尔迭代法解线线性方程组AX=b,x0为初始向量(以行向量的形式输入),%delta为给定的误差限,l为给定的最大迭代次数。[n,m]=size(A);ifn~=mfprintf('系数矩阵行列不相等');returnendifn~=length(b)fprintf('系数矩阵与常数项矩阵的维数不相等');returnendfori=1:nifA(i,i)==0fpritf('系数矩阵的主对角元有零元素');returnendendifnargin<3x0=zeros(1,n);endifnargin<4delta=1e-6;endifnargin<5l=100;endx=zeros(1,n);fori=1:nx(i)=(b(i)-A(i,1:i-1)*x(1:i-1)'+A(i,i+1:n)*x0(i+1:n)')/A(i,i);endifmax(abs(x-x0))<deltafprintf('经过%3d次迭代,得满足规定精度的近似解为:',k);x=x0;returnendend2.在MATLAB工作窗口输入:>>A=[311;13-1;31-5];b=[53-1]';x0=[000];delta=10^(-5);l=100;>>x=GaussSeidel(A,b,x0,delta,l)运行结果经过4次迭代,得到近似解为:x=1.66670.44441.2889Euler法实验编程1.建立名为f.m的M文件输入:functionf=f(x,y)f=1./(x.^2)-y./x;2.建立名为euler.m的M文件输入:function[x,y]=euler(f,x0,y0,b,n)h=(b-x0)/n;x(1)=x0;y(1)=y0;fork=1:ny(k+1)=y(k)+h*feval(f,x(k),y(k));x(k+1)=x(k)+h;end3.在MATLAB工作窗口输入:>>x0=1;y0=1;b=2;n=20;[x,y]=euler('f',x0,y0,b,n)2)运行结果x=Columns1through111.00001.05001.10001.15001.20001.25001.30001.35001.40001.45001.5000Columns12through211.55001.60001.65001.70001.75001.80001.85001.90001.95002.0000y=Columns1through111.00001.00000.99770.99370.98830.98180.97460.96670.95830.94960.9406Columns12through210.93150.92230.91300.90370.89440.88520.87600.86690.85800.8491改进Euler法实验编程1.建立名为f.m的M文件输入:functionf=f(x,y)f=1./(x.^2)-y./x;2.建立名为EulerModi.m的M文件输入:function[x,y]=EulerModi(f,x0,y0,b,n)h=(b-x0)/n;x(1)=x0;y(1)=y0;fork=1:nx(k+1)=x(k)+h;yy=y(k)+h*feval(f,x(k),y(k));y(k+1)=y(k)+h/2*(feval(f,x(k),y(k))+feval(f,x(k+1),yy));end3.在MATLAB工作窗口输入:>>x0=1;y0=1;b=2;n=20;>>[x,y]=EulerModi('f',x0,y0,b,n)2)运行结果x=Columns1through111.00001.05001.10001.15001.20001.25001.30001.35001.40001.45001.5000Columns12through211.55001.60001.65001.70001.75001.80001.85001.90001.95002.0000y=Columns1through111.00000.99890.99580.99110.98530.97860.97110.96310.95470.94600.9371Columns12through210.92800.91880.90960.90040.89130.88220.87320.86420.85540.8467实验结果分析:1.用Jacobi迭代法可算出方程组的解:(1,2,-1),迭代次数4次。用G-S迭代法算出方程组的解:(1.6667,0.4444,1.2889),且迭代解比较发散。2.Euler法和改进的Euler法相比较,改进的Euler法的计算精度更高,相对误差也比较小。因此在求解微分方程的数值解时,改进的Euler法优于Euler法。3.在上述两种方法中当步长h越小则计算精度越高,相对误差较小。因此,计算能力允许的范围内,选取步长越小可以得到更加精确的结果。4.在利用这两种方法计算数值解的过程中,前一次迭代的结果会对下一轮求得的数值产生影响。因此,一旦上一轮迭代所得的结果有偏差,下一轮结果的偏差将大于上一轮的偏差。因此会导致伴随迭代次数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论