Медленно работают функции (программирование)

Медленно работают функции (программирование) - Messages

#1 Posted: 8/13/2014 7:55:41 AM
Antech

Antech

2 likes in 35 posts.

Group: User

Здравствуйте. Давно использую SMath в рабочих проектах. Как-то раз у меня возникла проблема со скоростью работы блоков программирования в SMath и автор помог мне, исправив sm-файл. Никогда бы не догадался, что после блока, вычисляющего матрицу M, нужно написать M:=M . Теперь мне понадобилось сделать итерационное решение сравнительно простой задачи, связанной с распределением расходов среды по трубопроводам. Вначале решение получалось примерно за 5-7 секунд. Это нормально. После этого я уточнил модель (учел сопротивление поворотов), для чего понадобилось добавить несколько вложенных функций. В результате расчет занимает 40...50 секунд, хотя добавленные функции простые и не должны долго вычисляться (в них самих нет итераций). Расчет нужно делать много раз, поэтому хотелось бы побыстрее...

Smath-файлы не секретные, они основаны на открытой литературе, поэтому даю ссылки на файлы.
Начальный вариант: http://rghost.ru/57445918
Вариант, в котором присутствует проблема с длительным расчетом: http://rghost.ru/57445935
Ссылки действуют 30 дней.

Можно ли как-то ускорить расчет? Или так и должно быть? Спасибо за внимание.
#2 Posted: 8/15/2014 7:42:05 AM
Fridel Selitsky

Fridel Selitsky

256 likes in 225 posts.

Group: Moderator

Ваш расчет подправил.Время расчета уменьшилось в два раза.
Распределение расходов.smz (123 KiB) downloaded 54 time(s).
Метод расчета рычажных механизмов : http://www.exponenta.ru/educat/systemat/selitskiy-ivanov/index.asp
1 users liked this post
Antech 8/20/2014 3:49:00 AM
#3 Posted: 8/20/2014 3:55:32 AM
Antech

Antech

2 likes in 35 posts.

Group: User

Ber7
Спасибо! Начал экспериментировать и выяснил, что вынесение К1 и К2 из прог-модуля в виде постоянных на время расчета не повлияло. А вот A1_70 и A1_100 как отдельные функции - это очень влияет на время счета. Скрипт выполняет множество вычислений на каждой итерации, интересно, почему +/- одна формула изменяет время расчета в 2 раза? Там синус, но врядли так уж долго он считается...

Подскажите, а как Вы удаляете лишние строки в скрипте (блоке программирования) на SMath? Ну, "placeholders" в терминологии Mathcad. У меня новая версия SMath (04.08.2014) и del там не работает... Также интересно, можно ли вставлять новые строки в скрипт (кроме как выделить весь скрипт и добавить строки в конце). Кнопочка "]" добавляет новый уровень скрипта, а не строку...

Апдейт. Взял исходный файл, вставил A1_70(it) и A1_100(it) аналогично Вашему варианту. Время расчета особо не изменилось (минута+ на моем компе). В чем может быть причина? Нужно что-то еще исправить? Как я уже говорил, в Вашем варианте отдельные К1 и К2 пробовал убирать, это не повлияло на время счета.
  • New Posts New Posts
  • No New Posts No New Posts