Замечания и предложения

Вот это то самое, почему с математиками договариваться всегда сложно. У них всегда имеется уникальная способность создавать проблемы буквально на ровном месте. Мы уже говорили о том, что PascalABC.NET все же преподносится, в первую очередь, как язык для обучения, хотя, безусловно, это полноценный язык и его можно использовать для любых целей, как и любой универсальный алгоритмический язык. Никто не предлагает (я писал выше) делать пакеты, которые подменят собой большие научные библиотеки программ. Но в процессе обучения часто возникают задачки, где нужно решить численным методом что-то несложное: найти экстремум табличной функции, вычислить корни полинома, что-то проинтегрировать, решить систему уравнений, обратить матрицу или сделать иные матричные вычисления и т.п. Не надо сводить учебные задачи к решению систем из миллиона уравнений и прочим подобным делам - для этого есть специализированные пакеты. Но если решается задача, в которой возникла потребность взять пару определенных интегралов и с результатом идти дальше, правильно ли прерываться и лезть в MatLAB, Maple или какие-то супербиблиотеки? Вот встроили же сортировку в PascalABC.NET и никто не задается вопросами, насколько она хороша, правильно ли ей сортировать массив из трех чисел и т.п. Вот так и библиотека - она мыслится подручным средством, учебным в первую очередь, а не подспорьем для выполнения расчетов при написании диссертаций.

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

В модуле есть демонстрационный пример. Как известно, при обращении матрицы Гильберта любого порядка n получается матрица с целочисленными элементами, но обычные методы обращения матриц начиная с некоторого порядка k перестают работать. Пример позволяет сравнить работу процедуры обращения матрицы методом Гаусса-Жордана (Йордана) с использованием арифметики простых дробей и традиционной арифметики в числах типа real. Увеличивая n с шажком 1, можно наблюдать, как погрешности вычислений в типе real постепенно гробят результат.

Замечание: время счета после n=8 растет катастрофически и уже для n=10 составляет несколько минут. Proba.pas (7,7 КБ) И да, процедура обращения матрицы практически не менялась под новый тип данных - это тоже приличное преимущество подобного подхода.

1 лайк

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

Что же касается Паскаля, то вот почему бы и не встроить какие-то простые численные библиотеки, просто используя разработанные библиотеки, причем путем не переписывания кода, а встраивания готового года, реализованного внешним квалифицированным разработчиком. Если это кому-то надо - решать однако разработчикам. Ну и только внятно и доступно объяснить, что это - учебное дело, и бросаться решать на основе этого реальные задачи не стоит, может смешно получиться.

О том и речь, что это будет долго и неизвестно чем закончится.

Тут есть конечно некая подмена понятий.

PascalABC.NET - язык для обучения программированию, но не численным методам.

Когда мы переходим к численным методам, здесь границы размываются. Базовые методы неэффективны, а профессиональные содержат много параметров, особенно в современных библиотеках. При обучении разных студентов преследуются разные цели - и заузить возможности такой библиотеки - для каких-то групп студентов это будет ненужная библиотека.

То есть, я бы делал порт какой-то профессиональной библиотеки. Обучение - оно - тоже разное :slight_smile:

А это потому, что когда некто спрашивает, у него в голове есть какие-то неформализованные ограничения и условия, о которых он часто и не подозревает. Ну а пресловутый математик, отвечая на вопрос, должен сформулировать ответ в точной форме (иначе это не математика), а это включает всевозможные ограничения и условия, которые и должны быть сформулированы.

… и тем самым резко сузите круг потенциальных пользователей. Сделайте сейчас в методе Sort шесть параметров сортировки, про которые надо почитать перед использованием - и ей перестанут пользоваться.

Ну, сейчас же пользуются безо всяких численных методов, так что не сУжу

Опустил контекст. Хотел сказать, что сузите круг потенциальных пользователей такой библиотеки.

Ну не знаю, насчет долго, вот как-то когда-то все было так. На основе фортана создали dll, и ее использовали. Мне кажется, что это нетрудно и быстро. А вот чем закончится. А чем должно закончиться? Появится функция или процедура, которая замечательно реализует эту вот библиотеку. Ну или не очень замечательно. Потому что какой-нибудь малограмотный студент воткнет какую-нибудь “нехорошую” матрицу и будет на всех углах сообщать, что “не работает ничего”. Но кто-то должен все это тестировать. А перед этим встраивать.

Из .NET нырять в ДОС-код? А как быть с обработкой прерываний там по разным неприятностям?

Ну так надо сделать не 6 параметров, а два метода - без параметров и с параметрами. Без - для “массового” пользователя, с 6ю параметрами - для “профессонального”. Ну а теперь вопрос - кому нужен этот метод с 6ю параметрами? Кто будет им пользоваться? И зачем?

Так и хочется вспомнить “Мойдодыра”:

Вот теперь тебя люблю я…"

Я же как раз про то самое! Многим ли нужны эти профессиональные библиотеки с двумя десятками спецпараметров в интерфейсе? :grinning:

Ну а это не ко мне, куда там нырять. Был некогда проект, расчетная часть на фортране, и что-то на С++, оболочка на дельфи, и все работало. А вот если бы мне сказали, что надо фортрановский код переписать, то я бы послал всех - это никаких денег не стоит.

Вообще, я понимаю, о чём говорит RAlex. Написать хороший интерфейс (в некоторых виртуальных учебных целях) для тематики численных методов - сложная задача. Это искусство дизайна если хотите.

Переписать фортрановский код на Pascal - это безумная и неправильная задача сегодня. Пользуются чем-то стандартным, пишут порты и обёртки с разной степенью подробности и объектной ориентированности.

Поскольку я сейчас уже ничего не понимаю в численных методах, то и советовать не берусь.

Ой, да я когда-то в такие игры игрался еще на ECках - ассемблерные переходники для стыковки библиотек. Но то, о чем Вы пишете - это не .NET.

Фортран - очень несложный язык, если знать его тонкости. У меня это был первый "серьезный алгоритмический язык и его работу я разбирал досконально. Сначала на уровне восьмеричных дампов памяти рушившихся у пользователей программ, а позднее - на уровне ассемблерных команд. Так что переписать с Фортрана во что-то у меня проблем ни малейших.

Честно? Думаю, что никому. Потому что, например я, если будет надо, я это вот реализованное в Паскале. НЕТ использовать не буду, я буду использовать то, что дает гарантию. Потому как объяснения, почему настал…, типа что оно так посчитало, это детство.

Однако тут вот граница есть такая, тонкая. Что включать, что не включать. И как автоматически сообщать, что ничего то тут не работает и не может… А если мы попадаем в численные методы, то это тут очень близко.

Поздравляю. Вы будете переписывать и отвечать за? А если нет, то кто?

У меня есть личный опыт. Он плохой. Я переписывал код. Из книги типа Форсайта. Сделал ошибку. Ошибка была в коде три года. Проявлялась не всегда.

Потом анализировал, почему сделал ошибку. Вот, программировал поздно вечером, внимание было утрачено - и… Поэтому тут я не верю в свои силы - в уже написанный и проверенный код верю гораздо больше.

И потенциальные пользователи, думаю, будут со мною солидарны.

1 лайк

Полностью согласен.