Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108

Найти экстремумы в ряде данных

31.08.2017, 14:18. Показов 8031. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, ситуация такая:
необходимо найти экстремумы в ряду данных.
Есть ряд данных , берем его из огромного массива, необходимо нарисовать график параболического тренда. То есть полином 2 степени. Находим формулу Полинома. и по ней с помощью статистической модели в виде неленейных полиномов ищем коэффициент регрессии. коэффициент регрессии находим по методу наименьших квадратов.
В общем задача состоит найти экстремум функции построенные по ряду данных. Но не известно будет экстремум какой по знаку по этому нужно узнать знак коефициента функции.

Пример данных приведен в ссылке.
Вообще интересны какие варианты могут быть варианты.
Вложения
Тип файла: txt TXT file (2).txt (11.8 Кб, 23 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.08.2017, 14:18
Ответы с готовыми решениями:

Как найти критерий начала определения суточной вариации во временном ряде данных?
Добрый день! Имеется временной ряд данных (среднечасовой) , в котором присутствуют как сезонная, так и суточная вариации. Как можно...

Найти максимум в численном ряде
задание: найти маскимум в численном (integer) ряде, который вводится с клавиатуры и заканчивается при введении числа 0. Если число не...

Найти закономерность в числовом ряде
Здравствуйте Есть список чисел на определенном интервале времени в один момент, происходит событие имеющее параметры: число,...

28
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
04.09.2017, 12:04
Цитата Сообщение от Sayres Посмотреть сообщение
Вообще интересны какие варианты могут быть варианты.
Это на каком языке. (или у Вы не русско говорящий).
По приведенным Вами данным не возможно ничего построить.
К этим данным необходимы пояснения.
Миниатюры
Найти экстремумы в ряде данных  
0
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
04.09.2017, 14:19  [ТС]
Это кусок данных вырезанных из массива. Файл приведен выше. там первое число год, затем месяц, а потом координаты и далее числовые данные. Вот по эти данным необходимо построить графики.
в массиве таких строк очень много, их там тысячи.
Для удобства показано несколько строчек.
по одной такой строчке нужно вычислить минимум или максиму изменяемой величины. То есть экстремум функции. так как заведомо не известно какой он будет положительный или отрицательный, то нужно найти его знак.
Исходя из своих соображений, посредством ДЕЛЬФи можно было бы найти тренд линейный, затем его из ряда вычесть.
А далее уже на новом ряду найти полином 2 степени. и методом определителей найти решения. То есть найти кони уравнения. Найти неизвестные коэффициенты и знаки при них. Коэфициент b и знак при нем нужно найти.
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
04.09.2017, 15:27
Цитата Сообщение от Sayres Посмотреть сообщение
Для удобства показано несколько строчек.
Это хорошо и правильно.
Цитата Сообщение от Sayres Посмотреть сообщение
Файл приведен выше. там первое число год, затем месяц, а потом координаты и далее числовые данные. Вот по эти данным необходимо построить графики.
Первая строка для февраля 2001 года. (Это понятно)
Потом координаты - это как? Одна координата, Пара координат для позиционирования на плоскости, или три для пространства. И как числовые данные привязаны к координатам.
Вы сами для примера нарисуйте график по первой строке (даже не график, а просто точки, по которым должен проходить усредненный график), и покажите нам.
А то по одной строке данных (среди которых большинство 9999) все что угодно при большой фантазии построить можно.
0
 Аватар для Krasme
7247 / 5100 / 2151
Регистрация: 02.02.2014
Сообщений: 13,461
04.09.2017, 15:53
Лучший ответ Сообщение было отмечено Sayres как решение

Решение

поиграем в угадайку
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
clc; clear all; clf;
d=importdata('TXT file (2).txt')';
clrs={'r' 'b' 'g' 'c' 'm'};
 
for i=1:size(d,2)
    D=d(:,i);
    V=D(D~=9999);
    v=V(5:end);
%     plot(v,['-*' clrs{i}]); hold on;
    plot(v,'*'); hold on;
end
grid on;
1
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
05.09.2017, 11:24  [ТС]
Вот этот же файл в Excel
Вложения
Тип файла: xls уровни 97-2003.xls (39.5 Кб, 7 просмотров)
0
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
05.09.2017, 11:55  [ТС]
Первая строка -год, затем месяц, далее долгота и широта. И сами данные. График построен по первым 25 точкам. Далее данные становятся хуже и идут 9999. В конкретно этих координатах это 25 точек с хорошими данными, в других может быть 40-50, а где и весь ряд хороший.
В Матлабе, 9999 -это NaN, с ними работать ни как нельзя. Значит нужно брать заведомо хороший ряд.
В Excel можно нарисовать график, далее вычислить тренд линейный и по уравнению его удалить из ряда. Получится ряд , который визуально будет наглядно показывать где там минимум или максимум. Но нужно чтоб это было обоснованно и не перебирать же все это сотни раз.
Если написать программу в дельфи, то имеет смысл прочитать этот файл, в цикле перебрать все годы и т.д...читать каждую строку, и рисовать график, затем из графика удалить линейный тренд. А затем задача сводится к нахождению коэффициентов регрессии то есть определяется минимум функции. Необходимое условие минимума функции является равенство нулю частных производных функции по исходным величинам (коэффициентам).Коэффициенты регрессии определяем по методу наименьших квадратов. И в итоге решаем систему линейных уравнений с тремя неизвестными (b0, b1,b2). Вот и находим коэффициент уравнения. Нам нужен главное знак этого коэффициента, чтобы знать минимум или максимум. Так ряды данных разные и если построить график из тех данных, что я привел , будет один тип изменения величин, а если данные с других широт, то карина может быть совершенно иной.

Добавлено через 5 минут
Вот другой кусок данных.

Эти данные лучше.
Вложения
Тип файла: xls уровни 2 97-2003 (3).xls (52.5 Кб, 4 просмотров)
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
05.09.2017, 12:20
Sayres, всё равно какое-то сумбурное объяснение.
Начнём по-порядку.
Вам надо исключить числа 9999 из рядов?
0
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
05.09.2017, 12:53  [ТС]
9999 конечно не нужны. Если есть возможность их исключить, то нужно исключать, если нет такой возможности, то готовить массив априори без 9999, более качественный массив, но это дело более долгое.

Добавлено через 4 минуты
если по простому, то нужно массив обработать весь, но если 9999 идут например с 45 уровня(45 и далее позиция в ряду) то их можно просто было обрезать, но в одном ряду они могут быть на 20 позиции, а в другом на 95 например. Далее, конечно посредством дельфи их вообще можно было интерполировать и забить эти места, чтоб не было 999, так как не хочется терять длительность ряда, так как в некоторых случаях 999 например будет только после 40 уровня и через один будет чередоваться с данными пригодными, а далее например с 60 по 100 значение будет пригодное число и далее в конце снова 9999, так что ряд получается пестрый.
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
05.09.2017, 15:40
Полный сумбур в изложении, и возможно понимании задачи.
1. Ищется максимум или минимум функции или сигнала. Возможно необходимо определить и положение этого максимума или минимума.
У функции или сигнала всегда есть некоторый входной параметр, может быть неявный как похоже в Вашем случае, например номер отсчета.
2. Значение 9999, как его понимать? Это просто сбойный отсчет в процессе измерения? Т.е. измерение проводилось, но результат по некоторым причинам получен неверным, и его в обработке не учитывают, но номер отсчета у следующего параметра будет на единицу больше.
Другой вариант, как Вы предлагаете, просто вырезать данные с отсчетом 9999.
Однако это разные графики (см. рисунок графики для данных 2001 6), и максимумы будут у них в разных местах.
3. Если представленные графики аппроксимировать полиномом второй степени, то получим параболу с ветвями направленными вверх, т.е. функция будет иметь минимум ( во всяком случае для синего графика это точно, а для красного всяко может получиться).
Миниатюры
Найти экстремумы в ряде данных  
1
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
06.09.2017, 10:57  [ТС]
Если взять другой ряд, то будет парабола направлена ветвями вниз. Как видно из данных которые я прикрепил(выборка 2007).
Данные 9999, это данные ошибочные( может не верно рассчитанные, испорченные и т.д) по разным причинам. То есть 9999 не нужно учитывать. Если бы пропуски можно было интерполировать, было бы лучше.
Таким образом есть ряды данных, их много. При качественных данных пропусков не будет и номер отсчета, то есть следущий уровень как в моем случае, будет на единицу больше и без пропусков, то есть в ряду если 50 измерений, и будет 50 цифр, по которым и строится график, если же есть пропуски то всего измерений допустим также 50 , но из них верных данных без 9999 40 или 45, а может и меньше. Это не известно.
В общем задача в том что найти экстремум функции. Может быть положительный или отрицательный. Значение , знак и на каком уровне (позиции) находится. Эти экстремумы планировал наносить на карту.
Вложения
Тип файла: xls 2007 выборка (3).xls (85.0 Кб, 4 просмотров)
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
06.09.2017, 12:50
Лучший ответ Сообщение было отмечено Sayres как решение

Решение

Sayres, Вы изменили формат представления ошибочных данных (это плохо)
Вот Вам вариант модифицированной программы представленной Krasme.
Программа берет данные из текстового формата (отбрасывает данные с величиной 9999), рассчитывает коэффициенты аппроксимирующих полиномов, и строит графики полиномов и исходных точек.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clear all;clc;close all;
di=importdata('TXT file (2).txt')';
 
nt=100; % число точек для построения графика полинома
d=di(5:end,:); 
for i=1:size(d,2)
    D(:,1)=d(:,i);
    D(:,2)=1:size(d,1);
    V=D(D(:,1)~=9999,:);
    
    p3=polyfit(V(:,2),V(:,1),2); % 2 - степень полинома
    x=V(1,2):(V(end,2)-V(1,2))/nt:V(end,2);
    yP3=polyval(p3,x);
    figure
    plot(V(:,2),V(:,1),'r*'); hold on;
    plot(x,yP3,'b-');
    grid on;
end
1
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
06.09.2017, 13:24  [ТС]
я привел данные к общему виду. Данные из источников (скаченные, полученные от других людей и.д) и мои данные, рассчитанные. Все с 9999 в качестве определителя плохих данных.
0
Модератор
 Аватар для Centurio
1765 / 1610 / 541
Регистрация: 13.09.2015
Сообщений: 5,629
06.09.2017, 16:17
Sayres, следующий вопрос: если значение экстремума получится за пределом ряда данных, то нужно его использовать или значения только в пределах ряда?
0
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
07.09.2017, 11:42  [ТС]
В общем если экстремум будет за пределами ряда, то не учитывать. В условиях данной задачи, это маловероятно. Исходя из программы приведенной выше можно увидеть график полинома и самих данных,( точек). Визуально определять каждый раз экстремум не удобно. Надо автоматически чтобы все экстремумы занесены были в массив. То есть каждая строка была год,месяц и координата и далее ряд был приведен к виду - год , месяц, координата и точка с этим значением числом. И позицией( уровнем) . То есть если данная точка экстремума будет например температура 9.3 и позиция в ряду номер 95 . Это к примеру. И призначная часть тип кривой( нисходящая или восходящая ветвь). Все эти точки экстремума собираюсь нанести на карту. Работа в этом направлении идёт творческая поэтому возможно и сумбурное изложение. Так как мысли появляются в процессе.
В данный момент ведётся работа в этом направлении в Дельфи.
Но более интересно именно в матлабе. Так как интересно познавать матлаб так этот пакет очень мощный и перспективный и я с ним не работал..
Всем откликнувшимся большое спасибо за проявленный интерес и помощь.

Добавлено через 13 часов 21 минуту
Centurio, к Вашему вопросу можно добавить, то что во -первых желательно брать значение в пределах ряда.
Но чтобы такого не было, необходимо из исходных данных везде удалить линейный тренд. А затем уже программа рассчитывает и строит графики полиномов и исходных точек.
0
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
07.09.2017, 13:19  [ТС]
Krasme,
А Если строк более 1000
Миниатюры
Найти экстремумы в ряде данных  
0
 Аватар для Krasme
7247 / 5100 / 2151
Регистрация: 02.02.2014
Сообщений: 13,461
07.09.2017, 13:39
Sayres, мне от вашей картинки ни холодно, ни жарко...
я дала заготовку, читает файл любого размера, графики - чисто для иллюстрации
что делать с полученными строками - это уже ваша головная боль
строки можно записать в массив ячеек (который тоже может быть любой длины), обрабатывать так, как вам надо.
1
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
07.09.2017, 13:50  [ТС]
SSC, Если программа берет данные из текстового формата, затем убирает данные с величиной 9999, и рассчитывает коэффициенты аппроксимирующих полиномов, после чего уже и строит графики полиномов , а также исходных точек. Значит можно кроме самого графика полинома, вывести сами координаты по которому строится ряд и и единственную точку, само значение этого экстремума(температуру) и позицию(уровень) исходного ряда. но тут возможно не все точки экстремумов будут находится в пределах ряда. По этому возможно нужно действительно перед этим сначала по всем рядам построить линейный тренд, затем его удалить и уже по полученным рядам строить полиномы.
Вложения
Тип файла: xls без тренда(3).xls (46.5 Кб, 4 просмотров)
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
07.09.2017, 14:02
Цитата Сообщение от Sayres Посмотреть сообщение
По этому возможно нужно действительно перед этим сначала по всем рядам построить линейный тренд, затем его удалить и уже по полученным рядам строить полиномы.
Какие-то обрывки мыслей.
Учитесь выражать мысли яснее.
Цитата Сообщение от Sayres Посмотреть сообщение
перед этим сначала по всем рядам построить линейный тренд
Что значит линейный тренд по всем рядам?
Да его еще потом и удалить?
Математически Вы не можете описать проблему, физику проблемы Вы тоже не изложили, возможно Вы вообще недопустимые вещи делаете.
Мы тут гадаем на кофейной гуще, и это становится совсем не интересно...

Как пишет Krasme Вам дали заготовку, которая читает данные в предоставленном Вами формате, рассчитывает параметры аппроксимирующих полиномов и для контроля строит графики полученных точек и графики полиномов. Выполняйте правки, добивайтесь, что бы программа выполняла то, что Вам необходимо, приложите хоть каплю собственных усилий.
0
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
08.09.2017, 20:55  [ТС]
Физика проблемы такова: по температурным рядам нужно найти глубину залегания слоя. Ряды это измениние температуры. Изучаю динамику ряда. Поэтому ищу варианты.физический смысл заключается в том что на определенном уровне(номер отсчёта ) меняются физические параметры и кривая меняет тенденции изменения. Вот поэтому и необходимо найти это место( точки перегиба, экстремум функции).
Математически необходимо найти экстремум. Как я говорил в Дельфи работаю в этом направлении. Так что усилия прикладываю.
Есть ряд данных , берем его из огромного массива, необходимо нарисовать график параболического тренда.
то есть полином 2 степени. Находим формулу Полинома. и по ней с помощью статистической модели в виде неленейных полиномов ищем коэффициент регрессии. коэффициент регрессии находим по методу наименьших квадратов.
В общем задача состоит найти экстремум функции построенные по ряду данных. Но не известно будет экстремум какой по знаку по этому нужно узнать знак коефициента функции.

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

Добавлено через 8 минут
SSC,
Извиняюсь если становится не интересно.
Не работал с матлабом.совсем!
Но есть мысли продолжать в работать в матлабе, вот и интересуюсь ,что подскажите в этом направлении интересуюсь у людей опытных и понимающих.
Поэтому и спрашивал как к найти сам экстремум функции, по рядам из массива и записать их отдельным массивом.позже сравнить хотел результаты полученные в матлабе и Дельфи. Возможно уже освою в том числе и с Вашей помощью,первые начальные азы.
Возможно обсуждение и решение задачи и ее развитие может быть полезно всем участникам обсуждения.

Добавлено через 2 минуты
Krasme, Благодарю!

Добавлено через 23 часа 44 минуты
Krasme,
Нужно для сравнения с другими результаты . Для контроля. Исходя вашей программки в каждой строке только записать одно число .одно значение . Значение экстремума. В моем случае это залегание слоя. Минимальное значение температуры. Либо уровень и значение температуры на этом уровне. Сами графики в общем то не так уж и нужны. Только для визуального просмотра.

Исходя из Вашей программки, для контроля уже сравнил с данными полученными в Дельфи и эксцеле.
Программу из Дельфи могу скинуть расчет тренда, для данной задачки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.09.2017, 20:55
Помогаю со студенческими работами здесь

В ряде найти самое краткое слово
Вообщем есть ряд (к примеру 'a'). Нужно ввести 3 слова и найти в нем (в 1 ряде!) самое краткое. К примеру: "Вася Пупкин...

Найти недостающее число в ряде чисел
Здравствуйте! Помогите, пожалуйста, решить такую задачу. Есть последовательность порядковых чисел, к примеру, от 1 до 5. Как из...

Найти сумму и произведение первых N членов в ряде
y=1 + x^2/1 - x^1/2 + x^4/3 - x^3/4 + x^6/5 - x^5/6 + … Вывести на экран значения элементов по 10 в ряд, сумму и произведение.

Найти К-тое натуральное число в ряде чисел
Напишите программу, которая найдёт К-тое (1 <= K <= 100 000) натуральное число в ряде чисел, (от наименьшего.(от 2)) Ввод--несколько...

Найти количество не чётных элементов в каждом ряде матрицы
Дан двумерный массив 4х3. НАйти количество не чётных элементов в каждом ряде. uses crt; var matrix: array of integer; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru