收藏 分销(赏)

数值分析上机第四次作业.doc

上传人:天**** 文档编号:4542538 上传时间:2024-09-27 格式:DOC 页数:8 大小:171KB 下载积分:6 金币
下载 相关 举报
数值分析上机第四次作业.doc_第1页
第1页 / 共8页
数值分析上机第四次作业.doc_第2页
第2页 / 共8页


点击查看更多>>
资源描述
数值分析上机第四次作业 实验项目:共轭梯度法求解对称正定得线性方程组 实验内容:用共轭梯度法求解下面方程组 (1) 迭代20次或满足时停止计算。 (2) ,A就是1000阶得Hilbert矩阵或如下得三对角矩阵, A[i,i]=4,A[i,i-1]=A[i-1,i]=-1,i=2,3,、、,n b[1]=3, b[n]=3, b[i]=2,i=2,3,…,n-1 迭代10000次或满足时停止计算。 (3)*考虑模型问题,方程为 用正方形网格离散化,若取,得到得线性方程组,并用共轭梯度法(CG法)求解,并对解作图。 实验要求:迭代初值可以取,计算到停止.本题有精确解,这里表示以为分量得向量,表示在相应点上取值作为分量得向量. 实验一: (1) 编制函数子程序CGmethod。 function [x,k]=CGmethod(A,b) n=length(A);x=zeros(n,1);r=b-A*x;rho=r'*r; k=0; while rho>10^(-12) & k<20 k=k+1; if k==1 p=r; else beta=rho/rho1; p=r+beta*p; end w=A*p; alpha=rho/(p'*w); x=x+alpha*p; r=r-alpha*w; rho1=rho; rho=r'*r; end 编制主程序shiyan1_1: clear,clc A=[2,-1,0,0;-1,3,-1,0;0,-1,4,1;0,0,-1,5]; b=[3,-2,1,5]'; [x,k]=CGmethod(A,b) 运行结果为: x = 1、3882 -0、2855 -0、0222 0、9367 k = 20 (2) 编制函数子程序CGmethod_1 function [x,k]=CGmethod_1(A,b) n=length(A);x(1:n,1)=0;r=b-A*x;r1=r; k=0; while norm(r1,1)>=10^(-7)&k<10^4 k=k+1; if k==1 p=r; else beta=(r1'*r1)/(r'*r);p=r1+beta*p; end r=r1; w=A*p; alpha=(r'*r)/(p'*w); x=x+alpha*p; r1=r-alpha*w; end 编制主程序shiyan1_2: clear,clc n=1000; A=hilb(n); b=sum(A')'; [x,k]=CGmethod_1(A,b) 运行结果为:x得值,均接近1,迭代次数k=32 实验二 实验目得:用复化Simpson方法、自适应复化梯形方法与Romberg方法求数值积分。 实验内容:计算下列定积分 (1) (2) (3) 实验要求: (1)分别用复化Simpson公式、自适应复化梯形公式计算要求绝对误差限为,输出每种方法所需得节点数与积分近似值,对于自适应方法,显示实际计算节点上离散函数值得分布图; (2)分析比较计算结果。 2、实验目得:高斯数值积分方法用于积分方程求解。 实验内容:线性得积分方程得数值求解,可以被转化为线性代数方程组得求解问题。而线性代数方程组所含未知数得个数,与用来离散积分得数值方法得节点个数相同。在节点数相同得前提下,高斯数值积分方法有较高得代数精度,用它通常会得到较好得结果。对第二类Fredholm积分方程 首先将积分区间[a,b]等分成n份,在每个子区间上离散方程中得积分就得到线性代数方程组。 实验要求:分别使用如下方法,离散积分方程中得积分 1、复化梯形方法;2、复化辛甫森方法;3、复化高斯方法。求解如下得积分方程 ,方程得准确解为, 并比较各算法得优劣。 实验二 1、复化Simpson方法) 输入积分区间下限0 输入积分区间上限2 输入等分份数20 输入被积函数(以x为自变量)x^6/10-x^2+x S = 1、1619 输入积分区间下限0 输入积分区间上限1 输入等分份数20 输入被积函数(以x为自变量)x*sqrt(x) S = 0、4000 输入积分区间下限5 输入积分区间上限200 输入等分份数20 输入被积函数(以x为自变量)1/sqrt(x) S = 23、8218 2、自动变步长Simpson方法 函数1: 输入积分区间下限0 输入积分区间上限2 输入为课本得第几个函数(第一个这输入1):1 S =1、619(过程省略) i = 19 函数2: 输入积分区间下限0 输入积分区间上限1 输入为课本得第几个函数(第一个这输入1):2 S =0、4(过程省略) i = 17 函数3: 输入积分区间下限5 输入积分区间上限200 输入为课本得第几个函数(第一个这输入1):3 S=23、8121(过程省略) i = 111 编制程序如下: Clear,clc syms x a=input('输入积分区间下限'); b=input('输入积分区间上限'); n=input('输入等分份数'); ff=input('输入被积函数(以x为自变量)'); h=(b-a)/n; f=inline(ff,'x'); sum1=0; sum2=0; for i=0:n-1 sum1=sum1+f(a+i*h+0、5*h); end for i=1:n-1 sum2=sum2+f(a+i*h); end for i=0:2*n X(i+1,1)=f((b-a)*i/(n*2)+a); end S=h/6*(f(a)+4*sum1+2*sum2+f(b)) function S = zdsps( n ) a=0; b=1; h=(b-a)/4; f=inline('x^(3/2)','x'); sum1=0; sum2=0; for i=0:n-1 sum1=sum1+f(a+i*h+0、5*h); end for i=1:n-1 sum2=sum2+f(a+i*h); end for i=0:2*n x(i+1,1)=f((b-a)*i/(n*2)+a); end S=h/6*(f(a)+4*sum1+2*sum2+f(b)); end function S = zpsgs(a,b,n,ff ) h=(b-a)/n; sum1=0; sum2=0; sum3=0; sum4=0; if ff==1 f=inline('x^6/10-x^2+x','x'); end if ff==2 f=inline('x^(3/2)','x'); end if ff==3 f=inline('1/sqrt(x)','x'); end for i=0:n-1 sum1=sum1+f(a+i*h+0、25*h); sum2=sum2+f(a+i*h+0、75*h); sum4=sum4+f(a+i*h+0、5*h); end for i=1:n-1 sum3=sum3+f(a+i*h); end for i=0:4*n x(i+1,1)=f((b-a)*i/(n*4)+a); end S=h/(6*2)*(f(a)+4*sum1+4*sum2+2*(sum3+sum4)+f(b)); end clear, clc a=input('输入积分区间下限'); b=input('输入积分区间上限'); ff=input('输入为课本得第几个函数(第一个这输入1):'); for i=2:300 S(i)=zpsgs(a,b,(i),ff); S(i+1)=zpsgs(a,b,(i+1),ff); if abs(S(i+1)-S(i))<0、5*10^(-7) break end end S %所求积分值 i %所分份数 实验三 1、对常微分方程初值问题 分别使用Euler显示方法、改进得Euler方法与经典RK法与四阶Adams预测-校正算法,求解常微分方程数值解,并与其精确解进行作图比较。其中多步法需要得初值由经典RK法提供。 2、实验目得:Lorenz问题与混沌 实验内容:考虑著名得Lorenz方程 其中s, r, b为变化区域有一定限制得实参数。该方程形式简单,表面上瞧并无惊人之处,但由该方程揭示出得许多现象,促使“混沌”成为数学研究得崭新领域,在实际应用中也产生了巨大得影响。 实验方法:先取定初值Y0=(x, y, z)=(0, 0, 0),参数s=10, r=28, b=8/3,用MATLAB编程数值求解,并与MATLAB函数ods45得计算结果进行对比。 实验要求: (1)对目前取定得参数值s, r与b,选取不同得初值Y0进行运算,观察计算得结果有什么特点?解得曲线就是否有界?解得曲线就是不就是周期得或趋于某个固定点? (2)在问题允许得范围内适当改变其中得参数值s, r, b,再选取不同得初始值Y0进行试算,观察并记录计算得结果有什么特点?就是否发现什么不同得现象? 3、 定义函数子程序为: function z=f(x,y) z=-y+2*cos(x); return 主程序为: clear,clc b=pi; a=0; n=100; y(1)=1; h=(b-a)/n; x=a:h:b; for i=1:n y(i+1)=y(i)+h*f(x(i),y(i)); end t1=plot(x,y,'r-') hold on for i=1:n K1=f(x(i),y(i)); K2=f(x(i+1),y(i)+h*K1); y(i+1)=y(i)+h*(K1+K2)/2; end t2=plot(x,y,'b+') for i=1:n K1=f(x(i),y(i)); K2=f(x(i)+0、5*h,y(i)+0、5*h*K1); K3=f(x(i)+0、5*h,y(i)+0、5*h*K2); K4=f(x(i),y(i)+h*K3); y(i+1)=y(i)+h*(K1+2*K2+2*K3+K4)/6; end t3=plot(x,y,'ko') for i=1:3 K1=f(x(i),y(i)); K2=f(x(i)+0、5*h,y(i)+0、5*h*K1); K3=f(x(i)+0、5*h,y(i)+0、5*h*K2); K4=f(x(i),y(i)+h*K3); y(i+1)=y(i)+h*(K1+2*K2+2*K3+K4)/6; end for i=4:n z=y(i)+h/24*(55*f(x(i),y(i))-59*f(x(i-1),y(i-1))、、、 +37*f(x(i-2),y(i-2))-9*f(x(i-3),y(i-3))); y(i+1)=y(i)+h/24*(9*f(x(i+1),z)+19*f(x(i),y(i))、、、 -5*f(x(i-1),y(i-1))+f(x(i-2),y(i-2))); end t4=plot(x,y,'g*') t5=ezplot('sin(x)+cos(x)',[0,pi]) xlabel('x轴','FontWeight','bold') ylabel('y轴', 'FontWeight','bold') legend([t1,t2,t3,t4,t5],'向前Euler法','¸改进得Euler法','经典四阶Runge-Kutta法','四阶Adams公式','精确解') 原图为: 局部放大图为: 由图可得:四阶Adams公式及改进得欧拉法将为精确。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服