Интересный, с моей точки зрения, вид номограмм. Номограммы с переломом. Т.е. есть некая функциональная зависимость места резкого изменения характеристики. В качестве примера - простой вариант если искать решение как для обычных номограмм, а именно взять значения до и после и решить через пропорцию, то результат будет ошибочным. Например требуется построить (узнать значение) для Х2 = 3. (изначально заданы кривые при Х2 = 2, 4, 6, . Найдём точку при Х1=10 Х2=3. Искомое между Х2=2 и Х2=4. Здесь и далее для упрощения кусочно линейно интерполирую. Х1=10 Х2=2 => Y = 9 Х1=10 Х2=4 => Y = 6.33 (общий наклонный участок) Через пропорцию Х1=10 Х2=3 => Y = 7.66 Просчитывая другие точки получаем линию Х2 = 3 (красный пунктир) Очевидно что решение не верное-кривая Х2 = 3 должна отходить от общей линии начиная с Х1 = 10.5. Верные значения начинаются для значений с Х1=12, т е. с момента начала отхода кривой Х2=4 от общей линии. Для устранения этого казуса можно разбить номограмму на две: общий участок и отходящие затем для каждой из частей ищем решение (строим две кривые для искомого Х2) И результат будет максимум (в данном случае вогнутого вида номограммы) из двух решений
В качестве примера привёл простой вариант. Существуют более сложные зависимости, которые так же нельзя решать простым способом. В частности эта особенность номограмм характеристик эжекторов и не только. Автоматизацию создания макросов для Г-образных номограмм показывал тут https://rutube.ru/video/280dd5afa3efab15d7f6d0ca4f9fef46/?r=wd
Kotyn, Для такого тапа номограмм (тип воронка) скорее всего не выйдет. Применяйте тип линейчатой номограммы - там можно брать значения из сторонних ячеек
Public Function pos4itat(txt As String) As Variant
Dim rez As String: rez = ""
Dim i As Long
On Error GoTo ErrHandl
For i = 1 To Len(txt)
simv = Mid(txt, i, 1)
If simv Like "[0-9,x,х,.,*,chr(44)]" Then
If simv = "х" Or simv = "x" Then simv = "*"
If simv = "," Then simv = "."
rez = rez & simv
End If
Next i
pos4itat = Evaluate(rez): Exit Function
ErrHandl: pos4itat = "Ошибка исходных данных."
End Function
Изменено: tutochkin - 10.05.2025 13:55:14(х и x это две разные х... :))
Ronin71, ну так и задумано. Сие видно сразу (хотя не факт...). Полезут исправлять, исправят и... и остальное (корректировки работы макросов) оставят. А что не правильно стало работать - так тут сразу и не поймёшь, народ успокоился... а как поймут спустя время - так сами в код лезали, вдруг что сами напортачили.
А что "не факт", так листы изначально можно сделать "суперскрытыми" (по умолчанию, и при закрытии файла), и макрос при нормальном процессе работы их переводил в видимый формат. При ненормальном - удалял.
Но опять же - это всё баловство, и мелкие пакости. Если заказ - то 100% предоплата. Или договор, если сумма значима. Иначе - спасибо, приходите ещё. ПыСы может я и не прав.
Ronin71, ну тема не нова... Однако 1. Чтобы макрос сам удалил модули нужны определённые права на машине где файл запущен, если я правильно помню. 2. Если есть возможность запустить/открыть без выполнения макросов (а открывать можно и не в МSO), то при наличии опыта и желания можно "вылечить" зловредность.
Для себя понял что сделать коммерческий продукт с возможностью лицензий и т.д. фактически не реально (либо трудозатраты на защиту будут выше чем на сам проект собственно).
А так... В качестве "пакости" можно: 1. Корректировка результатов работы программы. Уж в языке М замена пары символов может привести к очень интересным результатам... 2. Несохранение результата, или сохранение с корректировкой рандомной. Либо заменой всех (или не всех...) формул на листах на значения...
Опять же - это лечится, но ... но "работает не верно" совсем не то же что "не работает".
Впрочем это не более чем мысли в слух, ибо разработкой проектов на заказ не занимаюсь. Хотя свои наработки по работе стал таким макаром шифровать, а то поток "временных" работников велик, и не хочу раздавать своё в сторонние организации. Как сделать - показываю. Хотят сделать сами - ноу проблем. Иначе через некоторое время получают что то вроде этого
Глянул старый косяк - неадекватность работы с графиками (что в Р7 что в ОО) Кто хочет - может проверить. Исходные данные на листе. График точечный 1. Шкала в настройках не соответствует шкале графика 2. Никаким боком не выйдет поставить шкалу с третьим знаком после запятой (например 0.011...)
Т.к. я много работаю с номограммами мне это очень важно. Про сие писал более года назад на почту Р7 и... и всё как было.
sokol92, если послушать доклад, что по ссылке выше, или почитать чат в телеге, то выяснится что не в этом трабла. Основная проблема что поведение меняется в зависимости от версии Р7. Т.е. "раньше при вставке преобразовывалось в дату, теперь в текст " (с). Что будет потом никто не скажет.
ПыСы ставить себе несколько версий Р7 и отслеживать что где как, являясь по сути бетатестером за свои деньги, желания нет. И я с ужасом жду обязания перехода на это поделие.
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.
написал: Конечно из-за полученных величин проверить корректность напрямую в эксель невозможно, но принцип простой - от степенной функции перешли к линейной, для которой определили методом минимума среднего квадрата ошибки параметры, потом вернулись к степенной функции
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.
Ну есть вариант - аппроксимировать полиномом, и по известной формуле прямой проходящей через точку х0 Yk(x) = Y(x0) + Y`(x0)·(x - x0) Взять производную от полинома вообще не проблема.
И да "линия тренда не проходит через все точки", но у вас точки как среднее по измерениям. Аппроксимирующий полином с достоверностью R2 > 0.99 более чем достаточен. Если есть желание "вот прям надо чтоб проходил" - берите аппроксимацию по 4-м точкам (2 из которых слема, а 2 справа от заданного х0). Всяко будет проще сплайна. А уж как сплайн может изогнуться, это пестня...
Ну а по тем данным что в первом посте уравнение касательной вот. Не совсем красиво для последнего участка, но какие данные есть, такая и касательная
Код
' Макрос создан в Быстрофункции v3.08.xlsm
' Относительное сжатие грунта
' Уравнение касательной к графику в точке Р0
Public Function Относительное_сжатие_kasat(Р As Double ,Р0 As Double)
Относительное_сжатие_kasat = -107.980615199578 * Р0 ^ 6 + 174.284920333581 * Р0 ^ 5 -111.451156391761 * Р0 ^ 4 + 36.4272604523785 * Р0 ^ 3 -6.61049382304943 * Р0 ^ 2 + 0.707825800602692 * Р0 + 5.41782013762093E-05 + _
(-647.883691197467 * Р0 ^ 5 + 871.424601667907 * Р0 ^ 4 -445.804625567044 * Р0 ^ 3 + 109.281781357136 * Р0 ^ 2 -13.2209876460989 * Р0 + 0.707825800602692) * (Р - Р0)
End Function
Линия тренда. Настройка степенной аппроксимации. Как изменить степень в уравнении?, Нужно изменить степень уравнения, чтобы коэффициент перед был не ноль.
Да, действительно есть косяк с расчётом плотности. Надо UDF заменить на
Function ro_tx(ByVal t, ByVal x) ro_tx = 1 / ((1 - x) * 1 / ro1_p(p_t(t)) + x * 1 / ro2_p(p_t(t))) End Function
Но за все годы я ни разу не считал плотность влажного пара - всегда удельный объём, посему не натыкался на такое. По границам: максимальное отклонение в диапазоне температур 10...373°С по удельному объёму порядка 3·10-10, что меня более чем устраивает. Сравнивал с результатами watersteampro (программа прошедшая проверку на соответствие, рекомендованная для использования в энергетике и т.
Изменено: tutochkin - 17.03.2025 08:41:22(Не тот файл прицепил изначально)
Belverk, ну если быстро, то советую глянуть простую форму ввода без надстроек и кода - https://dzen.ru/a/YcLOyvuFPSySBQ7P А так - у вас две операции: 1. Чтение с листа в форму. Условно TextBox1.Value = Cells(Row,1).Value. И это вы сделали. Ну или почти сделали Осталось форму запустить. 2. Запись из формы на лист. Условно Cells(Row,1).Value = TextBox1.Value И для этого нужна ещё одна кнопка на форме - записать с формы на лист.
Создать формулу, которая будет выводить значения на пересечении строк и столбцов, Формула, выводящая значения, полученные про помощи комбинации пересечения строк и столбцов