Страницы: 1
RSS
Аппроксимация: найти величины между двумя заданными
 
Здравствуйте уважаемые форумчане. На учёбе столкнулся со следующей задачей. Есть таблица, в которой находятся измеренные прибором значения. Прибор не может выполнять измерения с необходимой частотой и из-за этого между двумя реальными измерениями образуются пустые строки, которые необходимо заполнить. Требуется сделать своеобразную интерполяцию значений, т.е. заполнить пустые строки таким образом, чтобы виртуальные измерения плавно ложились между фактическими.
Задача усложняется тем, что количество пустых строк может меняться, т.е.между одними измерениями пустых строк может и не быть, а между другими 4 или 5. Для простоты понимания сделал пояснение в виде рисунка.

Для решения этой задачи нужен макрос VBA, который должен «чувствовать» заполненные ячейки и заполнять пустые ячейки между ними. К сообщению прикрепил фрагмент файла для примера. Заранее благодарю всех откликнувшихся за помощь.

P.S. По сути то, что мне требуется, является «разбавлением» реальных измерений, что в инженерной практике недопустимо. Но проект учебный и в силу обстоятельств и неимением другого выхода, преподаватель дал добро на такого рода вольности. Поэтому обращаюсь за помощью.  
Изменено: sasha_z_myor - 25.09.2015 22:21:56
 
Монстр, конечно, получился... Но, вроде, считает
Код
=ЕСЛИ(A2="";B1+(ИНДЕКС(A2:$A$252;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(A2:$A$252);0))-ПРОСМОТР(9^9;$A$2:A2))/(ИНДЕКС(СТРОКА(A2:$A$252)-1;ПОИСКПОЗ(ИСТИНА;ЕЧИСЛО(A2:$A$252);0))-ПРОСМОТР(9^9;$A$2:A2;СТРОКА($A$2:A2)-1));A2)
 
Еще монстр:
Код
=ЕСЛИ(A2="";ПРЕДСКАЗ(СТРОКА();ИНДЕКС(A$2:A2;ПОИСКПОЗ(9^9;A$2:A2)):ИНДЕКС(A2:A$252;ПОИСКПОЗ(1=1;A2:A$252<>"";));СТРОКА(ИНДЕКС(A$2:A2;ПОИСКПОЗ(9^9;A$2:A2)):ИНДЕКС(A2:A$252;ПОИСКПОЗ(1=1;A2:A$252<>"";))));A2)
 
Чудовище №3:
 
Всем спасибо за помощь.

Pelena и MCH ваши формулы считают значения, но очень хочется то же самое в vba, чтобы входным параметром был только столбец со значениями, а дальше макрос выполнял вычисления сам. Также заметил особенность -  при добавлении новых значений появляется ошибка деления на ноль в строках 253, 254, 255.

C.M., ваше решение немного не то, что требуется. Как я понял,вы нашли среднюю линию всех значений. Задача же заключается в том, чтобы заполнить пустые ячейки значениями, которые ложились бы  на прямую, проведённую между двумя соседними измерениями.
 
Чтобы сделать так
Цитата
sasha_z_myor написал:
заполнить пустые ячейки значениями, которые ложились бы  на прямую, проведённую между двумя соседними измерениями
требуется ряд значений Y и соответствующий рад значений Х. А чему равен Х в вашем файле?  
Неизлечимых болезней нет, есть неизлечимые люди.
 
Цитата
sasha_z_myor написал:
очень хочется то же самое в vba
Почему бы не написать об этом в первом посте?
 
На всякий случай:
Интерполяция (варианты Pelena и MCH)
Аппроксимация (вариант С.М.)
 
 Отвечаю на вопросы и замечания по порядку.

TheBestOfTheBest, за координату X принимается номер измерения, начиная с 0. Прикрепил к первому посту файл с решением в виде формулы, предложенной здесь.

Pelena, в первом посте во втором абзаце я говорил, что нужен макрос. Отредактировал текст первого сообщения.

С.М., вы абсолютно правы, я ошибся. То, что мне требуется - это интерполяция. Извиняюсь за свою оплошность. Поправил первое сообщение.
Изменено: sasha_z_myor - 25.09.2015 22:27:24
Страницы: 1
Читают тему
Наверх