ImageVerifierCode 换一换
格式:DOCX , 页数:42 ,大小:95.87KB ,
资源ID:10224713      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10224713.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数值分析上机题答案.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数值分析上机题答案.docx

1、数值分析上机题答案数值分析上机题姓名:武均 学号:142648习题117(上机题)舍入误差与有效数设,其精确值为。(1)编制按从大到小的顺序,计算的通用程序。(2)编制按从小到大的顺序,计算的通用程序。(3)按两种顺序分别计算,并指出有效位数。(编制程序时用单精度)(4)通过本上机题你明白了什么?按从大到小的顺序计算的通用程序为:#includefloat sum(float N) float j,s,sum=0; for(j=2;j=N;j+) s=1/(j*j-1); sum+=s; return sum; 按从小到大的顺序计算的通用程序为:#includefloat sum(float

2、N)float j,s,sum=0;for(j=N;j=2;j-)s=1/(j*j-1);sum+=s;return sum;从大到小的顺序的值从小到大的顺序的值精确值有效位数从大到小从小到大0.7400490.740050.740049650.7498520.74990.7499440.7498520.7499990.74999936通过本上机题,看出按两种不同的顺序计算的结果是不相同的,按从大到小的顺序计算的值与精确值有较大的误差,而按从小到大的顺序计算的值与精确值吻合。从大到小的顺序计算得到的结果的有效位数少。计算机在进行数值计算时会出现“大数吃小数”的现象,导致计算结果的精度有所降低,

3、我们在计算机中进行同号数的加法时,采用绝对值较小者先加的算法,其结果的相对误差较小。习题220(上机题)Newton迭代法(1)给定初值及容许误差,编制Newton法解方程根的通用程序。(2)给定方程,易知其有三个根,。1由Newton方法的局部收敛性可知存在,当时,Newton迭代序列收敛于根。试确定尽可能大的。2试取若干初始值,观察当,时Newton序列是否收敛以及收敛于哪一个根。(3)通过本上机题,你明白了什么?解:(1)编制的通用程序:#include#include#define eps 0.000001 /给定容许误差float f(float x) /定义函数f(x) float

4、 f; f=x*x*x/3-x; /f(x)的表达式; return(f);float df(float x) /定义函数df(x),计算f(x)的导函数 float df; df=x*x-1; /f(x)导函数的表达式; return (df);void main(void) float x0,x1,a; int k=0; coutx0; do a=-f(x0)/df(x0); x1=x0+a; k+; x0=x1; while(fabs(a)eps); coutktx0; /输出迭代的次数和根值(2)计算迭代序列收敛于根的尽可能大的的函数为:#include#includevoid del

5、ay(int n) /定义延时函数for(n=10000;n0;n-);#define eps 0.000001float f(float x) /定义函数f(x) float f; f=x*x*x/3-x; /f(x)的表达式; return(f);float df(float x) /定义函数df(x),计算f(x)的导函数 float df; df=x*x-1; /f(x)导函数的表达式; return (df);int judgement(float z) int count=5; float x0,x1,type,type1; x0=z; while(count-0) x1=x0-f

6、(x0)/df(x0); type=fabs(x1); type1=fabs(x1-x0); /调试值用coutcount=countttype=typettype1=type1n; if(fabs(x1-x0)eps) return 1; x0=x1; delay(30000); /调试值用 return 0; void main(void) float delta=0; int flag=1; while(flag=1) cout方程的根为:n; delta+=eps; flag=judgement(delta); cout输出方程根收敛的区间值:n; coutdelta-eps; /输出

7、收敛的区间值当步长为0.001时,程序计算出的的为=0.774,即在区间(-0.774,0.774)内迭代序列收敛于0。对于不同得初始值收敛于不同的根,在(-,-1)内收敛于,在(-0.774,0.774)内收敛于,在(1,+)内收敛于,但在内(0.774,1)和(1,0.774)均可能收敛于和。,分别为方程的精确解。分析:对于不同的初值,迭代序列会收敛于不同的根,所以在某个区间内求根对于初值的选取有很大的关系。产生上述结果的原因是区间不满足大范围收敛的条件。习题339(上机题)列主元Gauss消去法 对于某电路的分析,归结为求解线性方程组RI=V。 其中,31 -13 0 0 0 -10 0

8、 0 0 -13 35 -9 0 -11 0 0 0 00 -9 31 -10 0 0 0 0 00 0 -10 79 -30 0 0 0 -90 0 0 -30 57 -7 0 -5 00 0 0 0 -7 47 -30 0 00 0 0 0 0 -30 41 0 00 0 0 0 -5 0 0 27 -20 0 0 -9 0 0 0 -2 29 R= VT=(-15,27, -23,0,-20,12,-7,7,10)T(1)编制解n阶线性方程组Ax=b的列主元三角分解法的通用程序;(2)用所编制的程序解线性方程组RI=V,并打印出解向量,保留五位有效数;(3)本编程之中,你提高了哪些编程能

9、力?程序为:#include#includevoid main(void)int i,j,n,k,q;float a1011,s10,s110;coutn;cout输入数组a:endl;for(i=1;i=n;i+)for(j=1;jaij; /给矩阵a赋值for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;coutn; /输出数组acoutn;/进行第一行和第一列元素的求取/int t=1;for(i=1;i=n;i+)si=ai1;float max=fabs(s1);for(i=2;imax)max=fabs(si);t=i;for(j=1;j=(n+1

10、);j+)float b=a1j;a1j=atj;atj=b; /进行第一列主元互换for(i=2;i=n;i+)ai1=ai1/max; /第一列除以a11for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;coutn;/输出进行第一步变换的数组acoutn;/进行第k步分解/for(k=2;k=n;k+)for(i=k;i=n;i+)float sum=0;for(q=1;qk;q+)sum+=aiq*aqk;s1i=aik-sum;int l=k;float m=fabs(s1k);for(i=k;im)m=fabs(s1i);l=i; /返回行值for

11、(j=1;j=n+1;j+) /交换两行元素float s2=akj;akj=alj;alj=s2;for(j=k;j=n+1;j+)/算出第k行行元素的值float sum1=0;for(q=1;qk;q+)sum1+=akq*aqj;akj=akj-sum1;for(i=k+1;i=n;i+)/算出第k列列元素的值float sum2=0;for(q=1;qk;q+)sum2+=aiq*aqk;aik=(aik-sum2)/(akk); /第k步分解结束for(i=1;i=n;i+)for(j=1;j=(n+1);j+)coutaijt;cout=1;i-)xn=ann+1/ann;flo

12、at sum3=0;for(j=i+1;j=n;j+)sum3+=aij*xj;xi=(ain+1-sum3)/aii; /回代过程for(i=1;i=n;i+)coutxi=xiendl; /输出解向量结果:方程的解为:x1= -0.28923,x2= 0.34544,x3= -0.71281,x4= -0.22061,x5= -0.43040,x6= 0.15431,x7= -0.057823,x8= 0.20105,x9= 0.29023。分析:我感觉是提高了查错误点的能力和编循环语句的能力,即利用很规整的迭代公式进行编程。另外列主元三角分解法的阶梯步骤有了更深的了解!40逐次超松弛迭代

13、法(1)编制解n阶线性方程组Ax=b的SOR方法的通用程序(要求);(2)对于39题中所给的线性方程组,取松弛因子,容许误差,打印松弛因子、迭代次数、最佳松弛因子及解向量。程序为:#include#include#define eps 0.5e-5 /迭代误差void main(void) int i,j,l; float w,t; float m9; float sum; float a99=31,-13,0,0,0,-10,0,0,0,-13,35,-9,0,-11,0,0,0,0,0,-9,31,-10,0,0,0,0,0,0,0,-10,79,-30,0,0,0,-9,0,0,0,-3

14、0,57,-7,0,-5,0,0,0,0,0,-7,47,-30,0,0,0,0,0,0,0,-30,41,0,0,0,0,0,0,-5,0,0,27,-2, 0,0,0,-9,0,0,0,-2,29; float b9=-15,27,-23,0,-20,12,-7,7,10; float max(float m9); for(t=1;t=99;t+) l=0; float x09=1,1,1,1,1,1,1,1,1; float x19=1,1,1,1,1,1,1,1,1; w=t/50; do for(i=0;i9;i+)x0i=x1i;for(i=0;i9;i+)sum=0;for(j=

15、0;ji;j+) sum=sum+aij*x1j;for(j=i+1;j9;j+)sum=sum+aij*x0j;x1i=(1-w)*x0i+w*(bi-sum)/aii; /解出九个解for(i=0;i=eps);if(max(m)=eps)cout迭代次数=ltw=wn;for(i=0;i9;i+)coutx1i=x1it;cout-n;float max(float m9) /求出最大的迭代误差 float k; k=(fabs(m0); for(int i=1;ik) k=fabs(mi); return k;结果为: 迭代次数 迭代次数 迭代次数 迭代次数0.02 12910.04

16、7000.06 4860.08 3730.10 3030.12 2550.14 2210.16 1940.18 1730.20 1560.22 1420.24 1300.26 1200.28 1110.30 1030.32 960.34 900.36 850.38 800.40 750.42 710.44 680.46 640.48 610.50 580.52 550.54 530.56 510.58 480.60 460.62 440.64 420.66 410.68 390.70 370.72 360.74 340.76 330.78 320.80 300.82 290.84 280.86

17、 270.88 260.90 250.92 240.94 230.96 220.98 211.00 201.02 191.04 181.06 171.08 161.10 151.12 151.14 141.16 121.18 101.20 111.22 121.24 121.26 131.28 131.30 141.32 151.34 151.36 161.38 171.40 181.42 191.44 191.46 201.48 211.50 221.52 241.54 251.56 271.58 301.60 311.62 341.64 361.66 391.68 441.70 491.7

18、2 551.74 601.76 711.78 811.80 971.82 1211.84 1571.86 2281.88 3981.90 15821.92 54271.94 21781.96 13741.98 1009 从1.92到2.00均出现不合理的迭代次数,迭代次数偏大。不是合理的迭代值。当初值为x=(1,1,1,1,1,1,1,1,1,)T 时,从上表可以看出,最佳松弛因子为=1.18,迭代次数仅为10次,方程的解为: x1= -0.289231,x2= 0.345437,x3= -0.712811, x4= -0.220608,x5= -0.430400,x6= 0.154309,x

19、7= -0.057823,x8= 0.201054,x9= 0.290229。习题 437.(上机题)3次样条插值函数(1)编制求第一型3次样条插值函数的通用程序; (2) 已知汽车曲线型值点的数据如下:0123456789102.513.304.044.705.225.545.785.405.575.705.80端点条件为=0.8, =0.2。用所编制程序求车门的3次样条插值函数S(x),并打印出S(i+0.5)(i=0,1,9)。解:通用程序:#includevoid main(void) float x11;/存放数组xj float y11;/存放数组yj float h11;/存放数

20、组hj float u11;/存放数组uj float v11;/存放数组vj float d11;/存放数组dj float M11;/存放数组Mj float b11;/ 存放数组bj float t11,l11,yy11,s4,aa1,aa2,aa3,aa4; float s110; int i,j,n; float xx;/x为区间值 /将初值初始化 coutn; cout输入数组x:n; for(i=0;ixi; cout输入数组y:n; for(i=0;iyi; /输入端点值 float df2; cout输入两个端点值:n; for(i=0;idfi; /利用书本上的算法求出所需

21、要的值 /求出hj的值 for(j=0;j=n-1;j+) hj=xj+1-xj; couthj=hjt; coutendl; /求出uj和vj的初值 v0=1; un=1; for(j=1;j=n-1;j+) uj=hj-1/(hj-1+hj); vj=hj/(hj-1+hj); /求出dj的值 for(j=1;jn;j+) dj=6*(yj+1-yj)/hj-(yj-yj-1)/hj-1)/(hj+hj-1); d0=6*(y1-y0)/h0-df0)/h0; dn=6*(df1-(yn-yn-1)/hn-1)/hn-1; for(j=1;j=n;j+) coutuj=ujt; coute

22、ndl; for(j=0;jn;j+) coutvj=vjt; coutendl; for(j=0;j=n;j+) coutdj=djt; coutendl; /利用书本上的追赶法求解方程组 for(i=0;i=n;i+) bi=2; coutendl; t0=b0; yy0=d0; /消元过程 for(i=1;i=0;i-) Mi=(yyi-vi*Mi+1)/ti; /将Mj的值输出 for(i=0;i=n;i+) coutMi=Miendl; /输出插值多项式的系数 for(j=0;jn;j+) s0=yj; s1=(yj+1-yj)/hj-(Mj/3+Mj+1/6)*hj; s2=Mj/2; s3=(Mj+1-Mj)/(6*hj); cout当x的值在区间xj到x(j+1)时,输出插值多项式的系数:n; for(int k=0;k4;k+) coutsk=skt; coutendl; (2)编制的程序求车门的3次样条插值函数S(x):x属于区间0,1时;S(x)=2.51+0.8(x)-0.00

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1