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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数值分析上机题概况.docx

1、数值分析上机题概况数值分析上机题习题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 N)float j,s,sum

2、=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 f; f=x*x*x/3-x

4、; /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 delay(int n) /定义延时

5、函数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(x0)/df(x0); ty

6、pe=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; /输出收敛的区间值当步长为0.001

7、时,程序计算出的的为=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 0 0 -13 35 -9

8、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)本编程之中,你提高了哪些编程能力?程序为:#include#

9、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);j+)float b=a1

10、j;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(j=1;j=n+1;j+)

11、/交换两行元素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;float sum3=0;for(j

12、=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。分析:我感觉是提高了查错误点的能力和编循环语句的能力,即利用很规整的迭代公式进行编程。另外列主元三角分解法的阶梯步骤有了更深的了解!习题 437.(上机题)3次样条插值函数(1)编

13、制求第一型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;/存放数组hj float u11;/存放数组uj float v11;/存放数组vj float d11;/存放数组dj float

14、 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; /利用书本上的算法求出所需要的值 /求出hj的值 for(j=0;j=n-1;j+) hj=xj+1-xj; couthj=hjt; coutendl;

15、 /求出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; coutendl; for(j=0;jn;j+) coutvj=vjt; coutendl; for(j=0;j=n;j+) coutd

16、j=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

17、(int k=0;k4;k+) coutsk=skt; coutendl; (2)编制的程序求车门的3次样条插值函数S(x):x属于区间0,1时;S(x)=2.51+0.8(x)-0.0014861(x)(x)-0.00851395(x)(x)(x)x属于区间1,2时;S(x)=3.3+0.771486(x-1)-0.027028(x-1)(x-1)-0.00445799(x-1)(x-1)(x-1)x属于区间2,3时;S(x)=4.04+0.704056(x-2)-0.0404019(x-2)(x-2)-0.0036543(x-2)(x-2)(x-2)x属于区间3,4时;S(x)=4.7+0

18、.612289(x-3)-0.0513648(x-3)(x-3)-0.0409245(x-3)(x-3)(x-3)x属于区间4,5时;S(x)=5.22+0.386786(x-4)-0.174138(x-4)(x-4)+0.107352(x-4)(x-4)(x-4)x属于区间5,6时;S(x)=5.54+0.360567(x-5)+0.147919(x-5)(x-5)-0.268485(x-5)(x-5)(x-5)x属于区间6,7时;S(x)=5.78-0.149051(x-6)-0.657537(x-6)(x-6)+0.426588(x-6)(x-6)(x-6)x属于区间7,8时;S(x)=

19、5.4-0.184361(x-7)+0.622227(x-7)(x-7)-0.267865(x-7)(x-7)(x-7)x属于区间8,9时;S(x)=5.57+0.256496(x-8)-0.181369(x-8)(x-8)+0.0548728(x-8)(x-8)(x-8)x属于区间9,10时;S(x)=5.7+0.058376(x-9)-0.0167508(x-9)(x-9)+0.0583752(x-9)(x-9)(x-9)S(0.5)=2.90856 S(1.5)=3.67843 S (2.5)=4.38147S(3.5)=4.98819 S(4.5)=5.38328 S(5.5)=5.7

20、237S(6.5)=5.59441 S(7.5)=5.42989 S(8.5)=5.65976S(9.5)=5.7323 习题623(上机题)常微分方程初值问题数值解(1)编制RK4方法的通用程序;(2)编制AB4方法的通用程序(由RK4提供初值);(3)编制AB4-AM4预测校正方法的通用程序(由RK4提供初值);(4)编制带改进的AB4-AM4预测校正方法的通用程序(由RK4提供初值);(5)对于初值问题取步长,应用(1)(4)中的四种方法进行计算,并将计算结果和精确解作比较;(6)通过本上机题,你能得到哪些结论?解:程序为:#include#include#include#include

21、ofstream outfile(data.txt);/此处定义函数f(x,y)的表达式/用户可以自己设定所需要求得函数表达式double f1(double x,double y) double f1; f1=(-1)*x*x*y*y; return f1;/此处定义求函数精确解的函数表达式double f2(double x) double f2; f2=3/(1+x*x*x); return f2;/此处为精确求函数解的通用程序void accurate(double a,double b,double h) double x100,accurate100; x0=a; int i=0;

22、 outfile输出函数准确值的程序结果:n; do xi=x0+i*h; accuratei=f2(xi); outfileaccuratei=accuratein; i+; while(i(b-a)/h+1);/此处为经典Runge-Kutta公式的通用程序void RK4(double a,double b,double h,double c) int i=0; double k1,k2,k3,k4; double x100,y100; y0=c; x0=a; outfile输出经典Runge-Kutta公式的程序结果:n; do xi=x0+i*h; k1=f1(xi,yi); k2=

23、f1(xi+h/2),(yi+h*k1/2); k3=f1(xi+h/2),(yi+h*k2/2); k4=f1(xi+h),(yi+h*k3); yi+1=yi+h*(k1+2*k2+2*k3+k4)/6; outfileyi=yin; i+; while(i(b-a)/h+1);/此处为4阶Adams显式方法的通用程序void AB4(double a,double b,double h,double c) double x100,y100,y1100; double k1,k2,k3,k4; y0=c; x0=a; outfile输出4阶Adams显式方法的程序结果:n; for(int i=0;i=2;i+) xi=x0+i*h; k1=f1(xi,yi); k2=f1(xi+h/2),(yi+h*k1/2); k3=f1(

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

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