问题描述
我正在使用Maple进行一些数值分析,这是我课程的一部分,但我不确定我所使用的代码的错误在哪里。如果有人指出我的缺点,我将非常感谢似乎得到了错误的答案。
f(x)= sqrt((cosh(x))^ 2 +1)-sinh(x)。 使用6位数算法找到f(4.86)的近似值。 然后,使用20位算术计算相对误差。 最后,将其舍入到6位(有效数字)
f := sqrt(cosh(x)^2+1)-sinh(x);
f1 := evalf[6](f(4.86));
f1 := 0.0155
f2 := evalf(f(4.86));
f2 := 0.01550004
Digits := 20;
Digits := 20
Q4 := abs((f2-f1)/f2);
Q4 := 0.0000025806385015780604437
Digits := 6;
Digits := 6
evalf[6](Q4);
0.00000258064
谢谢大家
解决方法
您犯了一个语法转录错误和一个Maple编程错误。
您的第一行是
f := sqrt(cosh(x)^2+1)-sinh(x);
,但是您随后将其称为运算符(过程),例如。 f(4.86)
并获得一个数值。因此,您原来必须使用类似此过程的东西。
f := x -> sqrt(cosh(x)^2+1)-sinh(x);
因此,在此处发布时可能只是转录错误。
您在计算中犯了编程错误
f2 := evalf(f(4.86));
之前将工作精度环境变量Digits
设置为20
。因此,您仅以默认的f2
工作精度计算了Digits=10
。但是从问题的措辞看来,似乎还要求您以20位数的工作精度来计算f2
。
您的代码可能会进行如下修改:
restart;
f := x -> sqrt(cosh(x)^2+1)-sinh(x):
f1 := evalf[6](f(4.86));
f1 := 0.0155
Digits := 20:
f2 := evalf(f(4.86));
f2 := 0.015500036806894590
Q4 := abs((f2-f1)/f2);
Q4 := 0.0000023746327217512077767
evalf[6](Q4);
0.00000237463
您已经使用两种不同的机制来指定工作精度。您也可以按如下方式进行操作(在方法上稍微一致):
restart;
f := x -> sqrt(cosh(x)^2+1)-sinh(x):
f1 := evalf[6]( f(4.86) );
f1 := 0.0155
f2 := evalf[20](f(4.86));
f2 := 0.015500036806894590
rel := evalf[20]( abs((f2-f1)/f2) );
rel := 0.0000023746327217512077767
evalf[6]( rel );
0.00000237463
我总是有可能误解了这个问题。想要的答案是什么?