§ 12. Опасные ошибки, обнаруженные в популярных пакетах прикладных программ (MATLAB, Mathcad и других). Методы предотвращения ошибок
§ 12. Опасные ошибки, обнаруженные в популярных пакетах прикладных программ (MATLAB, Mathcad и других). Методы предотвращения ошибок
В последние годы для различных расчетов все шире используются популярные пакеты прикладных программ — пакеты MATLAB, Mathcad и многие другие. В ходе исследования, проведенного в СПбГУ, в этих пакетах были обнаружены ошибки. Эти ошибки можно исправить, и их очень нужно исправить, поскольку на основе этих пакетов производятся миллионы расчетов, в том числе и очень ответственных расчетов, поэтому цена ошибки может быть велика, ценой может стать техногенная катастрофа. Рассмотрим эти ошибки.
1. При численном решении систем дифференциальных уравнений первым этапом решения во всех этих пакетах является приведение исходной системы к системе n уравнений первого порядка путем эквивалентных преобразований. На втором этапе отыскивается решение преобразованной системы. Данный подход имеет под собой серьезные основания — он позволяет самые разнообразные системы уравнений решать одной программой. Если же первый этап пропустить, то пришлось бы создавать множество программ — потребовались бы, например, отдельные программы для системы, состоящей из одного уравнения третьего порядка и одного — первого порядка и для системы, состоящей из двух уравнений второго порядка и вообще потребовалось бы множество программ. Порядок, принятый в популярных пакетах, гораздо удобнее — но он приводит к ошибкам при встрече с «особыми» системами, например — с системой (21) при т = 1.
Пакет MATLAB приведет эту систему к системе уравнений первого порядка, выдаст ее решение и не заметит, что это решение не имеет смысла, поскольку даже сколь угодно малое, а значит — неизбежное на практике отклонение параметра т от расчетного значения т = 1 приведет к коренному расхождению между результатами расчета и реальным поведением объекта, и это может стать причиной аварии и даже катастрофы.
Для того чтобы не получилось подобных ошибок с возможными трагическими последствиями, нужно популярные пакеты прикладных программ дополнить совсем небольшими вспомогательными программами, которые выделят и отсеют «особые» системы уравнений и выделят соответствующие этим системам опасные объекты. Эти опасные объекты следует перепроектировать, изменить их структуру или параметры — изменить так, чтобы математическая модель проектируемого и рассчитываемого объекта перестала быть «особой». Тогда и аварий не будет. Все эти вопросы — и ошибки в пакетах, и методы предотвращения ошибок в расчетах — более подробно рассмотрены в книге [7].
2. Многочисленные расчетные алгоритмы, использующие цепочки эквивалентных преобразований, реализуемые в популярных прикладных программах, могут привести к ошибкам, если хотя бы одно из использованных преобразований изменит чувствительность решений к малым погрешностям округления. Более подробно о возникающих ошибках и несложных методах их предотвращения рассказано в работах [7], [8].
Не меньшее значение имеет и задача вычисления собственных значений (или собственных чисел) различных матриц. К необходимости решать эту математическую задачу приводят многие важные практические проблемы — такие, как вычисление частот собственных колебаний различных технических объектов, проверка условий возможного опасного резонанса между внешними воздействиями и собственными колебаниями, проверка устойчивости и многие другие проблемы. Возникают эти проблемы и в строительной механике, и при проверке прочности и устойчивости различных деталей и устройств, и в автоматическом управлении.
Поэтому во всех пакетах прикладных программ имеются широко и часто используемые программы вычисления собственных значений (собственных чисел). Однако при встрече с «особыми» системами уравнений (которые являются математическими моделями «особых» объектов), эти программы ведут пользователя к ошибочным заключениям: для «особых» объектов вычисление собственных значений смысла не имеет, поскольку они могут коренным образом измениться при малых, неизбежных на практике, неточностях в исходных данных. Поэтому любое проектное решение, принятое на основе вычисленных для «особых» объектов их собственных значений, может стать причиной последующих аварий и катастроф.
Поэтому пакеты прикладных программ обязательно должны быть дополнены небольшими дополнительными программами, которые выделяли бы «особые» системы уравнений, «особые» объекты, и предупреждали бы об этом пользователей компьютера. Эта дополнительная программа может, например, высветить на мониторе компьютера предостерегающую надпись: «Вы ведете расчет «особого» объекта, поведение которого может сильно меняться при малых неточностях в исходных данных. Советуем изменить параметры или структуру объекта и повторить расчет».
Виды «особых» матриц, для которых собственные значения очень чувствительны к малым неточностям исходных данных, и методы выделения «особых» матриц и «особых» объектов описаны в книгах [2, 3, 7].
3. В пакетах прокладных программ широко используются разнообразные алгоритмы, § 12. Опасные ошибки, обнаруженные в популярных пакетах прикладных программ, используют цепочки эквивалентных преобразований математической модели рассчитываемого объекта. При этом не уделяется должного внимания тому, что если хотя бы одно из использованных преобразований изменит чувствительность решений к малым неточностям исходных данных, или к погрешностям округления, то все решение окажется ошибочным. Примеры и методы предотвращения подобных ошибок исследовались Б. Г. Чертковым и рассмотрены в публикациях [7, 8].
4. Пакеты прикладных программ обязательно включают в себя программы вычисления решений систем линейных алгебраических уравнений различных порядков, поскольку к необходимости решать такие системы приводят очень многие практические задачи.
Простейшие системы уравнений — такие, например, как система
1,02х + у = 1,04 (22)
Х + У = 1 (23)
легко решаются вручную, но в практических задачах часто приходится иметь дело с системами, состоящими из двадцати, сорока и более уравнений, и здесь уже без компьютера и хорошей программы не обойтись. Применяемые программы решения систем уравнений, входящие в пакеты, используют, как правило, преобразования уравнений. Поскольку эти преобразования, разумеется, эквивалентны, то они позволяют вычислить правильные, истинные значения решений. Но многие важные свойства решений и в том числе — чувствительность решений к неизбежной ограниченной точности исходных данных — использованные эквивалентные преобразования могут изменить. Все это удобно показать на простом примере системы уравнений (22)—(23), решениями которой являются числа х = 2, у = -1 (что легко проверить подстановкой х = 2, у = — 1 в уравнения (22)—(23)).
Систему (22)—(23) — как и любые другие — удобно решать путем эквивалентных преобразований. Достаточно вычесть из уравнения (22) уравнение (23). Получим уравнение
0,02х = 0,04 (24)
не содержащее уже переменной у, которое вместе с уравнением (23) образует систему
Х + У = 1 (25)
0,02х = 0,04 (26)
Система (25)—(26) эквивалентна исходной системе (22)—(23), но решается гораздо проще: из (26) сразу следует х = 2, а подставив х = 2 в (25), получим у — — 1. Отметим, что тем же путем последовательного исключения переменных путем эквивалентных преобразований решают (следуя методу Гаусса) и системы, состоящие из большого числа уравнений. Просто число необходимых преобразований и вычислений очень быстро растет с ростом числа уравнений в системе, и поэтому для решения больших систем, часто встречающихся при проектировании, требуются компьютеры.
А теперь рассмотрим самое важное: решения х = 2, у = — 1 системы (22)—(23) верны, но на самом деле для практического использования не пригодны. Действительно, достаточно всего одному из коэффициентов системы (например, коэффициенту 1,02 при х) измениться менее, чем на 1%, от значения 1,02 перейти к значению 1,01, и изменившаяся система, принявшая теперь вид
1,01х + у = 1,041 (27)
х + у = 1
имеет решения х = 4, у = -3. Таким образом, изменение всего одного коэффициента менее, чем на одну сотую приводит к изменению решений вдвое и втрое. Поскольку в практических задачах исходные данные известны часто с точностью меньшей, чем одна сотая, то решения системы (22)—(23) для практики не пригодны. Их некритическое использование может привести к авариям и катастрофам.
Но ничего этого нельзя заметить при исследовании системы (25)—(26), которая эквивалентна исходной системе (22)—(23) и получена из нее путем эквивалентных преобразований. Система (25)—(26) мало чувствительна к малым изменениям своих коэффициентов.
Если каждый из них изменится на ± 0,01 то решения изменятся не более, чем на ± 4 %, а совсем не вдвое и втрое.
Таким образом, простая система (22)—(23) иллюстрирует главный и наиболее важный вывод: эквивалентные преобразования, широко (и часто некритично) применяемые при расчетах, не меняя самих решений как таковых, могут изменять многие важные свойства решений и, в частности — могут изменять их чувствительность к неизбежным на практике малым неточностям исходных данных, которые почти всегда получаются из опыта или измерения и поэтому имеют ограниченную точность.
Данному явлению можно дать и вполне наглядную иллюстрацию: уравнения (22)—(23) — это уравнения прямых на плоскости с осями 0x и 0у, а решения х = 2, у = — 1 — это координаты точки их пересечения. На рис. 1 показаны прямые, соответствующие уравнениям (22)—(23). Эти прямые пересекаются в точке X — 2, у ——1 под очень острым углом. Именно поэтому координаты их точки пересечения очень чувствительны к изменениям коэффициентов уравнений (22)—(23).
На рис. 2 показаны прямые, соответствующие уравнениям системы (25)—(26), которая, как уже говорилось, эквивалентна исходной системе (22)—(23). Мы убеждаемся, что точка пересечения прямых, как и должно быть, осталась прежней х = 2, у = —1, но угол между прямыми стал совсем другим, гораздо менее острым, и поэтому высокая чувствительность решений к малым неточностям в исходных данных кажется исчезнувшей.
Конечно, в простейшей системе из двух уравнений все ясно, но уже в системах из 5—7, а тем более из многих десятков уравнений уже совсем не ясно, к каким погрешностям решений приведет погрешность исходных данных, например, на ±1 %. Поэтому отсутствие во многих пакетах прикладных программ оценок погрешностей решений систем уравнений в зависимости от погрешностей исходных данных является недостатком, который может быть источником ошибок в расчетах, а значит — порожденных этими ошибками аварий и катастроф.
5. Для решения ряда практических задач используют, как известно, интегральные уравнения, и некоторые пакеты прикладных программ снабжены программами их решения. Методы решения интегральных уравнений были рассмотрены профессором В. С. Сизиковым в монографии [3], где им были обнаружены недостатки традиционных методов и программ, связанные с тем, что применяемые при решении эквивалентные преобразования интегральных уравнений в ряде случаев изменяют корректность решаемой задачи и тем самым приводят к ошибкам.
В монографии [3] описаны найденные В. С. Сизиковым усовершенствованные методы решения интегральных уравнений, позволяющие восстановить достоверность компьютерных вычислений решений интегральных уравнений. Эти методы применены в монографии [3] к правильной реконструкции смазанных и дефокусированных изображений, в т. ч. изображений медицинских объектов, полученных методами рентгеновской и ядерномагнитно-резонансной томографии.
Изложенные пять пунктов не исчерпывают всех примеров необходимости совершенствования методов вычислений, связанных с открытием в Санкт-Петербургском государственном университете новых свойств эквивалентных преобразований. Поскольку эквивалентные преобразования очень широко используются в математике и в самых различных областях инженерных расчетов, то нет сомнений в том, что в дальнейшем будут открыты новые возможности уточнения методов расчета и проектирования, еще более уменьшающие вероятность техногенных аварий и катастроф.
Наука может очень много сделать для обеспечения безопасности человеческой жизни. Нужно только шире использовать ее рекомендации. Но вот с использованием рекомендаций и предостережений науки дело обстоит далеко не просто. В последней, третьей части книги будет рассказано об очень непростой борьбе за безопасность в авиации — борьбе, которую вели сотрудники Санкт-Петербургского и Балтийского технического государственных университетов.
Данный текст является ознакомительным фрагментом.