|
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
|
||||||
Интерполяция данных ряда в выбранные точки с определенным шагом25.02.2020, 12:25. Показов 1169. Ответов 7
Метки Интерполяция (Все метки)
Здравствуйте!
нужна небольшая помощь. Есть данные которые(ряды) которые нужно интерполировать. Почитал, можно интерполировать значения в промежуточные узлы. Но необходимо сделать интерполяцию в определеннные точки, и с одним шагом. Как пример данные уровень 2 , 3, 5, 6, 9 , 11, 15.6, 19, 20.5 значение 15 14 13.4 12 10 9.8 8 7.8 6.2 а нужно чтоб было уровень 0 в него войдет 2 значения. Уровень 2 и 3(сответствено среднее ((15+14)/2) ) затем уровень 10, поотом 20 и т.д то есть шаг 10 будет двай файла входных: файл уровней и файл значений. В этих файлах не всегда есть данные по порядку так например может быть 2, 3, 5, 7, 29, 50, 100, 150, или 2, 100, 110, 16, 156, т.д Тогда все равно, нужно привести к одному виду То есть в независемости если там данные чтоб сетка была регулярная, а отсутствие данных забитьь например 9999 Для примера приведены сами файлы он аналогичны по названию, лишь отличаются одной буквой. Заранее всем спасибо, кто откликнится, и направит в нужное русло. Пример данных можно наверное боле грубо метом ближайшего соседа например. в Дельфи бы так Сначала обнулить
0
|
||||||
| 25.02.2020, 12:25 | |
|
Ответы с готовыми решениями:
7
Интерполяция c переменным шагом Написать цикл с определённым шагом
|
|
483 / 427 / 205
Регистрация: 04.03.2011
Сообщений: 1,259
|
|
| 25.02.2020, 15:11 | |
|
Очень тяжело понимать задание. Может есть какие-то картинки? Схемы?
0
|
|
|
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
|
|
| 26.02.2020, 14:46 [ТС] | |
|
46.13 -30.78 508.00 4.00 9.00 19.00 29.00 39.00 49.00 59.00 69.00
1ые цифры не читаем. 46.13 и -30.78 координаты, а 508 это количество значений в строке Итак читает с 4 ой позиции,это уровни 4,9,19,29,39 и т.д. Необходимо сделать интерполяцию в промежуточные уровни. Это чтобы сделать стандартные уровни. Таким образом, необходимо сначала получить промежуточные уровни с шагом 1. Для примера показано ниже , только часть , на интервале до 9, то есть первые два значения из строки сверху 4.00 и 9.00 46.13 -30.78 508.00 0 1 2 3 4 5 6 7 8 9 Также во втором файле 46.13 -30.78 508.00 4 9 19.00 29.00 39.00 49.00 59.00 69.00 79.00 90.00 46.13 -30.78 508.00 16 15.22 15.23 15.23 15.23 15.23 15.23 15.22 15.21 15.23 Аналогично координаты и количество 508 также проэкстраполировать в промежуточные уровни как вариант берем два уровня 4 и 9 в них значения 16 и 15.22 то есть изменение на 5 метров 0.78 делим на 5 и получаем изменение в 1 метр(0.156) далее отсчитываем влево до уровня 0 все значения а далее так и до 9 таким образом на 1 метр приходится изменение 0.156 46.13 -30.78 508 0 1 2 3 4 5 6 7 8 9 16.468+0.156 16.312+0.156 16.156+0.156 16+0.156 16 16-0.156 15.22 16.624 16.468 16.312 16.156 15.844 далее между 9 и 19 уровнем изменение 0.01 будет почти прямая таким образом весь ряд а потом получить только значения на стандартных уровнях Пока пробую через 10 шаг
0
|
|
|
117 / 83 / 39
Регистрация: 06.01.2013
Сообщений: 274
|
||||||
| 26.02.2020, 16:00 | ||||||
1
|
||||||
|
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
|
||||||
| 26.02.2020, 16:11 | ||||||
|
Вот Вам 3 варианта интерполяции
1
|
||||||
|
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
|
||
| 27.02.2020, 16:03 [ТС] | ||
|
Сергей Тетьора,
Я пробовал такие варианты ранее выдавало ошибку Error using griddedInterpolant The grid vectors are not strictly monotonic increasing. Error in interp1 (line 186) F = griddedInterpolant(X,V,method); Добавлено через 50 секунд SSC, Да
SSC, Когда вектор, получается я ранее пробовал, был рабочий код, но с матрицей не получается. Во вложении два файла. Делал свою интерполяцию, не встроенными функциями, там тоже свои недостатки, то деление на ноль иногда можно попустить.... а Как Вы предложили делал обычную линейную интерполяцию, на тех данных которых апробировал результат, получалось удовлетворительно. .... На одном векторе А дальше не удается, когда работа с крупным массивом. Отдельно вопрос как раз об ошибках, данные которые я сам получаю, я могу знать какие там могут быть ошибки и их исключаю... А те данные которые я беру с ошибками, нужно делать условия. Вот например строка 0 1060 9999 40 9999 9999 9999 1403 9999 я могу заменить а вот выпало после 0 значение 1060, затем 9999 и 40 то есть 1060 вполне нормально число , если бы оно было бы как минимум после 40 ......90...200...600.....1000...1060 тогда было бы нормально, , но в начале оно быть не может и в соответсвиии этого уровня соответсвенно и сами значения будут не верными Векторы сетки не являются строго монотонными возрастающими. Вылетает такая ошибка. Это если работаю не с вектором, а с матрицей. Только с массивом не получается. Во первых ошибка, что данные не монотонные. Это решить наверно задав пределы какие-то, либо просто убирать выборсы в данных. Интреполяция только вектора одного да удается, я это делал изначально. Ономерну.ю интеропляцию я ранее делал, Так как нужно было для единичных случаев. А теперь вывожу не единичные вектора на выходе, а небольшие массивы, по 50-100 строк. А нужно то именнно для массива проводить эту процедуру. Поэтому и создал тему.
0
|
||
|
117 / 83 / 39
Регистрация: 06.01.2013
Сообщений: 274
|
||||||
| 05.03.2020, 13:06 | ||||||
|
Sayres, не очень понимаю, что Вы хотите получить. Если Ваш массив это набор отдельных векторов, то можно интерполировать в цикле.
Вот что у меня получилось:
1
|
||||||
|
6 / 6 / 3
Регистрация: 31.08.2017
Сообщений: 108
|
|||||||||||
| 12.03.2020, 13:30 [ТС] | |||||||||||
|
Сергей Тетьора,
Спасибо, за отклик. Это только по другому немнго делал. Такие файлы я получал, и filename = 'P20050501_prof.nc.txt'; не использую Я их выводил для примера. И их испоьзовал дальше. Это я так , но в цикле добавил, к коду котрый раньше их выводил, чтоб сразу в одном коде читать. Вопрос не получался именно набор отдельных векторов интерполировать нужно. так Как Вы написали я могу делать, но именно кажый вектор проинтерполировать не удается. То есть набор этих векторов представлен массивом, допустим 40-50 штук строк. У меня удается проинтерполировать их по наибольшему значению, как у вАс показано max(level), сначло было проще просто фиксировано ставил уровень. Потом просто по следнему значению в векторе. Так вопрос заключается менно интерполяция каждого вектора, но по последнему значению даннного вектора, а не по последнему значению во всей матрице. То есть получится не фиксировано интерполяцию для всех векторов до конца, а вектора будут не одиноковой длины и потм вывести эти все вектора, либо указав в каждом векторе признак, то есть число этих значений либо если по последнему значению в матрице, то и забить их например 9999 Добавлено через 1 час 39 минут В общем то загвостка была именно интерполяции кажого вектора отдельно, по значению последнего числа, то есть не по фиксированной длине. 5 8 10 56 100 150 у каждого своя длина 150 5 20 50 100 300 300 6 30 40 90 100 100 то есть интерполяция через 10, но конечной длины вектора реальных значений а концовку можно забить 9999 в середине значения интерполируются нормально а в конце если ряд не длинный , допустим 50 уровней, а интерполируется по 150 уровню, получается просто убывающая прямая. Я думал чтоб без цикла это сделать, но такой функции не нашел. Сергей Тетьора, Перебрал сколько вариантов, как лучше сделать, но все равно к этому виду примерно как есть сейчас пришел. Как Вы мне подсказали, в принципе я сначала так именно и начал делать, потом отказался от этого варианта и делал по кажой строчке интерполяцию не встроенной функцией, а перебирая значения формулой. Загвостка именно в том, что в том что интерполяция проходит по максимальному элементу одной сточки. Необходимо чтоб менялся Level_int(i) Индекс (i) по размеру массива, также как и для Data_int Или варивант найти
И если добавить его в Ваш код.
0
|
|||||||||||
| 12.03.2020, 13:30 | |
|
Помогаю со студенческими работами здесь
8
Поиск кратчайшего пути из точки А до точки В на шахматной доске шагом коня Построить массив циклом с определенным шагом
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога
Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
|