Страницы: 1
RSS
Выбор температурной поправки, Выбор температурной поправки из диапазонов плотности (от мин и до мах значения)
 
Здравствуйте форумчане,
прошу помощи в решении такой задачки

например в ячейку ввожу плотность 0,6501 и температуру 15

она лежит в диапазоне А2:В2 те в диапазоне от 0,6500 до 0,6590
тогда нужно присвоить соответствующее значение поправки С2 те 0,000962 или найти другое соответствующее если плотность другая

и рассчитываю плотность при 20 градусах по формуле =0,6501(плотность которую ввели)+0,000962(поправка)*(15(введенная нами температура)-20(температура 20))

т.е =0,6501+0,000962*(15-20) должно получится 0,64529

если такого диапазона нет например число 0,5999 или 1,0100 то выдать сообщение неправильный ввод плотности

за ранее спасибо
Плотность   при 20 °С отПлотность при   20 °С доТемпературная   поправка на 1 °С
0,65000,65900,000962
0,66000,66900,000949
0,67000,67900,000936
0,68000,68900,000925
0,69000,69990,00091
0,70000,70990,000897
0,71000,71990,000884
0,72000,72990,00087
0,73000,73990,000857
0,74000,74990,000844
0,75000,75990,000831
0,76000,76990,000818
0,77000,77990,000805
0,78000,78990,000792
0,79000,79990,000778
0,80000,80990,000765
0,81000,81990,000752
0,82000,82990,000738
0,83000,83990,000725
0,84000,84990,000712
0,85000,85990,000699
0,86000,86990,000686
0,87000,87990,000673
0,88000,88990,00066
0,89000,89990,000647
0,90000,90990,000633
0,91000,91990,00062
0,92000,92990,000607
0,93000,93990,000594
0,94000,94990,000581
0,95000,95990,000567
0,96000,96990,000554
0,97000,97990,000541
0,98000,98990,000528
0,99001,00000,000515
Изменено: badiv - 06.07.2018 08:10:10
 
Привет. Проверяйте:
=D1+ВПР(D1;$A$2:$C$36;3;1)*(E1-E2)
Или так с сообщением о неверных данных:
=ЕСЛИОШИБКА(D1+ВПР(D1;$A$2:$C$36;3;1)*(E1-E2);"Нет такой плотности")
Изменено: Bema - 06.07.2018 08:25:02
Если в мире всё бессмысленно, — сказала Алиса, — что мешает выдумать какой-нибудь смысл? ©Льюис Кэрролл
 
Цитата
badiv написал:
если такого диапазона нет например число 0,5999 или 1,0100 то выдать сообщение неправильный ввод плотности
Код
=ЕСЛИ(ИЛИ(D1<$A$2;D1>$B$36);"неправильный ввод плотности";D1+ВПР(D1;$A$2:$C$36;3)*(E1-E2))
Изменено: Казанский - 06.07.2018 08:21:50
 
Цитата
Bema написал:
=ЕСЛИОШИБКА(D1+ВПР(D1;$A$2:$C$36;3;1)*(E1-E2);"Нет такой плотности")
почему то все равно считает и не выдает ошибку
а так все работает)
 
Цитата
Казанский написал:
1=ЕСЛИ(ИЛИ(D1 $B$36);"неправильный ввод плотности";D1+ВПР(D1;$A$2:$C$36;3)*(E1-E2))
все работает)
 
Спасибо большое Всем очень помогли  :)  
 
Уточнение (в смысле - занудство  :) )
Единственная (в одной ячейке) формула:
Плотность_при_20_градусах = Плотность_при_температуре + Поправка * (Температура - 20)
- это только первое приближение - поправка берётся из таблицы для плотности жидкости при 20°С !
Но эта поправка была найдена для плотности при заданной температуре.
Если температура значительно отличается от 20 градусов, то результат будет не точным.
Необходимо найти поправку для вычисленной (в первом приближении) Плотности_при_20_градусах,
и пересчитать по формуле в другой ячейке, повторить в третьей, и т.д.,
пока абсолютная разность последнего и предыдущего рассчитанных значений плотности не станет меньше 0,0001 .
 
Цитата
С.М. написал:
то результат будет не точным
Здравствуйте, да совершенно верно Вы подметили... вижу ошибку...но трудно реализовать как то в моем журнале нужно чтоб в одной ячейке все считало... :(

подскажите Вы где то (я натыкался на форуме) работали над формулой пересчета плотности
как получилась рабочая версия?
можно попросить?
 
Цитата
Вадим написал:
да совершенно верно ... вижу ошибку
Ну, заметная разница - если температура отлична от 20 на больше ± 15 градусов.
Цитата
Вадим написал:
реализовать как то в моем журнале нужно чтоб в одной ячейке все считало
В одной ячейке - только функцией-макросом (UDF) :
Код
Function ПлотностьНП20(Температура As Double, Плотность As Double)
    Const A0 As Double = 1.82568067226891E-03
    Const A1 As Double = -1.3175350140056E-03
    Dim D1 As Double, D2 As Double, B As Double, I As Long
    D1 = Плотность
    For I = 1 To 5
        B = A0 + A1 * D1
        D2 = Плотность + B * (Температура - 20)
        If Abs(D2 - D1) < 0.00001 Then Exit For
        D1 = D2
    Next
    If I <= 5 Then
        If B <= 0.000976 And B >= 0.000501 Then ПлотностьНП20 = D2 Else ПлотностьНП20 = "неправильный ввод плотности"
    Else
        ПлотностьНП20 = CVErr(xlErrValue)
    End If
End Function
Что хорошо - таблица на листе не нужна - она "зашита" в коэффициентах A0, A1.
Изменено: С.М. - 08.07.2018 15:22:05
 
Вариант с использованием итеративных вычислений.
 
Цитата
gling написал:
Вариант с использованием итеративных вычислений
Раз пошла такая пьянка (с)(с)  :)
Цитата
С.М. написал:
В одной ячейке - только функцией-макросом (UDF)
Опять я ошибся  :(  - можно и без макроса, формулой в одной ячейке (или ячейках столбца),
учитывая, что достаточно (в этом случае) трёх итераций :
 
Цитата
С.М. написал:
Что хорошо - таблица на листе не нужна - она "зашита" в коэффициентах A0, A1.
Спасибо всем за помощь
пробую переместить на рабочий вариант...
почему то сразу после перемещения в ячейке присваивается имя
вроде все просмотрел
все также
 
Вадим, попробуйте на вкладке 'Данные'--> 'Подключения'-->'Изменить связи', в диалоге нажать 'Изменить...' и выбрать мой файл на вашем компе.
 
Цитата
С.М. написал:
Изменить связи
там пусто, получается нет связей
вроде все просмотрел... есть только обновить все
может в другом ошибка?
скидываю на всякий мой рабочий файл журнал


https://yadi.sk/d/CBGeSd8T3Ywc8Y
 
Вадим, а зачем Вы мою функцию (в вашем файле) в модуль листа (Svodnaya) запихнули ?
Функция должна жить в стандартном модуле !
У Вас два модуля (Module2 и Module3) никем не заселённые - пустые. Аренда помещений дорогая ?
 
Цитата
С.М. написал:
Аренда помещений дорогая ?
упс)
сейчас попробую исправить :)  
 
я просто сначала подстроил Ваш вариант под сводную
а потом как не получилось так вставил Вашу вкладку для удобного поиска ошибки
 
Цитата
С.М. написал:
У Вас два модуля (Module2 и Module3)
Спасибо еще раз  всем за помощь, все работает
только добрался до сайта
Страницы: 1
Наверх