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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

计算方法与实习报告.docx

1、计算方法与实习报告实习题 11.用2种不同的顺序计算,分析其误差的变化。思路:采用迭代法用C+来编程实现,一种用正序即n从1到10000取值,另一种用逆序(一) 正序:采用递增的算法,将n从1到10000进行的累加求和。1)程序代码为:#include #includeusing namespace std;void main()float sum=0;int n=1;while(n=10000)sum=sum+(float)1/(n*n);n+;cout The sum that from min to max is:sum;(2)运行输出的结果为:The sum that from max

2、 to min is:=1.64473(二) 逆序:采用递减的算法,将n从10000到1进行的累加求和。(1)程序代码为:#include #includeusing namespace std;void main()float sum=0;int n=10000;while(n0)sum=sum+(double)1/(n*n);n-;coutThe sum that from max to min is:sum;(2)运行输出的结果为:The sum that from min to max is :1.64483结果分析:由运行的结果可以看出正序的结果为1.64473,逆序的结果为1.64

3、483,而题目所给出的精确值为1.644834。可以发现从小到大求和比从大到小求和更接近实际值,因为在从大到小的求解过程中,会出现大数“吃掉”小数的现象,从而造成较大误差。实习题21:用牛顿法求下列方程的根:思路: 给定初始值x0,为根的容许误差,为| f(x) |的容许误差,N为迭代次数的容许值。在满足根的容许误差,函数值的容许误差及迭代次数条件下,计算x1= x0f(x0)/f(x0)。以此进行下次循环。(1)程序代码为:#include #include using namespace std;#define N 100#define eps 1e-6#define eta 1e-8fl

4、oat Newton(float(*f)(float),float(*f1)(float),float x0) float x1,d; int k=0; do x1=x0-(*f)(x0)/(*f1)(x0); if(k+N|fabs(*f1)(x1)eps) printf(n Newton迭代发散); break; d=fabs(x1)eps&fabs(*f)(x1)eta); return x1;float f(float x) return float(x*x-exp(x);float f1(float x) return float(2*x-exp(x);void main()int

5、i=0;float x=0;for(i=0;i100;i+)x=x-A(x)/B(x);coutx=xendl;i+;(2)运行过程:x=-1x=-0.733044x=-0.703808x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.703467x=-0.7034

6、67x=-0.703467x=-0.703467x=-0.703467(3)运行结果为:x=-0.703467结果分析:得出的结果为x=-0.703467,由运行过程可知在此值时结果已经稳定,且经检验结果精确到了小数点后第六位。实习题 31:用列主元高斯消去法解方程组: (1) x1 + x2 + 3x4=42x1 + x2 x3 + x4=13x1 x2 x3 +3x4=3x1 +2x2+3x3x4=4 思路:将方程用增广矩阵 A|b=(aij)n(n+1)表示,分别进行消元和回代过程消元过程:对k=1,2,.,n-1(1)选主元(2)如果=0,则矩阵A奇异,程序结束;否则执行(3)(3)如

7、果,则交换第k行与第行对应元素位置(4)消元, 对i=k+1,.,n计算,对j=k+1,.,n+1计算回代过程(1)若,则矩阵A奇异,程序结束;否则执行(2)(2);对i=n-1,.2,1计算(1)程序代码为:#include#include#includeusing namespace std;void main() int i; float x4; float c45=1,1,0,3,4, 2,1,-1,1,1, 3,-1,-1,3,-3, -1,2,3,-1,4; void Direct(float*,int,float); Direct(c0,4,x); for(i=0;i=3;i+)

8、printf(x%d=%fn,i,xi);void Direct(float *c,int n,float x) int i,j,k,t; float p; for(i=0;i=n-2;i+) k=i; for(j=i+1;j(fabs(*(c+k*(n+1)+i)k=j; if(k!=i) for(j=i;j=n;j+) p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; for(j=i+1;j=n-1;j+) p=(*(c+j*(n+1)+i)/(*(c+i*(n+1)+i); for(t=i;t=0;i-)

9、 for(j=n-1;j=i+1;j-) (*(c+i*(n+1)+n)-=xj*(*(c+i*(n+1)+j); xi=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i); (2)运行结果为:x0=-1.333333x1=2.333333x2=-0.333333x3=1.0000004:编写用追赶法解三对角线性方程组的程序,并解下列方程组。(2)Ax=b 其中思路:应用高斯消去法求解时,消元过程可以简化,得到同解的三角方程组,进行回代消去过程为: 回代过程为 (1)程序代码为:#includevoid main() float x10; int i; float a1011=-4,

10、 1,0,0,0,0,0,0,0,0,-27, 1,-4,1,0,0,0,0,0,0,0,-15, 0,1,-4,1,0,0,0,0,0,0,-15, 0,0,1,-4,1,0,0,0,0,0,-15, 0,0,0,1,-4,1,0,0,0,0,-15, 0,0,0,0,1,-4,1,0,0,0,-15, 0,0,0,0,0,1,-4,1,0,0,-15, 0,0,0,0,0,0,1,-4,1,0,-15, 0,0,0,0,0,0,0,1,-4,1,-15, 0,0,0,0,0,0,0,0,1,-4,-15; void Direct(float*,int,float); Direct(a0,1

11、0,x); for(i=0;i=9;i+)printf(x%d=%fn,i,xi);void Direct(float*u,int n,float x) int i,r,k; for(r=0;r=n-1;r+) for(i=r;i=n;i+) for(k=0;k=r-1;k+) *(u+r*(n+1)+i)-=*(u+r*(n+1)+k)*(*(u+k*(n+1)+i); for(i=r+1;i=n-1;i+) for(k=0;k=0;i-) for(r=n-1;r=i+1;r-) *(u+i*(n+1)+n)-=*(u+i*(n+1)+r)*xr; xi=*(u+i*(n+1)+n)/(*(

12、u+i*(n+1)+i); (2)运行结果为:x0=8.705758x1=7.823033x2=7.586371x3=7.522452x4=7.503439x5=7.491305x6=7.461785x7=7.355835x8=6.961556x9=5.490389实习题42:按下列数据:xi 0.30 0.42 0.50 0.58 0.66 0.72yi 1.04403 1.08462 1.11803 1.15603 1.19817 1.23223作五次插值,并求x1=0.46,x2=0.55,x3=0.60时的函数近似值。思路:(1)输入令 (2)对i=0,1,2,.,n计算 (1)程序代

13、码为:#include#includeusing namespace std;#define N 5void Difference(float x,float y,int n) float *f=new floatn+1; int k,i; for(k=1;k=n;k+) f0=yk; for(i=0;i=0;i-) b=b*(varx-xi)+yi; printf(Nn(%f)=%f,varx,b);在main函数中:分别另varx为0.46,0.55,0.60可得:(2)运行结果为: =0.46时,=1.100724; =0.55时,=1.141271; =0.60时,=1.166194;

14、实习题51:试分别用抛物线和指数曲线拟合下列数据:xi 1 1.5 2 2.5 3 3.5 4 4.5yi 33.4 79.50 122.65 159.05 189.15 214.15 238.65 252.50xi 5 5.5 6 6.5 7 7.5 8yi 267.55 280.50 296.65 301.40 310.40 318.15 325.15比较2个拟合函数的优劣。(1)用抛物线拟合:a.程序代码为:matlab代码为: A=1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8;B=33.4 79.5 122.65 159.05 189.15 2

15、14.15 238.65 252.5 267.55 280.5 296.65 301.4 310.4 318.15 325.15;S=zeros(1,5);T=zeros(3,1); for k=1:5S(k)=sum(A.(k-1);end for k=1:3T(k)=sum(A.(k-1).*B);end C=zeros(3,3); a=zeros(3,1); for i=1:3for j=1:3C(i,j)=S(i+j-1);endend a=CT; for k=1:3disp(a(k);endb.运行结果为:a0= -45.3333a1= 94.2302a2= -6.1316c.拟合曲

16、线:(2)用 指数曲线拟合将等式两边取自然对数得:lny=lna+bx记 y=lny a=lna y=a+bx得到新数据:x 1 1.5 2 2.5 3 3.5 4 4.5 5 5.5 6 6.5 7 7.5 8y 3.51 4.38 4.81 5.07 5.24 5.37 5.47 5.53 5.59 5.64 5.69 5.71 5.74 5.76 5.78a.程序代码为:#include#include#includevoid main() void ColPivot(float*,int,float); int i; float x2; float c23=15,67.5,79.29,

17、 67.5,373.5,373.5; ColPivot(c0,2,x); for(i=0;i=1;i+)printf(x%d=%fn,i,xi);void ColPivot(float *c,int n,float x) int i,j,k,t; float p; for(i=0;i=n-2;i+) k=i; for(j=i+1;j(fabs(*(c+k*(n+1)+i)k=j; if(k!=i) for(j=i;j=n;j+) p=*(c+i*(n+1)+j); *(c+i*(n+1)+j)=*(c+k*(n+1)+j); *(c+k*(n+1)+j)=p; for(j=i+1;j=n-1;

18、j+) p=(*(c+j*(n+1)+i)/(*(c+i*(n+1)+i); for(t=i;t=0;i-) for(j=n-1;j=i+1;j-) (*(c+i*(n+1)+n)-=xj*(*(c+i*(n+1)+j); xi=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i); b.运行结果为:x0=4.208903x1=0.239355c.拟合曲线为:分析:带入数据进行检验,我们可以发现抛物线与指数曲线拟合相比,抛物线更加精确,而指数曲线具有较大的误差,因为在指数曲线拟合时,将指数函数按照一次函数来进行处理的,而拟合时,拟合函数的复杂度越高越准确,所以抛物线的拟合方法更准确。实

19、习题6用复化梯形公式和复化Simpson公式计算积分和观察n为多少时所得近似值具有6位有效数字。(1)用复化梯形公式计算积分a.程序代码为#include#includeint n;float AutoTrap(float(*f)(float),float a,float b) int i; float x,s,h=b-a; float t1,t2=h/2*(*f)(a)+(*f)(b); n=1; do s=0; t1=t2; for(i=0;i0.5e-6); return t2;float f(float x) return sqrt(1+cos(x)*cos(x);void main(

20、) float s; double pi=3.141592653; s=AutoTrap(f,0,pi/2); printf(T(%d)=%fn,n,s);b.运行结果为:T8=1.910099结果分析:运行结果表示n为8时所得近似值具有6位有效数字。(2)复化Simpson公式计算积分a.程序代码为#include#includefloat Simpson(float(*f)(float),float a,float b,int n) int k; float s,s1,s2=0; float h=(b-a)/n; s1=(*f)(a+h/2); for(k=1;k=n-1;k+) s1+=

21、(*f)(a+k*h+h/2); for(k=1;k=n-1;k+) s1+=(*f)(a+k*h+h/2); s2+=(*f)(a+k*h); s=h/6*(*f)(a)+4*s1+2*s2+(*f)(b); return s; float f(float x) if (x=0) return 1; else return sin(x)/x; void main() double pi=3.141592653; int i,n=2; float s; for(i=0;i=2;i+) s=Simpson(f,0,pi/4,n); printf(s(%d)=%fn,n,s); n*=2; b.运行结果为:s(2)=1.005897s(4)=0.887991s(8)=0.824189计算方法上机实验心得通过用计算方法这门课的上机实验学习我对于c+和matlab程序的拥有一定掌握,并能完成一些在课本上的题目,如牛顿迭代法,列主元高斯消去法,雅可比迭代法,高斯赛德尔迭代法,插值法,复化梯形公式,复化Simpson公式等等。在求解题目的过程中发现自己的编程能力逐步得到了提高,并且能够发现并解决一些简单的程序问题,同时加深了我们对课本上的知识的理解和认识,可以说是使得我们能够学以致用,加强了理论与实际的联系,我们从中获益良多。

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

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