Перегиб графика в каком пакете можно оценить численно?

WYRASUK

перегиб графика в каком пакете можно оценить численно? например такого:

Nitochka

А по трем точкам никак? Или сделай какую-нибудь аппроксимацию параболой этого замечательного местечка. Эксель вроде умеет

Myauto

В Origin-е можно.

k11122nu

> Эксель вроде умеет
Если данные есть в виде таблицы, то решение элементарно в любом пакете работы с таблицами

WYRASUK

А по трем точкам никак
можно, но больше привлекает наличие в пакете различных разностных схем

WYRASUK

Если данные есть в виде таблицы, то решение элементарно в любом пакете работы с таблицами
да в виде таблицы
какое решение?

WYRASUK

классная прога - разобраться бы в ее возможностях

k11122nu

> да в виде таблицы
> какое решение?
Делаешь третий столбец: [3,i] = ([2,i] - [2,i-1]) / ([1,i] - [1,i-1])
И третий столбец: [4,i] = ([3,i] - [3,i-1]) / ([1,i] - [1,i-1])
Третий столбец и есть третья вторая производная
>> А по трем точкам никак
> можно, но больше привлекает наличие в пакете различных разностных схем
Тебе не нужны разностные схемы. Если дана таблица с точками, то самый надежный метод - тупое вычисление "по трем точкам". Можно немного поиграть с коэффициентами для пущей гладкости (например, не такие коэффициенты, как в вышеприведенных формулах, а другие но самый точный метод именно такой. Если ты доверяешь точкам таблицы, то лишь самый прямой метод позволяет сохранить всю надежность. (Другое дело, что если точки даны с некоторой погрешностью, а ты предполагаешь, допустим, хорошую гладкость, то могут помочь другие методы).

WYRASUK

Делаешь третий столбец: [3,i] = ([2,i] - [2,i-1]) / ([1,i] - [1,i-1])
И третий столбец: [4,i] = ([3,i] - [3,i-1]) / ([1,i] - [1,i-1])
Третий столбец и есть третья вторая производная
вообще так сначала и сделал - но производная осциллирует не знаю почему. вот так:

нужен перегиб очерченный желтым эллипсом

k11122nu

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

WYRASUK

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

1. вручную выделять не хочу - хочу чтобы алгоритм сам находил макс перегиб эмпирической кривой
2. какого вида кривая получится - хз. и зачем аппроксимировать если нужен сам ряд.
значит, исходные данные содержат погрешность

в каком смысле погрешность? ряд ранжирован. вот думаю скорее всего проблема в том что аргумент функции определен в множестве целых - т.е. есть как положительные так и отрицательные значения.

svetik5623190

Аппроксимируй Б-сплайном, потом его два раза продифференцируй. Должно получиться получше.
Кстати стоит понимать, что данные из воздуха взять невозможно. Поэтому если у тебя есть только две точки, например, то вторую производную вообще нельзя опрелделить в принципе. Если точки стоят редко - будет большая погршность и т.д.
Варианты:
1. сделать несколько измерений, т.е. получить несколько кривых, результат усреднить, потом считать производную. Кстати учти если сетка неравномерная то формулы нужно вывдить заново для каждых трёх (или по скольки ты там аппроксимируешь) заново.
2. Из физических соображений добавить кучу точек вручную - если ты знаешь как идёт процесс то справишься без труда, хотя это попахивает подтасовкой конечно, но всё же поможет ОЦЕНИТЬ вторую производную
3. твой вариант. Стандартные численные схемы зачастую не работают и нуждаются в адаптации. Численные методы - вещь творческая.

WYRASUK

Аппроксимируй Б-сплайном.... и в принципе сплайны

- где про них ознакомиться так чтобы на пальцах объяснялось применение?
Поэтому если у тебя есть только две точки, например, то вторую производную вообще нельзя опрелделить в принципе. Если точки стоят редко

точек достаточно для 2й производной
1. сделать несколько измерений, т.е. получить несколько кривых, результат усреднить, потом считать производную. Кстати учти если сетка неравномерная то формулы нужно вывдить заново для каждых трёх (или по скольки ты там аппроксимируешь) заново.

это для эксперимента работает.. а вот с неравномерной сеткой... она неравномерная только ординате - абцисса с равномерной сеткой.
2. Из физических соображений добавить кучу точек вручную

скорее выпадающие точки убрать.. хотя тоже не понятно как - ряд то ранжированный по ординате =(
твой вариант. Стандартные численные схемы зачастую не работают и нуждаются в адаптации. Численные методы - вещь творческая.

ппц обрадовал не видать мне легкой жизни

jenyav

попробуй построить функцию от x, определенную через координаты (x, y) точек кривой как
(y1 + y2x2 - x1) - (y1 + yx - x1) - (y + y2x2 - x)
(здесь (x1, y1) и (x2, y2) - координаты точек графика на концах интервала)
положение ее максимума должно соответствовать точке изгиба графика

seregaohota

Дык выложи уже куда-нибудь свою таблицу исходную в текстовом виде по 2 значения на каждой строчке: X пробел(ы) Y. Народ может поколдует чуток. Или в приват пошли. Если руки дойдут.

fhfoihjkjhgjy

Если есть исходные данные точек, то можно использовать программу CURVE из ACD/Labs.

WYRASUK

мне не один ряд считать - а автоматизировать процесс надоть

WYRASUK

что это такое есть?
x=F(x,y)=(y1 + y2x2 - x1) - (y1 + yx - x1) - (y + y2x2 - x)

seregaohota

Блин, ну я не знаю. Ясно что все ты сам будешь считать, может кто покажет как делать и тебя устроит. Мне если разберусь - быстрее программу на c++ накатать, чем тебе объяснять как это в экселе можно сделать. А то у меня нет уверенности, что ты не врёшь в формулах и тд. Я бы не сказал на том графике, что ты привёл со второй производной, что это функция с примерно постоянной второй производной. Не очень она мне случайные флуктуации в обе стороны относительно параболы напоминает.
Кроме того как я понял, тебе ведь похоже надо определить точку, в которой первая производная в среднем глобально резко изменилась. Ну кинь данные, если тебя интересует результат, ведь трудно определить где прокол просто по разговору вокруг да около в треде.
А то пока есть время, а бывает его резко может не стать. И у других людей наверное тоже. Я лучше вместо того, чтобы в Society трепаться что-нибудь с твоими данными покручу, и напишу варианты как бы я делал - а дальше ясен пень сам будешь делать.
PS Если не хочешь - как хочешь. Просто к любой теме интерес может пройти или ещё что - и останешься опять один на один с задачей. Гони данные короче.

jenyav

s(x) = 2s(x, y(x = (y1 + y2x2 - x1) - (y1 + yx - x1) - (y + y2x2 - x) -
удвоенная площадь треугольника с вершинами в точках (x1, y1 (x2, y2) и (x, y). (x, y) пробегает вдоль кривой. там, где высота треугольника максимальна - излом графика. высота любого треугольника связана с его площадью: s = ah/2. т.к. основание для всех треугольников с вершиной (x, y) общее - это отрезок, соединяющий точки (x1, y1) и (x2, y2 - то поиск наибольшей высоты можно заменить поиском наибольшей площади s(x) треугольника с незакрепленной вершиной (x, y). (максимум s(x) можно получить стандартным способом нахождения наибольшего элемента массива, без всякого дифференцирования.)

seregaohota

(y1 + y2x2 - x1) - (y1 + yx - x1) - (y + y2x2 - x)
Классная идея. Наверное это то, что нужно. Только если расписать это как векторное произведение векторов (что даёт на плоскости удвоенную ориентированную площадь треугольника)
(x-x1, y-y1)
и
(x2-x1, y2-y1)
то есть раскрывая определитель
(x-x1)*(y2-y1) - (x2-x1)*(y-y1)
то попроще будет. Но совпадает с твоим выражением и компьютеру лишние вычисления наверное без разницы.

WYRASUK

я правильно понял где находится произвольное (x; y)?

seregaohota

Нет. Где у тебя (x3, y3) это на самом деле (x2,y2)
А где у тебя (x2, y2) это на самом деле (x,y) - произвольная точка на графике.
(x1, y1) правильно

jenyav

Где у тебя (x3, y3) это на самом деле (x2,y2)
А где у тебя (x2, y2) это на самом деле (x,y) - произвольная точка на графике.
(x1, y1) правильно
да, речь шла об этом.

seregaohota

Если так понятнее будет.
Фактически (с точностью до постоянного множителя) то, что предлагается - это написать уравнение прямой, проходящей через крайние точки графика. Это будет
(x-x1) / (x2-x1) = (y-y1) / (y2-y1)
Когда перенесём всё в одну сторону:
(x-x1) / (x2-x1) - (y-y1) / (y2-y1) = 0
Но равно это нулю только когда точка с координатами (x,y) лежит на прямой, проходящей через концевые точки графика. Если взять
f(x,y) = (x-x1) / (x2-x1) - (y-y1) / (y2-y1)
и (x,y) произвольны, то ты получишь ориентированное расстояние от точки (x,y) до этой прямой, с точностью до множителя
sqrt( 1 / (x2-x1)^2 + 1 / (y2-y1)^2 )
Устроит ли тебя точка, которая на графике лежит и наиболее удалена от прямой, проходящей через концы графика?
В тех данных, что ты прислал, уравнение этой прямой, вернее f(x,y)*(x2-x1)*(y2-y1)
25.59*X - 6.556871446*Y + 83.96073886
Исходные данные

График f(x,y)*(x2-x1)*(y2-y1) - устроят тебя в качестве кандидатов на то, что ты ищешь точки, в которых f(x,y) близко к максимуму?

Вот ещё график исходных данных после логарифмирования ( x_n, ln(y_n) )

 Удалил ерунду, написанную тут раньше про параболу.

WYRASUK

спасибо теперь все понятно
да это то что нужно
этот метод стандартный и имеет название?

seregaohota

этот метод стандартный и имеет название?
Метод 'а с форум локал Спроси у него в привате. Вряд ли. Думаю он просто догадался, что тебе нужно и проще всего будет реализовать. Не забудь сослаться на него в списке литературы или в благодарностях.
Дело в том, что если бы у тебя данные ложились на 2 прямые, то этот метод как раз нашёл бы точку излома графика.
Можно в принципе написать уравнение ломаной и минимизировать расстояние до неё по методу наименьших квадратов, но это сложнее и потребуется какой-нибудь многомерный Ньютон. Можно даже гипотезы какие-нибудь альтернативные рассматривать и оценивать на каком-нибудь уровне значимости. Но наверное так сойдёт. Что зря огород городить. Одна из заповедей не усложняй.

WYRASUK

Одна из заповедей не усложняй.
во во
я тож так думаю
Метод 'а с форум локал - гыгы

jenyav

название
например, поиск точки излома графика средствами элементарной математики
точка излома здесь - точка, в которой функция непрерывна, но разрывна первая производная. т.е. если бы функция была гладкой, то этот способ не дал бы положения точек перегиба (и он скорее напоминал бы тот трюк с лекалом, у которого все линии при любом повороте в нижней точке имеют горизонтальные касательные:) если не все твои графики имеют вид, как на первой картинке, то, возможно, имеет смысл ввести критерий применимости этого способа. (такой критерий несложно составить, добавив пару проверок на зависимость результата от положения точки (x2, y2 например.)

WYRASUK

точка излома здесь - точка, в которой функция непрерывна, но разрывна первая производная

а как ты увидел что тут первая производная терпит разрыв? - по биению 2й производной? прикольна
такой критерий несложно составить, добавив пару проверок на зависимость результата от положения точки (x2, y2 например

а как выбрать масштаб?

jenyav

как ты увидел что тут первая производная терпит разрыв?

как выбрать масштаб?
масштаб незачем менять. предлагаю просто повторно вычислять положение точки излома, выбрав (x2, y2) вместо конца интервала точку, лежащую между прежним x2 и уже вычисленным положением точки излома. если отклонение вновь вычисленного положения от предыдущего будет превышать некоторое наперед заданное число (заданную точность то считать способ не применимым к данной кривой.

WYRASUK

ага - терь все ясно
большое пасипо
Оставить комментарий
Имя или ник:
Комментарий: