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

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

#1 Опубликовано: 18.06.2012 07:01:04
Valey

Valey

0 сообщений из 7 понравились пользователям.

Группа: User

Сделал расчет коэффициента сжимаемости природного газа, а затем решил все это реализовать в виде отдельной функции. Тут выдало мне ошибку "Значение вышло за пределы маскимально-допустимого положительного числа", однако при обычном расчете все замечательно решается. Выяснялось, что ошибка возникает при расчете А2 (смотрите прикрепленный файл), хотя там используются величины близкие к 0. В чем ошибка?
метод GERG-91.sm (63 КиБ) скачан 42 раз(а).
#2 Опубликовано: 18.06.2012 07:36:19
Fridel Selitsky

Fridel Selitsky

256 сообщений из 225 понравились пользователям.

Группа: 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 пользователям понравился этот пост
Valey 18.06.2012 08:03:00
#3 Опубликовано: 18.06.2012 08:02:38
Valey

Valey

0 сообщений из 7 понравились пользователям.

Группа: User

Спасибо, теперь все отлично работает!
#4 Опубликовано: 19.06.2012 02:35:16
Valery Ochkov

Valery Ochkov

55 сообщений из 633 понравились пользователям.

Группа: User

Wrote

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


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

А так приятно видеть полезную функция для теплотехников!
#5 Опубликовано: 19.06.2012 02:38:56
Valery Ochkov

Valery Ochkov

55 сообщений из 633 понравились пользователям.

Группа: User

Wrote

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


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

#6 Опубликовано: 19.06.2012 04:21:44
kmihaylovich

kmihaylovich

8 сообщений из 131 понравились пользователям.

Группа: User

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

Valey

0 сообщений из 7 понравились пользователям.

Группа: User

Wrote

Wrote

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


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

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



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