Утилита для подсчёта площади пика
От: Khimik  
Дата: 21.02.22 14:34
Оценка: -1 :)))
В некоторых задачах имеется график какой-то функции и требуется подсчитать площадь пика на этом графике. Наверно это есть в последних Excel/Origin, но я предполагаю, что не все научные сотрудники имеют эти последние версии; кроме того, эти утилиты могут быть не очень удобными или недостаточно интуитивно-понятными. Поэтому я решил сделать такую утилиту в своей программе:



Кому интересно, предлагаю скачать мою программу и протестировать эту утилиту:

https://chemcraftprog.com/files/Chemcraft_b618b_win64.zip

“Tools/Utilities for working with custom graphs\Graph analyzer”

Моя задача была в том, чтобы утилита получилась максимально удобной и при этом понятной с первого взгляда. Пользователь через Clipboard вводит x и y значения своей функции в текстовом формате, переходит к вкладке графика, далее строит 2 или 4 опорные точки, по которым подсчитывается линия фона, и программа строит эту линию и считает площадь пика как разность между интегралами исходной функции и линии фона.
Если линия фона проводится по двум точкам, то программа линейно их интерполирует, если по четырём, то строится полином 3-й степени.
Отдельный вопрос – как корректно считать интеграл функции, заданной в виде таблицы. Можно считать площадь графика, подразумевающего линейную интерполяцию между соседними точками, а можно просто принять что каждая точка – это цилиндр с толщиной, равной размеру шага по X:



На первый взгляд кажется, что первый способ точнее, но при линейной интерполяции полученный интеграл будет всегда занижать площади пиков, т.к. линейная интерполяция всегда “проваливается” сквозь гладкие пики. Вроде со вторым методом подсчёта этой систематической ошибки не будет? В любом случае это не очень принципиально, т.к. моя программа сглаживает функцию: каждый интервал между соседними точками разбивается на 20 меньших интервалов, и в них проводится интерполяция сплайном. Но хотелось бы узнать, какой подход методически корректнее.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re: Утилита для подсчёта площади пика
От: SergeyIT Россия  
Дата: 21.02.22 15:08
Оценка: +1
Здравствуйте, Khimik, Вы писали:

K>В некоторых задачах имеется график какой-то функции и требуется подсчитать площадь пика на этом графике...


Извини, но я ничего не понял...
Извините, я все еще учусь
Re: $25K
От: graniar  
Дата: 21.02.22 16:03
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Кому интересно, предлагаю скачать мою программу и протестировать эту утилиту:


А $25K не хочешь?

Тут, на правах конкурса, предлагают за нечто связанное.
(Сам в детали не вникал, дедлайн через 2 недели)
Re: Утилита для подсчёта площади пика
От: Chorkov Россия  
Дата: 21.02.22 17:04
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Отдельный вопрос – как корректно считать интеграл функции, заданной в виде таблицы.


Никак. Без априорных предположений о природе данных, оценить ошибку интегрирования по таблице — невозможно.
Поэтому, невозможно выбрать между методом трапеций и методом средних (еще формулы Симпсона посмотри).

Все функции интегрирования в научных библиотеках принимают на вход — функцию Y(X).
Без этого — невозможно оценить ошибки интегрирования.

Если исходные данные — экспериментальные, то нужна информация об аналитической модели и погрешностях измерений.
Как правило, пытаются подогнать модель (вводят дополнительные параметры, если не хватает просто неизвестных величин), и потом интегрируют аналитическую функцию.

Например, для констант скорости хим. реакций (зависимость константы скорости от температуры), как правило, делают замены координат X1=1/T, X2=ln(T), Y=ln(K)
подгоняют точки полиномом Y=P(X1,X2), и возвращающийся к исходным K(T) = exp( P(1/T, ln(T)) ) — так получается гораздо точнее чем строить полином K(T).
Re[2]: Утилита для подсчёта площади пика
От: Khimik  
Дата: 21.02.22 17:27
Оценка:
Здравствуйте, Chorkov, Вы писали:

C>Если исходные данные — экспериментальные, то нужна информация об аналитической модели и погрешностях измерений.

C>Как правило, пытаются подогнать модель (вводят дополнительные параметры, если не хватает просто неизвестных величин), и потом интегрируют аналитическую функцию.

А совокупность сплайнов можно назвать аналитической функцией?
Исходные данные — набор точек: x1, x2, x3,... и y1, y2, y3... Когда по такому набору рисуют график, обычно строят линейную интерполяцию, т.е. в интервале между x1 и x2 задаётся функция y=y1+(x-x1)*(y2-y1)/(x2-x1). Если x=x1 -> y=y1, если x=x2 -> y=y2. Более продвинутый вариант — строить сплайн, т.е. между каждыми соседними точками строится маленький полином с учётом следующих слева и справа точек. Сплайн можно проинтегрировать аналитически; мне это было трудно, поэтому я разбил каждый интервал на 20 точек и его проинтегрировал численно. Можно было бы взять не 20 точек, а например 50, 100 — чем больше тем ближе к аналитическому решению.

C>Например, для констант скорости хим. реакций (зависимость константы скорости от температуры), как правило, делают замены координат X1=1/T, X2=ln(T), Y=ln(K)

C>подгоняют точки полиномом Y=P(X1,X2), и возвращающийся к исходным K(T) = exp( P(1/T, ln(T)) ) — так получается гораздо точнее чем строить полином K(T).

Не очень понял, тут речь о трёхмерных графиках (два x и одно y)? У меня пока задача относительно простая — двумерный график.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[2]: $25K
От: Khimik  
Дата: 21.02.22 17:31
Оценка:
Здравствуйте, graniar, Вы писали:

G>Здравствуйте, Khimik, Вы писали:


K>>Кому интересно, предлагаю скачать мою программу и протестировать эту утилиту:


G>А $25K не хочешь?


G>Тут, на правах конкурса, предлагают за нечто связанное.

G>(Сам в детали не вникал, дедлайн через 2 недели)

Немного непонятный запрос: разве интегрирование численной функции — не банальная задача? Хотя там написано что нужно автоматически идентифицировать границы пика; мне кажется, эта задача почти нерешаемая, поскольку с реальными данными, например спектрами, пик может располагаться на самом разном фоне (на краю склона и т.д.), поэтому у меня пользователь строит линию фона вручную. А чтобы эту задачу автоматизировать, нужно более понимать с какой функцией имеешь дело.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[3]: Утилита для подсчёта площади пика
От: Chorkov Россия  
Дата: 21.02.22 18:19
Оценка: 5 (1)
Здравствуйте, Khimik, Вы писали:

K>Здравствуйте, Chorkov, Вы писали:


C>>Если исходные данные — экспериментальные, то нужна информация об аналитической модели и погрешностях измерений.

C>>Как правило, пытаются подогнать модель (вводят дополнительные параметры, если не хватает просто неизвестных величин), и потом интегрируют аналитическую функцию.

K>А совокупность сплайнов можно назвать аналитической функцией?


Можно. Но это так себе модель в большинстве практических случаев. Нужна информация именно из предметной области.

Сплайны — очень плохо переносят разрывы. Некоторые виды сплайнов сильно шумят, даже в дали от разрыва.
Кроме того, плохо переносят "плато разных масштабов" (и, неважно, как гладко они сшиты). Есть и другие недостатки.


K>Исходные данные — набор точек: x1, x2, x3,... и y1, y2, y3... Когда по такому набору рисуют график, обычно строят линейную интерполяцию, т.е. в интервале между x1 и x2 задаётся функция y=y1+(x-x1)*(y2-y1)/(x2-x1). Если x=x1 -> y=y1, если x=x2 -> y=y2. Более продвинутый вариант — строить сплайн, т.е. между каждыми соседними точками строится маленький полином с учётом следующих слева и справа точек. Сплайн можно проинтегрировать аналитически; мне это было трудно, поэтому я разбил каждый интервал на 20 точек и его проинтегрировал численно. Можно было бы взять не 20 точек, а например 50, 100 — чем больше тем ближе к аналитическому решению.


В крайнем случае — симпсоном. (Если число точек в методе симпсона, больше степени полинома, то ответ совпадет с аналитической моделью — точно.)



C>>Например, для констант скорости хим. реакций (зависимость константы скорости от температуры), как правило, делают замены координат X1=1/T, X2=ln(T), Y=ln(K)

C>>подгоняют точки полиномом Y=P(X1,X2), и возвращающийся к исходным K(T) = exp( P(1/T, ln(T)) ) — так получается гораздо точнее чем строить полином K(T).

K>Не очень понял, тут речь о трёхмерных графиках (два x и одно y)? У меня пока задача относительно простая — двумерный график.


Я думал, как химику, эта предметная область понятна.
Здесь график оной переменной K(T). (Экспериментальные точки.)
Аналитические формулы для этой зависимости разные:

K(T) = A* T^(1/2) * exp( — Ea/R/T ) — теория Арениуса
K(T) = A* T^(3/2) * exp( — Ea/R/T ) — теория переходного комплекса
...

Обобщаем в виде:
K(T) = A* T^n * exp( -(Ea/R)/T )
Где A, n, (Ea/R) — подгоночные параметры.

Для того чтобы заменой переменных привести эту формулу к полиному — приходится вводить две переменных (X) вместо одной (T), (с одной переменной никак не развернуться).

ln(K(T)) = ln(A) + n*ln(T) + (-Ea/R) *(1/T)
= P( ln(T), 1/T )

Где P — полином двух переменных.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.