- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)