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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数值分析实验题.docx

1、数值分析实验题对所选试验题的具体说明:1插值问题数值实验题1。程序中的一些符号的解释:* 用牛顿插值法依据N个已知数据点及始函数值 * 输入: n-已知数据点的个数N-1 * x-已知数据点第一坐标的N维列向量 * y-已知数据点第二坐标的N维列向量 * xx-插值点第一坐标 * 输出: 函数返回值所求插值点的第二坐标 2该程序中的主要难点是用二维数组来定义差商。for( i=1;i=n;i+) Mij=(Mij-1-Mi-1j-1)/(Mi0-Mi-j+10); 源程序:#include #include void main() char L; do double M5050; double

2、 x50,y50; double X=1,xx=0,w=1,N=0,P,R=1; int n; coutn; for(int i=0;i=n;i+) cout请输入xi的值:xi; cout请输入yi的值:yi; Mi0=xi; Mi1=yi; for( int j=2;j=n+1;j+) for( i=1;i=n;i+) Mij=(Mij-1-Mi-1j-1)/(Mi0-Mi-j+10); for(i=1;i=n;i+) cout其i阶均差为:Mii+1endl; coutxx; for(i=0;in;i+) X*=xx-xi; N+=Mi+1i+2*X; P=M01+N; cout其函数值

3、:y=Pendl; for(i=0;in;i+) w*=xx-xi; R=fabs(Mnn+1*w); cout其绝对误差:R=Rendl; coutendl还想算其它插值吗?是请按y否则按nL; while(L=y); 附:运行结果1插值问题的运行结果:注:当x=1时原函数得值为:0.038461538请输入所求均差阶数:2请输入x0的值:-1请输入y0的值:0.038461538请输入x1的值:0请输入y1的值:1请输入x2的值:1请输入y2的值:0.0344615其1阶均差为:0.961538其2阶均差为:-0.963538请输入x的值:x=1其函数值:y=0.0344615/比较精确。

4、还想算其它插值吗?是请按y否则按ny请输入所求均差阶数:4请输入x0的值:-1请输入y0的值:0.038461538请输入x1的值:-0.5请输入y1的值:0.137931034请输入x2的值:0请输入y2的值:1请输入x3的值:0.5请输入y3的值:0.137931034请输入x4的值:1请输入y4的值:0.038461538其1阶均差为:0.198939其2阶均差为:1.5252其3阶均差为:-3.31565其4阶均差为:3.31565请输入x的值:x=1其函数值:y=0.0384615/很精确!还想算其它插值吗?是请按y否则按n请输入所求均差阶数:8请输入x0的值:-1请输入y0的值:0

5、.38461538请输入x1的值:-0.75请输入y1的值:0.066390041请输入x2的值:-0.5请输入y2的值:0.137931034请输入x3的值:-0.25请输入y3的值:0.390243902请输入x4的值:0请输入y4的值:1请输入x5的值:0.25请输入y5的值:0.390243902请输入x6的值:0.5请输入y6的值:0.137931043请输入x7的值:0.75请输入y7的值:0.06639041请输入x8的值:1请输入y8的值:0.038461538其1阶均差为:-1.2729其2阶均差为:3.11813其3阶均差为:-2.22927其4阶均差为:4.11377其5

6、阶均差为:-18.2553其6阶均差为:40.0886其7阶均差为:-54.8146其8阶均差为:54.2519请输入x的值:x=1其函数值:y=0.0384615/很精确!还想算其它插值吗?是请按y否则按nnPress any key to continue2评价:首先这个程序适用于任何给定的插值条件的多项式,并不局限于本题。1. 但是对于本题而言执行的效率并不高,原因在于每次都要计算xi和yi的值。如:输入n=3;则出现以下的运行结果:说明:对于书上的实验题,xi=-1+2/n;yi=1/(5+xi*xi) (其中n为阶数)调试过程中出现的问题:曾尝试把式写入程序但是出现了如下的问题:其1

7、阶均差为:-1.#IND其2阶均差为:-1.#IND其3阶均差为:-1.#IND请输入x的值:x=1其函数值:y=-1.#IND其绝对误差:R=-1.#IND还想算其它插值吗?是请按y否则按n2. 对于上面程序中的Mij的定义是该程序的关键,但是要用到牛顿插值中的阶商只要用一个,处于方便起见,选Mii开始的时候我就是直接用的Mij+1; 输入所求均差阶数:3其1阶均差为:-9.25596e+061其2阶均差为:-9.25596e+061其3阶均差为:-9.25596e+061请输入x的值:x=1其函数值:y=-1.#IND其绝对误差:R=-1.#IND还想算其它插值吗?是请按y否则按n对于错误

8、的分析:关键我不明白#IND的含义。3. 在执行过程中必须输入一个确定的值不能输入一个表达式如:“1/25”此数应该写成0.24,否则程序不能完整地执行下去会出现如下的形式:如:请输入所求均差阶数:1请输入x0的值:-1请输入y0的值:1/26请输入x1的值:请输入y1的值:其1阶均差为:1请输入x的值:x=其函数值:y=2其绝对误差:R=1还想算其它插值吗?是请按y否则按nPress any key to continue2数值积分数值试验题(高斯三点法)设计的思想:先将高斯三点法中的三个点找出来分别为,0, -.用gauss三点公式=(b-a)/2*0.8888889*f(a+b)/2)+

9、0.5555556*f((a+b)/2-0.7745967*(b-a)/2)+0.5555556*f(a+b)/2+0.7745967*(b-a)然后用微分思想将区间a,b分成n等分,记下每个区间的起始点和终了点作为计算函数值的自变量的组成成员。即原程序中的a1和a2.最后将这些所计算的n个值进行累加,即可得到积分值。源程序:#include#includefloat f1(float x)return(x*x*x*x*x);float f2(float x)return sin(x);float gauss(float(*f)(float x) ) / const t1=sqrt(0.6)

10、,t2=0,t3=-sqrt(0.6); int n,t=0; float a=0,b=1,a1,a2,h,y1,y2,y3,m=0,c,d,e; coutn; h=(b-a)/n; for(t=0;tn;t+) / a1=a+t*h; a2=a+(t+1)*h; y1=(a1+a2)/2+(a1-a2)/2*t1; y2=(a1+a2)/2+(a1-a2)/2*t2; y3=(a1+a2)/2+(a1-a2)/2*t3; c=f(y1);d=f(y2);e=f(y3); m+=(h/18)*(5*c+8*d+5*e); return m;/ void main (void)char H;do

11、cout”第一个函数的积分为:” gauss(f1)endl;cout”第二个函数的积分为:”gauss(f2)endl; coutendl还验算其它n的值吗?是请按y否则按nH; while(H=y);附:运行结果2数值积分问题的运行结果:input n =1第一个函数的积分为:0.03125/不精确。input n =1第二个函数的积分为:0.479426/比较精确。还验算其它n的值吗?是请按y否则按nyinput n =2第一个函数的积分为:0.119141/比较精确。input n =2第二个函数的积分为:0.464521/精确。还验算其它n的值吗?是请按y否则按nyinput n =

12、10第一个函数的积分为:0.164591/很精确。input n =3第二个函数的积分为:0.461833/很精确!还验算其它n的值吗?是请按y否则按nyinput n =20第一个函数的积分为:0.166146/很精确!input n =4第二个函数的积分为:0.460897/很精确!还验算其它n的值吗?是请按y否则按nnPress any key to continue说明:课本上两个函数的积分实际值分别为0.16666666和0.460124569调试过程中出现的问题:对于处的函数指针的调用必须加上函数的类型float,否则编译不过去。因为每个函数值都有一个float型的返回值,因此调用

13、的时候必须加上函数类型。 for(int i=1;i=n;i+) a1=a+t*h; a2=a+(t+1)*h; y1=(a1+a2)/2+(a1-a2)*t1; y2=(a1+a2)/2+(a1-a2)*t2; y3=(a1+a2)/2+(a1-a2)*t3; c=f(y1);d=f(y2);e=f(y3); m=(h/18)*(5*c+8*d+5*e); sum+=m;t+;return sum; for(t=1;t=n;t+) a1=a+t*h; a2=a+(t+1)*h; y1=(a1+a2)/2+(a1-a2)*t1; y2=(a1+a2)/2+(a1-a2)*t2; y3=(a1+

14、a2)/2+(a1-a2)*t3; c=f(y1);d=f(y2);e=f(y3); m=(h/18)*(5*c+8*d+5*e); sum+=m;return sum; .如果把该函数段下面的左图改写成右图则运行结果有误。.对于处的t必须从0到n-1开始不能从1到n开始,如果从1到n,则少了n份区间的第一段,而又多了后面的一个随机产生的一段,造成计算的错误。发现调试过程中随着n输入的值的增大,精度不断提高。特别是当这两个函数的积分当n取1时误差特别大。其实这也符合积分的思想,即把一个区间分成无穷等分。故n越大则越精确。对于return m;应该写在for循环的语句的外面,不能写在其里面,因为

15、这个返回值是在循环语句结束后最后一次行返回的。.其实4里面说的也不是全对,因为我上面所选的函数的值是float型,其字长为四个字节也就是32位。而其他人用的是double型其字长是八个字节也就是64位,其精度比较我的这个而言就高了许多,但这样的坏处就是占用机子的内存就相对而言大了。输入的n值不要太大,虽然这样结果比较精确,但这样机子不会立即出现结果,执行的时间就会比较长,因为这样计算的过程就相对的会增大不少。#includedouble m(double x,double n) return x*x/24*(2+x*x*(-7+n*n*(14+n*(12+3*n);/返回函数值void mai

16、n() cout线性方程组求解的数值实验题:n; cout根据实验结果解释发生的原因n; double a99=0,b9=0,c99=0,d9=0,x9=0,y9=0; double sum=0;/定义初始值 int n,i,j,k; for(n=2;n10;n+) coutn阶方程组Ax=b的解为n; for(i=0;in;i+) for(j=0;jn;j+) aij=1.0/(i+j+1); bi=m(double)n+i,(double)n)-m(double)i,(double)n); d0=a00; for(i=0;in;i+) ci0=ai0/d0; for(i=1;in;i+)

17、for(k=0;ki;k+) sum+=cik*cik*dk; di=aii-sum; sum=0; for(j=i;jn;j+) for(k=0;kj;k+) sum+=cik*dk*cjk; cij=(aij-sum)/dj; sum=0; y0=b0; for(i=1;in;i+) for(k=0;k=0;i-) for(k=i+1;kn;k+) sum+=cki*xk; xi=yi/di-sum; sum=0; for(i=0;in;i+) coutxi+1=xin;/输出方程组的解 coutn; #include#includedouble f1(double x) return (

18、x*x*x*x*x);/返回原函数f1的值double f2(double x) return sin(x);/返回原函数f2的值double jf(double(*f)(double),double a,double b,int n) double y=0,h; int i; h=(b-a)/n;/步长 for(i=1;i=n;i+) double x=a+0.5*(2*i-1)*h; y+=0.5*h*(0.8888889*f(x)+0.5555556*f(x-0.5*h*0.7745967)+0.5555556*f(x+0.5*h*0.7745967);/三点Gauss公式 return y;void main(void) cout数值积分的实验题:endl; cout请输入一个n的值:n; coutf1的积分值:jf(f1,0,1,n)endl; coutf2的积分值:jf(f2,0,1,n)endl;

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

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