[personal profile] waspagv
Вот кусок из библиотеки программ NOVAS, используемой в USNO для вычисления высокоточных эфемерид небесных тел.

*     PERFORM LAGRANGIAN INTERPOLATION FOR POSITION AND VELOCITY AT
*     EPOCH TJD
 60 TI = TJD - XJD(LMIDDL) + LMIDDL
    DO 63 J = 1, 3
        POS(J) = 0.D0
        VEL(J) = 0.D0
        DO 62 L = 1, INTPTS
            AK = ASTART + DFLOAT(L)
            P = 1.D0
            DO 61 I = 1, INTPTS
                IF ( I .EQ. L ) GO TO 61
                AI = ASTART + DFLOAT(I)
                P = P * (TI-AI) / (AK-AI)
 61         CONTINUE
        POS(J) = POS(J) + P * BPOS(LSTART+L,J)
        VEL(J) = VEL(J) + P * BVEL(LSTART+L,J)
 62     CONTINUE
 63 CONTINUE
 GO TO 99

Кусок интерполирует барицентрические координаты и скорости планеты, записанные в файле. Обратите внимание: интерполяция выполняется по формуле Лагранжа. Не только заголовок, но и сам текст об этом говорит.

Программу писал студент 1-го курса? Или сотрудники USNO в принципе не слышали про численные метода, поэтому и взяли первый, на который наткнулись в справочнике?

На самом деле, это частный пример, который показывает общую ситуацию. Не скрою, курс методов вычислений в СПбГУ был моим любимым. Любимым, потому что все его содержание, и даже больше, я знал задолго до 4-го курса, когда он читался. И уже тогда мне не нравился подход учебников к изложению предмета. Применительно к решением дифференциальных уравнений и методам Рунге-Кутты я об этом уже когда-то писал. А сейчас, сочиняя бибилиотеку программ для решения уравнений интегральных, скажу применительно к решению систем линейных алгебраических уравнений.

Что описывают учебники? Правильно, метод Гаусса. Некоторые еще рассказывают про схему Жордана1. Иван Петрович Мысовских в лекциях, конспект которых у меня сохранился, добавил сюда метод ортогонализации строк. Но дело даже не в том, что описывают мало методов. Дело в том, как и для чего их описывают. Вот, допустим, есть три метода. Чем один лучше другого? Молчок! Если один явно лучший, зачем тратить время на другие? Загадка! Максимум, посчитают количество операций для реализации метода. Все!

Но, дорогие мои, при вычислении на компьютере не менее важным, чем количество операций, вопросом является погрешность. Мало найти остаточный член, например, квадратурной формулы. Нужно уметь оценить реальную погрешность реального вычислительного процесса, который выполняется (неожиданно, да?) с конечным числом разрядов. Решать методом Гаусса систему 10000x10000 может быть и не так долго на современных ЭВМ, но совершенно бесполезно из-за нарастающей погрешности округления. Кто и в каком учебнике показал это? Кто предложил лучший метод?

На самом деле, эти вопросы исследованы и решены. И замечательная книга Дж. Уилкинсона "Алгебраическая проблема собственных значения" даже переведена на русский язык. Я считаю эту книгу эталоном того, как следует писать книги по численным методам. Все погрешности выявлены, проанализированы, и даны советы по их минимизации для разных типов машинных арифметик. Если вы хотите знать, как решить систему уравнений или найти собственные значения матрицы - вы узнаете это их книги Уилкинсона. Более того, автор не ограничился математическим анализом задачи. Совместно с Райншем он издал сборник конретных программ для ЭВМ, тоже переведенный, хотя и безобразно, на русский язык. Программы из этого сборника широко разошлись по миру и включены во многие известные пакеты прикладных программ, например SSP, IMSL, NAG.

Плохо одно. Книга Уилкинсона - не учебник. Хороший студент прочтет ее (если узнает) со вниманием и будет использовать вс работе. Такой студент никогда не станет писать программу интерполяции по формуле Лагранжа. Но много ли их, хороших студентов? Средний выпускник, оказавшись потом в среднем НИИ, вспомнит, когда придется решать реальную задачу, про метод Гаусса и найдет в справочнике простую программку на Бейсике, которую и использует для решения. А то, что решение оказалось неправильным, хотя в программе ошибок нет, выяснится, когда очередной "Протон" под строгим взглядом Путина пробурит очередную скважину на пути исследования мирового поземелья.



1 Схему эту придумал Вильгельм Йордан, немецкое написание фамилии которого - Jordan - неправильно транслитерировано как Жордан. Некоторые, впрочем, думают, что он итальянец, и пишут: "Метод Жордано".
Date: 11 January 2015 13:20 (UTC)

From: [identity profile] pphantom.livejournal.com
По идее, к учебникам/лекциям должен прилагаться практикум с аккуратно подобранными не только заданиями, но и тестовыми примерами, где студент попробует тот или иной метод и наглядно убедится, какой из них для чего пригоден.
Date: 11 January 2015 14:09 (UTC)

From: [identity profile] waspagv.livejournal.com
Именно! Причем, обязательно должны быть примеры, когда решение разваливается, чтобы не было ложной уверенности, будто достаточно взять правильную программу, чтобы получилось правильное решение.

На моих глазах один аспирант - выпускник Казанского университета - искал собственные значения матрицы 18-го порядка построением характеристического многочлена и отысканием его корней. То, что полученные таким путем числа скорее всего не имеют отношения к действительности, просто не пришло ему в голову.
Date: 11 January 2015 15:32 (UTC)

Date: 11 January 2015 17:35 (UTC)

From: [identity profile] roman-rogalyov.livejournal.com
// искал собственные значения матрицы 18-го порядка построением характеристического многочлена и отысканием его корней. То, что полученные таким путем числа скорее всего не имеют отношения к действительности//

Почему же не имеют? Поставить, скажем, "precision 300;" - и вперёд! Меняя этот параметр, программист может легко определить требуемую точность, не имея никакого представления о сколь-либо "продвинутых" численных методах. Наверное, здесь вполне хватит 30-40 знаков после запятой, если случай не совсем патологический (скажем, среди матричных элементов нет частичных сумм рядов Фурье и т.п.).
Date: 11 January 2015 17:56 (UTC)

From: [identity profile] waspagv.livejournal.com
Даже не имея представления о ведре, можно носить воду решетом: какое-то количество жидкости за счет смачивания останется на стенках решета. Так что, сбегав достаточное количество раз, можно перенести любой объем воды. Но почему-то так поступают редко, предпочитая более продвинутое ведро.
Date: 11 January 2015 18:24 (UTC)

From: [identity profile] pphantom.livejournal.com
Ввиду роста числа людей, пытающихся заниматься вычислительным программированием на Python, последний тезис, увы, очевидным уже не кажется.
Date: 12 January 2015 10:17 (UTC)

From: [identity profile] absurdated.livejournal.com
Бахвалов-Жидков-Кобельков вроде делает ряд ремарок о точности и эффектах машинной арифметики, хотя и ограниченно.
Date: 12 January 2015 17:32 (UTC)

From: [identity profile] waspagv.livejournal.com
Пролистал эту книгу, 8-е издание 2000 г. Точные методы решения СЛАУ описаны на с. 253-265. Про погрешность сказано следующее:

1) "Чтобы избежать катастрофического влияния вычислительной погрешности, применяют метод Гаусса с выбором главного элемента" (С. 257). До этого - ни слова о том, что погрешность может быть катастрофической.

2) Простой прием для оценки погрешности решения на с. 258. Характеристика полезности этой оценки от авторов: "...отличается не в очень большое число раз".

3) На с. 262 упоминается, что в ходе вычислений мера обусловленности матрицы не должна меняться сильно.

Все!

Основной упор сделан на подсчет числа операций. О том, что при плохой обусловленности матрицы (и том что такое обусловленность) любой из изложенных методов даст абсурдный результат - ни слова.

А между прочит, БЖК - основной вузовский учебник по численным методам.

Профиль

waspagv: (Default)
DCS Foyle

March 2025

M T W T F S S
     12
3456789
10111213141516
17181920212223
242526272829 30
31      

Style Credit

Expand Cut Tags

No cut tags
Page generated 04/07/2025 07:51
Powered by Dreamwidth Studios