2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Математическое ядро мат. пакетов
Сообщение27.05.2009, 02:00 


20/05/09
2
Здравствуйте!

Поискал по форумам, вроде бы конкретно темы такой не поднималось. Если да, ткните, пожалуйста.

Собственно стало интересным, а как устроены пакеты моделирования на уровне архитектуры. Нашел в интернете совсем немного информации. Ясно одно: в составе любого пакета моделирования лежит математическое/геометрическое ядро. Плюс обвязка к нему - доступ к БД, а также сервера визуализации модели.

Кто-нибудь может посоветовать литературу по данной теме. Как пишется ядро, какие есть особенности, с чего начинать...

Может быть, кто-то писал свое ядро.... поделитесь, пожалуйста, знаниями :)

 Профиль  
                  
 
 Re: Математическое ядро мат. пакетов
Сообщение27.05.2009, 17:09 
Заслуженный участник
Аватара пользователя


30/01/09
6701
Я не специалист, но думаю, что в основе таких пакетов прежде всего лежит язык. Вначале должен быть интерпретатор этого языка. Затем пакеты можно расширять, программируя собственно на этом языке.

 Профиль  
                  
 
 Re: Математическое ядро мат. пакетов
Сообщение28.05.2009, 18:34 
Заслуженный участник


15/05/05
3445
USA
gahcep в сообщении #217467 писал(а):
Собственно стало интересным, а как устроены пакеты моделирования на уровне архитектуры. Нашел в интернете совсем немного информации. Ясно одно: в составе любого пакета моделирования лежит математическое/геометрическое ядро. Плюс обвязка к нему - доступ к БД, а также сервера визуализации модели.
Ваша тема называется "Математическое ядро мат. пакетов", в тексте Вы спрашиваете о пакетах моделирования. Что Вы имеете в виду, моделирование геометрии как в AutoCAD и SolidWorks? Моделирование процессов как в Simulink?

1. Посмотрите "CAD на Sourceforge"

2. Есть SciCos - аналог коммерческого Simulink. Вы можете найти его в исходниках для Linux.

3. Гораздо больше информации есть об игровых движках, в т.ч. книги:
- Eberly D.H. 3D Game Engine Architecture.
- David H. Eberly. 3D Game Engine Design.
- Harrison T. Introduction to 3D Game Engine Design Using DirectX 9 and C#.
- Ian Millington. Game Physics Engine Development
- Brian Schwab. AI Game Engine Programming
Тут можно найти информацию о принципах построения ядер.

 Профиль  
                  
 
 Re: Математическое ядро мат. пакетов
Сообщение12.08.2009, 13:39 
Заслуженный участник


26/07/09
1559
Алматы
2gahcep
Если речь идет о математических пакетах, то в основе, как правило, лежит подсистема символьной алгебры. В этом случае должна быть продумана схема представления абстрактных алгебраических выражений (например, деревья), должны быть реализованы алгоритмы манипулирования этими выражениями (подстановка, ввод/вывод), а также алгоритмы сопоставлений с образцом (например, вы можете захотеть реализовать функцию раскрытие скобок в выражении, тогда вам понадобиться распознать некоторый образец, типа $a*(b+c)$ и заменить его на $a*b+a*c$, ну и т.д.). В конечном счете, как сказал мат-ламер, должно получиться что-то вроде небольшого интерпретируемого языка программирования.

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

Если подразумевается геометричекое моделирование (САПР, 3D-графика), то понятно, что основное внимание должны быть обращено на представление данных (сцены), должны быть реализована специфические геометрические алгоритмы (геометрическая булева алгебра, системы частиц, etc.), продуманы вопросы взаимодействия с пользователем (нестандарные устройства ввода, визуализация объектов, поддержка распространенных форматов файлов для обмена данными с другим ПО).

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

Что касается архитектуры ядра, то возможно стоит делать его изначально модульным, кроссплатформенным, скалируемым, стоит предусмотреть возможности распараллеливания, работы на кластерах, непобрезговать аппаратной оптимизацией (e.g. обеспечить возможность заточки некоторых частей ядра на наилучшую работу с определенным оборудованием). Непомешает поддержка расширений, типа скриптов. плагинов. Хорошую переносимость можно обеспечит тщательно спроектировав и продукоментировав открытый API вашего ядра. Например, в какой-нибудь системе символьной алгебры на основе этого ядра, должно быть возможным при необходимости "научить" её, скажем, решать какие-то необычные типы интегралов, просто подключив дополнительный модуль.

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

Очень хотелось бы услышать от автора данной темы, что-же за система проектировалась, какие архитектурные вопросы решались (и как решались). Сам я как-то писал нечто подобное (правда в сфере документооборота, как бы это странно не звучало). Сначала я не понимал какая именно мне нужна архитектура, на какие части поделить проект, поэтому просто начал писать с самых низкоуровневых вещей, в конце концов получив конечный продукт. Но его облик не был спроетирован сначала, он определился стихийно в ходе разработки снизу-вверх. Правда проект этот так и не был внедрен, всестороннего тестирования не проводилось, и, таким образом, узкие места архитектуры себя никак не проявили. Именно поэтому мне тоже очень интересно, как лучше всего проектировать такие вот ядра, решающие математические задачки. В существующих open-source мат. пакетиках каково-то единства архитектурных решений не наблюдается (или я его просто не увидел).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group