простите если не в тему
а где-нибудь есть таблицы зависимости давления насыщенного пара водно-спиртовой смеси от температуры для различных концентраций ?
(особо интересуют давления от 15 до 100 PSI)
а то считать лень (да и не так просто как на первый взгляд)
Теория фазового состояния водно-спиртовой смеси: температура, давление, концентрация
Newocelot
Профессор
Питер
10.6K 2.8K 2
Отв.180 29 Марта 19, 00:20
Newocelot
Профессор
Питер
10.6K 2.8K 2
Отв.182 31 Марта 19, 00:59
вот тутm16, 29 Марта 19, 22:47Спасибо, но интересуют (как я и писал) гораздо более высокие давления....
(от 1500 mm.hg)
m16
Научный сотрудник
Тамбов
1.9K 1K
Отв.183 31 Марта 19, 15:48
Newocelot, открываешь VLE-calc , выбираешь водноспиртовую смесь, меняя давление с выбранным шагом в выбранном диапазоне расчитанные данные заносишь в таблицу через copy-paste. именно так я и делал, да, геморно но готовую таблицу ты вряд ли найдёшь. в таблице ты можешь выбрать вид выходных данных mol/mol, mass%, vol%
Kotische
Академик
Саратов
8.1K 2.5K
Отв.184 07 Апр. 19, 00:32
открываешь VLE-calcm16, 31 Марта 19, 15:48Решил чисто по приколу проанализировать табличку пересчета спиритуозности, массовых процентов в объемныые,
и конкретно так... удивился. :o
Данные из Стабникова:
мас% | об% | разница |
52 | 59,91 | 7,91 |
53 | 60,91 | 7,91 |
Данные из VLE-calc:
мас% | об% | разница |
52,2891 | 58,1422 | 5,8531 |
2% раазницы!
Да это вообще ни в какие ворота не лезет!!!
Шо за нах?!
Возможно с этим связаны нестыковки данных эксперимента и данных полученных с нового калькулятора Руди.
игорь223
Академик
таганрог
30.5K 20.7K
Отв.185 07 Апр. 19, 08:17
Kotische, температура кипения воды полностью бьется со СТАРЫМ калькулятором Руди.
Я потратил почти неделю на новый. в смысле на его проверку и поиски ответа на вопрос - какого хера не бьется теория с практикой.
Блядь.
Пока OldBean крайне корректно и ненавязчиво отказался переделывать свою программу на новый лад, очень тактично мотивируя свое решение тем, что таблицы Стабникова проверены прошлыми поколениями, и составлены корифеями науки задолго даже до его рождения.
После этого, доверяя его авторитету и мнению, я и забил таблицу в память контроллера...через пару часов все стало на свои места.
Собственно, где-то на форуме я про это подробно и отписался в этот же день, день "прозрения")))
Добавлено через 1мин.:
[сообщение #13502131]
Я потратил почти неделю на новый. в смысле на его проверку и поиски ответа на вопрос - какого хера не бьется теория с практикой.
Блядь.
Пока OldBean крайне корректно и ненавязчиво отказался переделывать свою программу на новый лад, очень тактично мотивируя свое решение тем, что таблицы Стабникова проверены прошлыми поколениями, и составлены корифеями науки задолго даже до его рождения.
После этого, доверяя его авторитету и мнению, я и забил таблицу в память контроллера...через пару часов все стало на свои места.
Собственно, где-то на форуме я про это подробно и отписался в этот же день, день "прозрения")))
Добавлено через 1мин.:
[сообщение #13502131]
Kotische
Академик
Саратов
8.1K 2.5K
Отв.186 07 Апр. 19, 10:34
я и забил таблицу в память контроллера...игорь223, 07 Апр. 19, 08:17Оказалось для точности 0.01% достаточно забить полином 4 степени.
Или полином 3 степени для точности 0.05%.
игорь223
Академик
таганрог
30.5K 20.7K
Отв.187 07 Апр. 19, 10:37, через 3 мин
Ты бы лучше сделал полином для перевода из молярных долей спиртосодержания в обьемные для пара и спирта.
Вот это было бы круто!
Вот это было бы круто!
Kotische
Академик
Саратов
8.1K 2.5K
Отв.188 07 Апр. 19, 10:40, через 4 мин
С молярными долями я ещё до конца не разобрался.
В Стабникове есть формула, я по ней влоб считаю спиритуозность и получаю какую то херню.
Значит что то ещё не до конца понимаю.
Как разберусь - сделаю тебе полином. )
В Стабникове есть формула, я по ней влоб считаю спиритуозность и получаю какую то херню.
Значит что то ещё не до конца понимаю.
Как разберусь - сделаю тебе полином. )
Kotische
Академик
Саратов
8.1K 2.5K
Отв.189 08 Апр. 19, 21:56
После того как сам формулу вывел, и получил ту же самую формулу как в Стабникове, понял как его формулой пользоваться
Далее по тексту концентрации Аххх меряются в долях, а спиритуозности Sxxx в процентах!
Пересчет концентраций в проценты спиритуозности:
1 доля = 100%,
1% = 0,01 доли
Формула перевода из масовых долей в молярные:
Aмол = (18,01528 * Амас) / (46,07 - 28,05472*Амас)
Формула перевода из молярных долей в массовые:
Aмас = (46,07 * Амол) / (18,01528 + 28,05472*Амол)
Формула перевода из массовых долей в объемные:
Аоб = Амас + (B0 + B1*Амас + B2*Амас2 + B3*Амас3)
где Bx - коэфициенты полинома:
B0 = -0,000759886
B1 = 0,27494
B2 = -0,19104
B3 = -0,08202
Пример расчета:
Имеем молярную спиритуозность:
Sмол = 45% (мол)
Aмол = 45%/100% = 0.45
Aмас = (46,07 * 0,45) / (18,01528 + 28,05472*0,45) = 0,676617655
Sмас = Aмас*100% = 67,6617655% (масс)
Аоб = 0,6766 + -0,000759886 + 0,27494*0,6766 + -0,19104*0,6766*0,6766 + -0,08202*0,6766*0,6766*0,6766 = 0,74900
Sоб = Аоб*100% = 74,900% (об)
По оценке интерполятора погрешность должна получиться не более 0.05%
Проверимся по калькулятору Руди:
Sмол = 45.00% (мол)
Sмас = 67.65% (масс)
Sоб = 74.84% (об)
Далее по тексту концентрации Аххх меряются в долях, а спиритуозности Sxxx в процентах!
Пересчет концентраций в проценты спиритуозности:
1 доля = 100%,
1% = 0,01 доли
Формула перевода из масовых долей в молярные:
Aмол = (18,01528 * Амас) / (46,07 - 28,05472*Амас)
Формула перевода из молярных долей в массовые:
Aмас = (46,07 * Амол) / (18,01528 + 28,05472*Амол)
Формула перевода из массовых долей в объемные:
Аоб = Амас + (B0 + B1*Амас + B2*Амас2 + B3*Амас3)
где Bx - коэфициенты полинома:
B0 = -0,000759886
B1 = 0,27494
B2 = -0,19104
B3 = -0,08202
Пример расчета:
Имеем молярную спиритуозность:
Sмол = 45% (мол)
Aмол = 45%/100% = 0.45
Aмас = (46,07 * 0,45) / (18,01528 + 28,05472*0,45) = 0,676617655
Sмас = Aмас*100% = 67,6617655% (масс)
Аоб = 0,6766 + -0,000759886 + 0,27494*0,6766 + -0,19104*0,6766*0,6766 + -0,08202*0,6766*0,6766*0,6766 = 0,74900
Sоб = Аоб*100% = 74,900% (об)
По оценке интерполятора погрешность должна получиться не более 0.05%
Проверимся по калькулятору Руди:
Sмол = 45.00% (мол)
Sмас = 67.65% (масс)
Sоб = 74.84% (об)
игорь223
Академик
таганрог
30.5K 20.7K
Отв.190 09 Апр. 19, 14:04
Проверил.
Все бьется, и по кубовому остатку, и по пару.
Как соберу макет (многострочный индикатор щас прикручиваем))) так и покажу в работе твой полином!
Все бьется, и по кубовому остатку, и по пару.
Как соберу макет (многострочный индикатор щас прикручиваем))) так и покажу в работе твой полином!
Kotische
Академик
Саратов
8.1K 2.5K
Отв.191 16 Мая 19, 00:44
игорь223, по поводу твоего вопроса
Первая страница - исходные данные, про которые были сомнения.
они взяты из Стабникова.
Там есть столбец проверочный, который показывает что погрешность формулы 0,05%
имхо вполне достаточно для практики.
А уж верить данным из Стабникова или не - сам решай.
Вторая страница - проверка данных с сайта LVE.
Видно что там погрешность около 2%.
ЗЫ: макросы и вижуал бейсик в экселе разреши чтоб формула считалась.
Данные по Нетбиновскому алгоритму немного отличаются от данных Стабникова и от калькулятора Руди (в обоих режимах).
Переделать Нетбиновский алгоритм что бы он по паре температура-давление считал спиритуозность - не вижу особой проблемы, но расстыыковка значений между разными источниками данных никуда не денется.
Первая страница - исходные данные, про которые были сомнения.
они взяты из Стабникова.
Там есть столбец проверочный, который показывает что погрешность формулы 0,05%
имхо вполне достаточно для практики.
А уж верить данным из Стабникова или не - сам решай.
Вторая страница - проверка данных с сайта LVE.
Видно что там погрешность около 2%.
ЗЫ: макросы и вижуал бейсик в экселе разреши чтоб формула считалась.
Данные по Нетбиновскому алгоритму немного отличаются от данных Стабникова и от калькулятора Руди (в обоих режимах).
Переделать Нетбиновский алгоритм что бы он по паре температура-давление считал спиритуозность - не вижу особой проблемы, но расстыыковка значений между разными источниками данных никуда не денется.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.192 24 Мая 19, 21:38
Развлекаюсь между делом формулами, построить точную формулу A(P,T) пока не получается,
за то родил сильтно точную формулу P(T) для чистой воды.
В диапазоне температур (0...350°C) точность интерполяции (относительная) 0,03%.
Чтоб не потерялась выкладываю здесь.
Давление в барах (1 бар = 100 кПа)
Температура, используется подстановка:
x = 1000/T°K = 1000/(T°C+273,15)
Для диапазона температур (0...350°C)
P = 10^( 0,0111650677918078*x6 - 0,1888273384771980*x5 + 1,3274383167192000*x4 - 4,9598226655712100*x3 + 10,2661000165064000*x2 - 13,0773103655954000*x + 10,2787430184731000)
Для диапазона температур (0...100°C) и ниже
P = 10^( -2,2595528139333400*x + 6,0757114036191900 )
за то родил сильтно точную формулу P(T) для чистой воды.
В диапазоне температур (0...350°C) точность интерполяции (относительная) 0,03%.
Чтоб не потерялась выкладываю здесь.
Давление в барах (1 бар = 100 кПа)
Температура, используется подстановка:
x = 1000/T°K = 1000/(T°C+273,15)
Для диапазона температур (0...350°C)
P = 10^( 0,0111650677918078*x6 - 0,1888273384771980*x5 + 1,3274383167192000*x4 - 4,9598226655712100*x3 + 10,2661000165064000*x2 - 13,0773103655954000*x + 10,2787430184731000)
Для диапазона температур (0...100°C) и ниже
P = 10^( -2,2595528139333400*x + 6,0757114036191900 )
Newocelot
Профессор
Питер
10.6K 2.8K 2
Отв.193 24 Мая 19, 22:37, через 59 мин
P = 10^( 0,0111650677918078*x6 - 0,1888273384771980*x5 + 1,3274383167192000*x4 - 4,9598226655712100*x3 + 10,2661000165064000*x2 - 13,0773103655954000*x + 10,2787430184731000)Kotische, 24 Мая 19, 21:38лет 30 назад легко прокатило-бы за кандидатскую по численным методам
Kotische
Академик
Саратов
8.1K 2.5K
Отв.194 26 Мая 19, 23:36
Продолжаю развлекаться...
Немного разобрался как получается температура кипения жидкости через молекулярно кинетическую теорию и прочую термодинамику...
Узнал, что её можно получить через энтропию и энтальпию вещества, которые в свою очередь можно получить через удельную теплоемкость и удельную энергию фазового перехода жидкость-пар...
Выяснилось, что нихрена нам это полезного не дает, так как и теплоемкость, и энтропия, и энтальпия вещества к сожалению сами зависят от температуры и давления, и зависимости эти существенно не линейные
Так что получить одну красивую формулу с минимальным количеством коэффициентов и которая покрывала бы весь диапазон температур к сожалению не получилось.
За то разбив график зависимости давления от температуры на несколько участков удалось получить просто охренительную точность интерполяции и всего 4 коэфициента на каждом участке:
Вот получавшаяся формула:
Как видно из кода, для самогоноварительных нужд достаточно всего два участка [0 - 28°C] и [28°C - 101°C] получившейся формулы.
Немного разобрался как получается температура кипения жидкости через молекулярно кинетическую теорию и прочую термодинамику...
Узнал, что её можно получить через энтропию и энтальпию вещества, которые в свою очередь можно получить через удельную теплоемкость и удельную энергию фазового перехода жидкость-пар...
Выяснилось, что нихрена нам это полезного не дает, так как и теплоемкость, и энтропия, и энтальпия вещества к сожалению сами зависят от температуры и давления, и зависимости эти существенно не линейные
Так что получить одну красивую формулу с минимальным количеством коэффициентов и которая покрывала бы весь диапазон температур к сожалению не получилось.
За то разбив график зависимости давления от температуры на несколько участков удалось получить просто охренительную точность интерполяции и всего 4 коэфициента на каждом участке:
Вот получавшаяся формула:
Скрытый текст
uT = 273,15/(T°C+273,15)
P[бар] = 220,55 * ( 2,71828182845905 ^ MyFun )
Function MyFun(uT As Double) As Double
If 0.907023 <= uT Then ' 28°C
MyFun = 1.4476096556 * uT ^ 3 - 6.8275038291 * uT ^ 2 - 10.5318832847 * uT + 5.4183028571
Exit Function
End If
If 0.730054790859281 < uT Then ' 101°C
MyFun = 1.3761569154 * uT ^ 3 - 6.6879672463 * uT ^ 2 - 10.6092000437 * uT + 5.4269362651
Exit Function
End If
If 0.578523774224293 < uT Then ' 199 °C
MyFun = -1.7005273703 * uT ^ 3 - 0.106626187 * uT ^ 2 - 15.30987446 * uT + 6.5481027204
Exit Function
End If
If 0.48 < uT Then ' 297 °C
MyFun = -13.9064839161 * uT ^ 3 + 20.7846329626 * uT ^ 2 - 27.2542981851 * uT + 8.8295139109
Exit Function
End If
If 0.455895852457648 < uT Then ' 326 °C
MyFun = -66.5139298365 * uT ^ 3 + 96.9340131979 * uT ^ 2 - 64.0194626707 * uT + 14.7499974396
Exit Function
End If
If 0.43346822185194 < uT Then ' 357 °C
MyFun = -163.1654273905 * uT ^ 3 + 228.1688731527 * uT ^ 2 - 123.4170027793 * uT + 23.7112235716
Exit Function
End If
MyFun = -1130.8011952937 * uT ^ 3 + 1484.4484161774 * uT ^ 2 - 667.107006002 * uT + 102.145747311
End Function
Как видно из кода, для самогоноварительных нужд достаточно всего два участка [0 - 28°C] и [28°C - 101°C] получившейся формулы.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.195 28 Мая 19, 01:10
Очередной подход к снаряду...
Диапазон [0...374°C] разбит на большее число мелких поддиапазончиков,
но зато точность интерполяции возросла неимоверно, и теперь
относительная погрешность составляет менее 0,003%
Экстраполяция для отрицательных температур тоже должна работать,
но точность там ни кто не гарантирует.
Формула:
В аттаче картинка с абсолютной погрешностью.
Видно что табличка состоит из нескольких кусков, промеренных с разной точностью.
Диапазон [0...374°C] разбит на большее число мелких поддиапазончиков,
но зато точность интерполяции возросла неимоверно, и теперь
относительная погрешность составляет менее 0,003%
Экстраполяция для отрицательных температур тоже должна работать,
но точность там ни кто не гарантирует.
Формула:
Скрытый текст
// T - температура в [°С]
// P - давление в [бар], где 1[бар] = 100[кПа]
Function Fun_T2P(T As Variant) As Variant
Dim x As Variant
x = 273.15 / (T + 273.15)
Dim y As Variant
If T <= 0 Then y = -19.7541753265 * x + 9.2611847264: GoTo lExit
If T <= 10 Then y = -2.6258109568 * x ^ 2 - 14.5955091231 * x + 6.7278343483: GoTo lExit
If T <= 20 Then y = -2.7503492712 * x ^ 2 - 14.358968763 * x + 6.6155486684: GoTo lExit
If T <= 30 Then y = -2.8659351314 * x ^ 2 - 14.1445726474 * x + 6.5161425234: GoTo lExit
If T <= 40 Then y = -2.9930983972 * x ^ 2 - 13.9150854365 * x + 6.4126116471: GoTo lExit
If T <= 50 Then y = -3.2013161054 * x ^ 2 - 13.5527182367 * x + 6.2549462522: GoTo lExit
If T <= 60 Then y = -3.4086821424 * x ^ 2 - 13.2087995338 * x + 6.1123887561: GoTo lExit
If T <= 70 Then y = -3.371451435 * x ^ 2 - 13.2727652401 * x + 6.1398116795: GoTo lExit
If T <= 80 Then y = -3.4430028268 * x ^ 2 - 13.1589470274 * x + 6.0945544294: GoTo lExit
If T <= 90 Then y = -3.5259288492 * x ^ 2 - 13.0307945077 * x + 6.0450466975: GoTo lExit
If T <= 100 Then y = -3.6181451945 * x ^ 2 - 12.8927447614 * x + 5.9933811568: GoTo lExit
If T <= 110 Then y = -3.8403997818 * x ^ 2 - 12.574162605 * x + 5.8792583274: GoTo lExit
If T <= 120 Then y = -3.7885046471 * x ^ 2 - 12.6548382555 * x + 5.9103880854: GoTo lExit
If T <= 130 Then y = -3.5537596366 * x ^ 2 - 12.9838084675 * x + 6.0256296725: GoTo lExit
If T <= 140 Then y = -3.6122629857 * x ^ 2 - 12.9037208934 * x + 5.9982271545: GoTo lExit
If T <= 150 Then y = -3.4625219083 * x ^ 2 - 13.1027067253 * x + 6.0643318111: GoTo lExit
If T <= 160 Then y = -3.3400375359 * x ^ 2 - 13.2583326295 * x + 6.1137625622: GoTo lExit
If T <= 170 Then y = -3.3435574363 * x ^ 2 - 13.2549054791 * x + 6.1130010531: GoTo lExit
If T <= 180 Then y = -3.4191689949 * x ^ 2 - 13.1652764347 * x + 6.086477925: GoTo lExit
If T <= 190 Then y = -3.0521267771 * x ^ 2 - 13.6131183259 * x + 6.2230860949: GoTo lExit
If T <= 200 Then y = -2.6385058338 * x ^ 2 - 14.0972000461 * x + 6.3647298404: GoTo lExit
If T <= 210 Then y = -2.9294993661 * x ^ 2 - 13.768665841 * x + 6.2720463128: GoTo lExit
If T <= 220 Then y = -2.631450202 * x ^ 2 - 14.109384635 * x + 6.3694162025: GoTo lExit
If T <= 230 Then y = -2.3379132325 * x ^ 2 - 14.4447564036 * x + 6.4651162717: GoTo lExit
If T <= 240 Then y = -1.5948167044 * x ^ 2 - 15.2523168071 * x + 6.6845309724: GoTo lExit
If T <= 250 Then y = -1.4454624088 * x ^ 2 - 15.4107143136 * x + 6.7265279842: GoTo lExit
If T <= 260 Then y = -1.1296317105 * x ^ 2 - 15.7440526371 * x + 6.8144651328: GoTo lExit
If T <= 270 Then y = -0.3925956019 * x ^ 2 - 16.5012595029 * x + 7.0089524269: GoTo lExit
If T <= 280 Then y = 0.2438293443 * x ^ 2 - 17.1415984348 * x + 7.1700246955: GoTo lExit
If T <= 290 Then y = 0.904904303 * x ^ 2 - 17.7918550369 * x + 7.3299233359: GoTo lExit
If T <= 300 Then y = 1.7228910966 * x ^ 2 - 18.5864683502 * x + 7.5229035329: GoTo lExit
If T <= 310 Then y = 2.8807996653 * x ^ 2 - 19.6892414091 * x + 7.785471031: GoTo lExit
If T <= 320 Then y = 4.5013403143 * x ^ 2 - 21.2034420341 * x + 8.1391885471: GoTo lExit
If T <= 330 Then y = 3.496903246 * x ^ 2 - 20.2999171901 * x + 7.9360679874: GoTo lExit
If T <= 340 Then y = 7.3188442086 * x ^ 2 - 23.7813598251 * x + 8.7288637786: GoTo lExit
If T <= 350 Then y = 11.1719752112 * x ^ 2 - 27.2229765412 * x + 9.4973704541: GoTo lExit
If T <= 360 Then y = 17.0001930891 * x ^ 2 - 32.3340023094 * x + 10.6178948214: GoTo lExit
If T <= 370 Then y = 30.160006187 * x ^ 2 - 43.6796102356 * x + 13.0632720194: GoTo lExit
y = 35.5050007665 * x ^ 2 - 48.2912104733 * x + 14.0577601631 ' 370°C >= T
lExit:
Fun_T2P = 220.55 * Exp(y)
End Function
В аттаче картинка с абсолютной погрешностью.
Видно что табличка состоит из нескольких кусков, промеренных с разной точностью.
Kotische
Академик
Саратов
8.1K 2.5K
Отв.196 28 Мая 19, 01:27, через 17 мин
223ий, специально для тебя сравнил с калькулятором Руди
игорь223
Академик
таганрог
30.5K 20.7K
Отв.197 28 Мая 19, 04:28
В следующий раз, когда термометр в кубе у меня покажет 373,2С я обязательно воспользуюсь твоей формулой, чтобы вычислить давление в кубе.
С точностью до тысячной процента, это для меня будет очень важно!
Вопрос — а вдруг у меня в кубе будет не вода, а ССЖ?
К тому—же в кубе будет установлен не только термометр, который откалиброван и имеет разрешение в тысячную градуса, но и манометр, калиброваный и с разрешением в тысячную долю миллиметра ртутного столба.
Я к чему.
И калькулятор руди, и твоя формула страшно далеки от реальных нужд бытовых винокуров.
Но калькулятор работает, потому что в нем три переменных.
Хотя твоя формула небесполезна, на самом деле.
Особенно если в ней оставить одну десятую после запятой — тогда даже на практике можно было бы ее в скетч вставить)))
Добавлено через 4мин.:
Особенно удобно пользоваться формулой потому, что в ней 1,0Бар у тебя равен 100,0кПа
Переводить, при необходимости, очень удобно в уме...
С точностью до тысячной процента, это для меня будет очень важно!
Вопрос — а вдруг у меня в кубе будет не вода, а ССЖ?
К тому—же в кубе будет установлен не только термометр, который откалиброван и имеет разрешение в тысячную градуса, но и манометр, калиброваный и с разрешением в тысячную долю миллиметра ртутного столба.
Я к чему.
И калькулятор руди, и твоя формула страшно далеки от реальных нужд бытовых винокуров.
Но калькулятор работает, потому что в нем три переменных.
Хотя твоя формула небесполезна, на самом деле.
Особенно если в ней оставить одну десятую после запятой — тогда даже на практике можно было бы ее в скетч вставить)))
Добавлено через 4мин.:
Особенно удобно пользоваться формулой потому, что в ней 1,0Бар у тебя равен 100,0кПа
Переводить, при необходимости, очень удобно в уме...
Kotische
Академик
Саратов
8.1K 2.5K
Отв.198 08 Июня 19, 01:09
Формула для воды.
Диапазон температур -10°С ... +374°С
Давление в бар, 1бар=100кПа
Очередное уточнение, чтоб не потерялось.
Ничем не лучше других, но записана немного по другому.
Сама формула очень простая:
P = Exp( 11.865588387 - 3943,639903203 / (T + 232.525533603) )
Но в таком виде точность получается не очень высока.
Полином шестой степени разбитый на 5 поддиапазонов дает поправки к основной формуле
обеспечивая в результате точность превосходящую шум исходных данных.
Dim A6 As Double: A6 = 0
Dim A5 As Double: A5 = 0
Dim A4 As Double: A4 = 0
Dim A3 As Double: A3 = 0
Dim A2 As Double: A2 = 0
Dim A1 As Double: A1 = 0
Dim A0 As Double: A0 = 0.0027
If T > 312 Then
A6 = -2756018.14306641
A5 = 7930387.40726493
A4 = -9507901.0540747
A3 = 6079529.55482278
A2 = -2186669.29596193
A1 = 419480.276731174
A0 = -33532.011335622
GoTo lExit
End If
If T > 173 Then
A6 = -620.430668398737
A5 = 2322.05929111314
A4 = -3632.76524966061
A3 = 3044.51872007541
A2 = -1443.3557816625
A1 = 367.335226327043
A0 = -39.2112927854782
GoTo lExit
End If
If T > 55 Then
A6 = 7.86542821675539
A5 = -33.4143113679987
A4 = 55.7009622186928
A3 = -45.3833779620563
A2 = 18.1722685936802
A1 = -3.05413945092859
A0 = 0.114346323162502
GoTo lExit
End If
If T > 0 Then
A6 = 6.82475701719522
A5 = -41.0849139790453
A4 = 102.945694607551
A3 = -138.294823551731
A2 = 105.581498616194
A1 = -43.5298080667574
A0 = 7.55858000771691
GoTo lExit
End If
lExit:
Dim x As Double: x = 273 / (T + 232.525533603)
Dim d As Double: d = A6 * x ^ 6 + A5 * x ^ 5 + A4 * x ^ 4 + A3 * x ^ 3 + A2 * x ^ 2 + A1 * x + A0
PT = 11.865588387 - 14.445567411 * x - d
End Function
Добавлено через 3дн. 22ч. 59мин.:
Итак, докладываю состоянии дел на ниве поиска "абсолютно точной формулы"...
Надыбал данные для давления пара над поверхностью переохлажденной воды,
аж до -85°С и формулу имени немецких физиков моделирующую испарение жидкой и твердой воды до -100°С.
http://cires1.colorado.edu/~voemel/vp.html
Так же надыбал матерую буржуйскую статью про свойства воды: IAPWS_1995.pdf
Поизучав разные статьи пришел к выводу что очень сильно точно формулы в природе не существует,
есть алгоритм написанный на Fortran77 который моделируя термодинамические уравнения может получать нужные точки с довольно высокой точностью.
Есть несколько формул позволяющие в разных диапазонах получать точность апроксимации до 0.01%.
Но самая печаль - сравнив таблицы из разных источников обнаружил что они между собой имеют гораздо больший разброс, чем доступная мне точность апроксимации по этим данным. По этому пришел к решению не брать апроксимирующий полином слишком высокого порядка, что бы не собирать из исходных данных шумы, а усреднив между собой данные из трех источников получить полином шестой степени, дающий вполне приличную точность.
Для отрицательных температур данных мало, по этому было достаточно ограничится полиномом третьей степени.
' P - давление а Bar (1bar=100kPa)
Function P0(Tk As Double) As Double
' Перводим °К в °С
t = Tk - 273.15
' Первое привлижение
E0 = 0.0061121
A = 17.098428005
B = 4044.885681855
C = -36.25414429
Y = E0 * Exp(A - B / (C + Tk))
If t > 0 Then
' Уточнение для 0°C < T
A0 = -0.02357643
A1 = 0.0006044520316
A2 = 0.000002658008544
A3 = -7.713038132E-08
A4 = 4.117188134E-10
A5 = -9.237402453E-13
A6 = 7.972080679E-16
Else
' Уточнение для T < 0°C
A0 = -0.028251223
A1 = -0.00002687958817
A2 = -0.00002541191143
A3 = -6.171027571E-07
A4 = 0
A5 = 0
A6 = 0
End If
dY1 = A0 + A1 * t + A2 * t ^ 2 + A3 * t ^ 3 + A4 * t ^ 4 + A5 * t ^ 5 + A6 * t ^ 6
P0 = Y + dY1 * Y
End Function
Диапазон температур -10°С ... +374°С
Давление в бар, 1бар=100кПа
Очередное уточнение, чтоб не потерялось.
Ничем не лучше других, но записана немного по другому.
Сама формула очень простая:
P = Exp( 11.865588387 - 3943,639903203 / (T + 232.525533603) )
Но в таком виде точность получается не очень высока.
Полином шестой степени разбитый на 5 поддиапазонов дает поправки к основной формуле
обеспечивая в результате точность превосходящую шум исходных данных.
Скрытый текст
Function PT(T As Double) As DoubleDim A6 As Double: A6 = 0
Dim A5 As Double: A5 = 0
Dim A4 As Double: A4 = 0
Dim A3 As Double: A3 = 0
Dim A2 As Double: A2 = 0
Dim A1 As Double: A1 = 0
Dim A0 As Double: A0 = 0.0027
If T > 312 Then
A6 = -2756018.14306641
A5 = 7930387.40726493
A4 = -9507901.0540747
A3 = 6079529.55482278
A2 = -2186669.29596193
A1 = 419480.276731174
A0 = -33532.011335622
GoTo lExit
End If
If T > 173 Then
A6 = -620.430668398737
A5 = 2322.05929111314
A4 = -3632.76524966061
A3 = 3044.51872007541
A2 = -1443.3557816625
A1 = 367.335226327043
A0 = -39.2112927854782
GoTo lExit
End If
If T > 55 Then
A6 = 7.86542821675539
A5 = -33.4143113679987
A4 = 55.7009622186928
A3 = -45.3833779620563
A2 = 18.1722685936802
A1 = -3.05413945092859
A0 = 0.114346323162502
GoTo lExit
End If
If T > 0 Then
A6 = 6.82475701719522
A5 = -41.0849139790453
A4 = 102.945694607551
A3 = -138.294823551731
A2 = 105.581498616194
A1 = -43.5298080667574
A0 = 7.55858000771691
GoTo lExit
End If
lExit:
Dim x As Double: x = 273 / (T + 232.525533603)
Dim d As Double: d = A6 * x ^ 6 + A5 * x ^ 5 + A4 * x ^ 4 + A3 * x ^ 3 + A2 * x ^ 2 + A1 * x + A0
PT = 11.865588387 - 14.445567411 * x - d
End Function
Добавлено через 3дн. 22ч. 59мин.:
Итак, докладываю состоянии дел на ниве поиска "абсолютно точной формулы"...
Надыбал данные для давления пара над поверхностью переохлажденной воды,
аж до -85°С и формулу имени немецких физиков моделирующую испарение жидкой и твердой воды до -100°С.
http://cires1.colorado.edu/~voemel/vp.html
Так же надыбал матерую буржуйскую статью про свойства воды: IAPWS_1995.pdf
Поизучав разные статьи пришел к выводу что очень сильно точно формулы в природе не существует,
есть алгоритм написанный на Fortran77 который моделируя термодинамические уравнения может получать нужные точки с довольно высокой точностью.
Есть несколько формул позволяющие в разных диапазонах получать точность апроксимации до 0.01%.
Но самая печаль - сравнив таблицы из разных источников обнаружил что они между собой имеют гораздо больший разброс, чем доступная мне точность апроксимации по этим данным. По этому пришел к решению не брать апроксимирующий полином слишком высокого порядка, что бы не собирать из исходных данных шумы, а усреднив между собой данные из трех источников получить полином шестой степени, дающий вполне приличную точность.
Для отрицательных температур данных мало, по этому было достаточно ограничится полиномом третьей степени.
Скрытый текст
' Tk - температура в °К' P - давление а Bar (1bar=100kPa)
Function P0(Tk As Double) As Double
' Перводим °К в °С
t = Tk - 273.15
' Первое привлижение
E0 = 0.0061121
A = 17.098428005
B = 4044.885681855
C = -36.25414429
Y = E0 * Exp(A - B / (C + Tk))
If t > 0 Then
' Уточнение для 0°C < T
A0 = -0.02357643
A1 = 0.0006044520316
A2 = 0.000002658008544
A3 = -7.713038132E-08
A4 = 4.117188134E-10
A5 = -9.237402453E-13
A6 = 7.972080679E-16
Else
' Уточнение для T < 0°C
A0 = -0.028251223
A1 = -0.00002687958817
A2 = -0.00002541191143
A3 = -6.171027571E-07
A4 = 0
A5 = 0
A6 = 0
End If
dY1 = A0 + A1 * t + A2 * t ^ 2 + A3 * t ^ 3 + A4 * t ^ 4 + A5 * t ^ 5 + A6 * t ^ 6
P0 = Y + dY1 * Y
End Function
Kotische
Академик
Саратов
8.1K 2.5K
Отв.199 12 Июня 19, 02:06
Аналогичные манипуляции проделал над данными по спирту.
Таблица с исходными значениями давлений насыщенных паров взята из Стабникова
' P - давление а Bar (1bar=100kPa)
Function P00(t As Double) As Double
' Первое приближение
A = 11.783131771
B = 3559.413361371
C = 223.96701108
Y = Exp(A - B / (t + C))
' Уточнение
A0 = -0.039459652
A1 = 0.0004241361721
A2 = 3.770521489E-07
A3 = 3.896502924E-08
A4 = 7.40028511E-11
A5 = -6.478741574E-12
A6 = 2.623470004E-14
A7 = 8.003394648E-17
A8 = -6.295206869E-19
A9 = 9.578709646E-22
dY = A0 + A1 * t + A2 * t ^ 2 + A3 * t ^ 3 + A4 * t ^ 4 + A5 * t ^ 5 + A6 * t ^ 6 + A7 * t ^ 7 + A8 * t ^ 8 + A9 * t ^ 9
P00 = Y + dY * Y
End Function
Таблица с исходными значениями давлений насыщенных паров взята из Стабникова
Скрытый текст
' t - Температура °С' P - давление а Bar (1bar=100kPa)
Function P00(t As Double) As Double
' Первое приближение
A = 11.783131771
B = 3559.413361371
C = 223.96701108
Y = Exp(A - B / (t + C))
' Уточнение
A0 = -0.039459652
A1 = 0.0004241361721
A2 = 3.770521489E-07
A3 = 3.896502924E-08
A4 = 7.40028511E-11
A5 = -6.478741574E-12
A6 = 2.623470004E-14
A7 = 8.003394648E-17
A8 = -6.295206869E-19
A9 = 9.578709646E-22
dY = A0 + A1 * t + A2 * t ^ 2 + A3 * t ^ 3 + A4 * t ^ 4 + A5 * t ^ 5 + A6 * t ^ 6 + A7 * t ^ 7 + A8 * t ^ 8 + A9 * t ^ 9
P00 = Y + dY * Y
End Function