Программирование с помощью Maple для численного анализа: относительная ошибка

#maple #numerical-analysis

#maple #численный анализ

Вопрос:

Я работаю над некоторым численным анализом с помощью Maple в рамках своего курса, и я не уверен, где моя ошибка в коде, который я использую.. Если кто-нибудь может указать на мой недостаток, это было бы очень ценно, поскольку я, похоже, неправильно понимаю ответ.

f(x) = sqrt((cosh (x)) ^ 2 1) — sinh(x). Найдите хорошее приближение к f(4.86), используя 6-значную арифметику. Затем используйте 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

  

Спасибо всем

Ответ №1:

Вы допустили одну ошибку в синтаксической транскрипции и одну ошибку в программировании 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 рабочую точность по умолчанию. Но из формулировки вопроса кажется, что вас просят вычислить f2 также с 20 цифрами рабочей точности.

Ваш код может быть изменен следующим образом:

 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
  

Всегда есть вероятность, что я неправильно понял вопрос. Каков желаемый ответ?

Комментарии:

1. Был 0.00000237463 ли ожидаемый ответ?

2. Да, Acer. Спасибо за вашу помощь в этом. действительно ценю это!