用 Maple 编程进行数值分析:相对误差
Programming with Maple for Numerical Analysis : Relative error
作为我课程的一部分,我正在使用 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));
在 之前将 working-precision 环境变量 Digits
设置为 20
。因此,您仅以默认的 Digits=10
工作精度计算了 f2
。但是从问题的措辞看来,您似乎也被要求以 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
我总是有可能误解了这个问题。想要的答案是什么?
作为我课程的一部分,我正在使用 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));
在 之前将 working-precision 环境变量 Digits
设置为 20
。因此,您仅以默认的 Digits=10
工作精度计算了 f2
。但是从问题的措辞看来,您似乎也被要求以 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
我总是有可能误解了这个问题。想要的答案是什么?