Создание пользовательской функции

Создание пользовательской функции - Messages

#1 Posted: 6/18/2012 7:01:04 AM
Valey

Valey

0 likes in 7 posts.

Group: User

Сделал расчет коэффициента сжимаемости природного газа, а затем решил все это реализовать в виде отдельной функции. Тут выдало мне ошибку "Значение вышло за пределы маскимально-допустимого положительного числа", однако при обычном расчете все замечательно решается. Выяснялось, что ошибка возникает при расчете А2 (смотрите прикрепленный файл), хотя там используются величины близкие к 0. В чем ошибка?
метод GERG-91.sm (63 KiB) downloaded 42 time(s).
#2 Posted: 6/18/2012 7:36:19 AM
Fridel Selitsky

Fridel Selitsky

256 likes in 225 posts.

Group: Moderator

Оптимизируйте третью строку снизу оператором eval:
A2:=eval((A.0-(A.0^2-A.1^3)^0.5)^{1/3})

Метод расчета рычажных механизмов : http://www.exponenta.ru/educat/systemat/selitskiy-ivanov/index.asp
1 users liked this post
Valey 6/18/2012 8:03:00 AM
#3 Posted: 6/18/2012 8:02:38 AM
Valey

Valey

0 likes in 7 posts.

Group: User

Спасибо, теперь все отлично работает!
#4 Posted: 6/19/2012 2:35:16 AM
Valery Ochkov

Valery Ochkov

55 likes in 633 posts.

Group: User

Wrote

Спасибо, теперь все отлично работает!


Но это у Вас функция не двух (давление и температура), а шести аргументов (плюс состав газа и плотность)! А плотность, в свою очередь, это функция давления и температуры!
Еще бы хорошо, чтобы в функции работали единицы измерения!

А так приятно видеть полезную функция для теплотехников!
#5 Posted: 6/19/2012 2:38:56 AM
Valery Ochkov

Valery Ochkov

55 likes in 633 posts.

Group: User

Wrote

Оптимизируйте третью строку снизу оператором eval:
A2:=eval((A.0-(A.0^2-A.1^3)^0.5)^{1/3})


Пардон, но "eval всех достал!".
А почему система не может сама оптимизировать расчеты, освобождая инженера от необходимости засорять расчет служебными функциями! Вопрос, конечно, детский, но...

#6 Posted: 6/19/2012 4:21:44 AM
kmihaylovich

kmihaylovich

8 likes in 131 posts.

Group: User

Ответ наверно тоже получится детский... Потому что компьютер не имеет понятия с какой точностью каждый отдельный индивидуум хочет производить вычисления. по-умолчанию - точность максимальная (потому как используется символьная арифметика: если встречается sqrt(sin(3)), то программа с этим выражением так и будет работать, а не переведёт его в 0.37565943094759, что бы потом погореть на погрешности последующих вычислений). Применяя eval юзер соглашается на появление погрешности после 15-го знака. Внимание (барабанная дробь), а теперь вопрос, куда в компьютер надо вставить мозг, что бы он сам догадывался, надо считать численно или символьно?
#7 Posted: 6/20/2012 12:59:00 AM
Valey

Valey

0 likes in 7 posts.

Group: User

Wrote

Wrote

Спасибо, теперь все отлично работает!


Но это у Вас функция не двух (давление и температура), а шести аргументов (плюс состав газа и плотность)! А плотность, в свою очередь, это функция давления и температуры!
Еще бы хорошо, чтобы в функции работали единицы измерения!

А так приятно видеть полезную функция для теплотехников!



Согласен, просто в рамках решаемой мною задачи необходимости введения этих данных в качестве аргументов нет, т.к. они принимаются условно-постоянными параметрами и задаются один раз в начале расчета. А плотность берется при стандартных условиях, т.е. при фиксированных значениях температуры и давления.
  • New Posts New Posts
  • No New Posts No New Posts