使用Maple进行数值分析的程序:相对误差

问题描述

我正在使用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

我总是有可能误解了这个问题。想要的答案是什么?