西安交大计算方法_第1页
西安交大计算方法_第2页
西安交大计算方法_第3页
西安交大计算方法_第4页
西安交大计算方法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..XX交通大学计算方法上机实验__<xxx>__<xxx>__21116010041.按两种顺序计算y,哪个接近真值?Y=1000+++…+用java语言编写:publicclassAdd{publicstaticvoidmain<String[]args> {doubles=0,y=1000;for<doublea=1001.0;a<=2000.0;a++> { y+=1.0/a; }for<doublea=2000.0;a>=1001.0;a--> { s+=1.0/a; }s=s+1000; System.out.println<"正序和"+s>; System.out.println<"逆序和"+y>; }}运行结果:结论:显然假设是double类型的数据时,先算大数的过程吃掉了末尾的小数被进位所埋没,导致了大数吃小数的误差,按从小到大〔从右向左的计算顺序所得的结果与真值相近,而按从大到小〔从左到右的计算顺序所得的结果与真值的误差较大。1-18.设<x>=1+x+++…+,计算<-5>和1/<5>,哪个接近?解法一:

用JAVA语言编写:publicclasssecond{publicstaticvoidmain<String[]args> {doubles1=1,s2=1;doublee=1,sum=1;//e的初值为1,sum用来存放n!inta=1;while<sum<Math.pow<10,1000000>>{ sum=a*sum; e=1.0/sum+e; a++; }doubleb=1.0/<e*e*e*e*e>; System.out.println<"较为精确的值1/e^5="+b>;for<inti=1;i<=24;i++> { s1+=cimi1<i>; s2+=cimi2<i>; } s1=1.0/s1;System.out.println<"1/S24<5>="+s1>;System.out.println<"S24<-5>="+s2>; }publicstaticdoublecimi1<intai> {doublexi=1;for<inti=ai;i>=1;i--> { xi=xi*<5.0/i>; }returnxi;}publicstaticdoublecimi2<intai> {doublexi=1;for<inti=ai;i>=1;i--> { xi=xi*<-5.0/i>; }returnxi;}}运行结果:解法二:用matlab编程并运行,如下:计算<-5>运行结果如下:计算1/<5>运行结果如下:而的真是结果为0.006737946比较得1/<5>的计算结果与真实值更接近解法三:也可以用C++编写:#include"stdafx.h"#include"stdio.h"#include"iostream"usingnamespacestd;intmain<intargc,char*argv[]>{intfunc1<int>;doublefunc2<int>; doubley=0; inti; for<i=1;i<25;i++> {intz=func1<i>; doublee=func2<i>; y+=z/e; } cout<<"----------------------------------------"<<endl;cout<<"1/S<5>的运算结果是:"<<""<<1.0/<y+1><<endl; cout<<"----------------------------------------"<<endl; return0;}intfunc1<intx>{inty=1;intk;for<k=0;k<x;k++>y*=5;returny;}doublefunc2<intn>{doubley=1;intj;for<j=1;j<=n;j++>y*=j;returny;}运行结果如下图:结论:通过比较上述的几种编程结果,可以看出1/S<5>,更接近真实值,而且用matlab更为简便,可以直接利用函数库,并可以轻松的嵌入秦九韶算法,大大减少运算量和时间。已知方程组++=++=++=的真解===1,且令a=,b=,c=,d=时利用克莱姆法则可将真解表示为G=0.45a--0.1125=[<0.2a–0.0625>b+<0.25a–0.1>c+<0.125->d]/G=-[<0.1–0.25a>b+<-0.2>c+<0.25–0.5a>d]/G=[<0.125->b+<0.5a–0.25>c+<a–0.25>d]/G试将a,b,c,d依次取2~6位近似有效数,分别计算,,。解:用matlab编程如下:将a,b,c,d依次取2~6位近似有效数取2位有效近似有效数取3位有效近似有效数取4位有效近似有效数取5位有效近似有效数取6位有效近似有效数结论:随着所选取的近似有效位越多,计算的结果越接近真解将选主元和不选主元高斯消去法编程程序。解方程组:+=7++=15+6+=15+6+=15…………+6+=156+=14并且比较将结果与真实值比较。publicclassdaI{/** *paramargs */publicstaticvoidmain<String[]args>{//TODOAuto-generatedmethodstubdouble[][]a;double[]x;double[]L;doublec=0.0,sum=0.0; a=newdouble[85][86]; x=newdouble[85]; L=newdouble[86];for<inti=1;i<85;i++>{for<intj=1;j<86;j++>{ a[i][j]=0; } } a[1][1]=6; a[1][2]=1; a[84][83]=8; a[84][84]=6; a[1][85]=7; a[84][85]=14;for<inti=2;i<84;i++>{ a[i][i]=6; a[i][i+1]=1; a[i][i-1]=8; a[i][85]=15; }for<intk=1;k<84;k++>{for<inti=k+1;i<85;i++>{ c=a[i][k]/a[k][k];for<intj=k+1;j<86;j++>{ a[i][j]=a[i][j]-c*a[k][j]; } } } x[84]=a[84][85]/a[84][84];for<intk=83;k>0;k-->{for<intj=k+1;j<85;j++>{ sum=sum+a[k][j]*x[j]; } x[k]=<a[k][85]-sum>/a[k][k];sum=0.0; }for<inti=1;i<85;i++>{ System.out.println<"x["+i+"]="+x[i]>; } } }运行如下:解:将不选主元法用matlab编程如下:将选主元法用matlab编程如下:输入系数阵A和常数项b,计算得方程组的结果为x=[1,1,1,1,1,1,1,1,1......]。用methematican语言实现选主元过程及其结果如下:结论:通过选主元与不选主元计算出的结果与真实结果比较,得出:用选主元得到的结果与真实值相近,原因是用选主元的方法可以避免在计算时出现小除数的现象,从而避免了病态问题的出现。所以用选主元法比不选主元法计算出的结果准确。已知函数f<x>=1/<1+>,x1,节点=-1+0.2i<i=010>。计算f<x>和拉格朗日插值多项式<x>的值,=-1+0.05k<k=040>.求三次自然插值样条函数S〔x的M表示中〔i=0,计算S<x>,x=-1+0.05k,k=040.画出y=f<x>,y=<x>,y=S<x>的图形。解:〔1用mathematica语言进行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论