西安交大计算方法
.
西安交通大学计算方法上机实验
班级:(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 语言编写:用 second
classpublic
main(String[] args) void{ public static
s1=1 ,s2=1; double { double e=1,sum=1; //e的初值为1,sum用来存放n!int a=1;
while(sum sum=a*sum; e=1.0/sum+e; a++; } double b=1.0/(e*e*e*e*e); System.out.println(较为精确的值就支?尽+b); for(int i=1;i<=24;i++) { s1+=cimi1(i); s2+=cimi2(i); } s1=1.0/s1; System.out.println(?????尽+s1); System.out.println(卜???尽+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编程并运行,如下:(1)计算(-5) 运行结果如下: (2)计算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;i<25;i++) { int z=func1(i); double e=func2(i); y+=z/e; } cout<<----------------------------------------< cout< cout<<----------------------------------------< } int func1(int x){ int y=1; int k; for (k=0;k y*=5; return y;} double func2(int n){ double y=1; int j;