Pers.narod.ru. Обучение. Ошибки суммирования в MathCAD |
Символьная (да и аналитическая) математика, "зашитая" в MathCAD, не только не сделает Вас умнее, а Ваши волосы пушистее, но и способна прямо ввести в заблуждение - следует помнить, что ошибки в MathCAD "всплывают" даже при работе с целыми числами. Рассмотрим в этой заметке только оператор суммирования, имеющийся во всех версиях MathCAD и во всех них работающий криво.
Вот несложная программа, содержащая тройной цикл, в котором одна из границ переменна, программа написана на консольном С++:
#include <stdio.h> int main () { const int n=100; int i,j,k; long int s=0; for (i=1;i<=n;i++) for (j=1;j<=n-i;j++) for (k=1;k<=n;k++) s+=k; printf ("\n%ld",s); return 0; }
Эта программа выдаёт ответ = 24997500
На скриншоте, показанном ниже, тот же расчёт выполнен в MathCAD 15. Видно, что при "лобовом" расчёте ответ совершенно иной. Не сработают и встроенные средства оптимизации.
Правильно посчитать можно только символьно, выделив набранное выражение и вызвав меню Символика - Вычислить - Аналитически. Получится выражение относительно n
, которое можно скопировать и оценить численно обычным "=".
Не надо только думать, что символьные вычисления - панацея, второй пример будет ещё смешнее. Хорошо известная сумма натуральных чисел от 1 до 100 включительно, равная 5050, может быть вычислена аж вот как (S2
справа внизу):
Вывод - верхняя граница суммы, меньшая нижней, не есть хорошо.
Скачать этот файл в формате .xmcd (36 Кб)
гостевая; E-mail |