西安交大计算方法.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
西安交大计算方法

西安交通大学 计算方法上机实验 班级:(xxx) 姓名:(xxx) 学号:2111601004 1.按两种顺序计算y,哪个接近真值? Y = 1000 + + + … + 用java 语言编写: public class Add { public static void main(String[] args) { double s=0,y=1000; for(double a=1001.0;a=2000.0;a++) { y+=1.0/a; } for(double a=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 语言编写: public class second { public static void main(String[] args) {double s1=1 ,s2=1; double e=1,sum=1; //e的初值为1,sum用来存放n! int a=1; while(sumMath.pow(10, 1000000)){ sum=a*sum; e=1.0/sum+e; a++; } double b=1.0/(e*e*e*e*e); System.out.println(较为精确的值1/e^5=+b); for(int i=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); } public static double cimi1(int ai) {double xi=1; for(int i=ai;i=1;i--) { xi=xi*(5.0/i); } return xi; } public static double cimi2(int ai) {double xi=1; for(int i=ai;i=1;i--) { xi=xi*(-5.0/i); } return xi; } } 运行结果: 解法二: 用matlab编程并运行,如下: 计算(-5) 运行结果如下: 计算1/(5) 运行结果如下: 而的真是结果为0.006737946 比较得1/(5)的计算结果与真实值更接近 解法三: 也可以用C++编写: #include stdafx.h #includestdio.h #include iostream using namespace std; int main(int argc, char* argv[]) { int func1(int ); double func2(int); double y=0; int i; for(i=1;i25;i++) { int z=func1(i); double e=func2(i); y+=z/e; } cout----------------------------------------endl; cout1/S(5)的运算结果是: 1.0/(y+1)endl; cout----------------------------------------endl; return 0; } int func1(int x){ int y=1; int k; for (k=0;kx;k++) y*=5; return y;} double func2(int n){ double y=1;

文档评论(0)

yaobanwd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档