Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Выбор значения многозначной функции

Ответить
Настройки темы
Теория - Выбор значения многозначной функции

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте.

Существует ИК дальномер SHARP, который можно подключить к ЦАП и в зависимости от расстояния до объекта будет изменяться напряжение на выходе дальномера. Зависимость напряжения не только нелинейная, но и с "крохотным" изъяном :



Отградуировав свой дальномер я получил похожую зависимость и пока у меня нет предположений как можно грамотно обработать получаемые данные. К примеру получив на выходе 1 Вольт, по графику видно что функция имеет два значения расстояния: 5 см и 65 см. Как вы наверное понимаете препятствие может возникнуть как на 5 так и на 65 сантиметрах. Отслеживать предыдущее значение расстояния по-моему неправильно из-за некоторого количества ошибок самого дальномера.

Посоветуйте пожалуйста оптимальный алгоритм для обработки данных.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 13:51, 10-07-2012

 

Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178

Профиль | Отправить PM | Цитировать


Извратился, пытаясь проверять на оба исключения...

Код: Выделить весь код
                try
                {
                    chanals[adc.HistValue[i]] += 1;
                }
                catch (KeyNotFoundException)
                {
                    try
                    {
                        chanals.Add(adc.HistValue[i], 1);
                    }
                    catch(ArgumentException)
                    {
                        chanals[adc.HistValue[i]] += 1;
                    }
                }

Периодически всё же возникает то одно то другое исключение. Понять почему оно появляется я не могу

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 15:01, 19-07-2012 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Вы ее в режиме отладки запустите и пошагово пройдите

и посмотрите какие значения

Отправлено: 17:20, 19-07-2012 | #32

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Цитата ferget:
Вы ее в режиме отладки запустите »
В этом случае в ком-порт может вывалиться кака. Лучше записать данные из порта в файл, и запустить отладку на данных из файла. Мой любимый метод: вывалить в файл, загрузить в мат.пакет и изголяться над данными в поисках истины.

По поводу украшения кода: неужели в данном случае код стал проще/быстрее/понятней/надёжней?
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:51, 19-07-2012 | #33


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Цитата Tonny_Bennet:
chanals.Add(adc.HistValue[i], 1); " Элемент с тем же ключом уже был добавлен." »
Что, если проверять перед добавлением, типа
Код: Выделить весь код
if(chanals.Exists(adc.HistValue[i])) {}
Или подобного функционала нет?

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:12, 20-07-2012 | #34


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Delirium:
Или подобного функционала нет? »
есть

Код: Выделить весь код
if(chanals.ContainsKey(adc.HistValue[i])) {}
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:06, 20-07-2012 | #35


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178

Профиль | Отправить PM | Цитировать


Цитата pva:
В этом случае в ком-порт может вывалиться кака. Лучше записать данные из порта в файл, и запустить отладку на данных из файла. Мой любимый метод: вывалить в файл, загрузить в мат.пакет и изголяться над данными в поисках истины. »
Попробую.

Цитата Delirium:
Что, если проверять перед добавлением, типа
Код:
if(chanals.Exists(adc.HistValue[i])) {}
Или подобного функционала нет? »
Цитата ferget:
есть
Код:
if(chanals.ContainsKey(adc.HistValue[i])) {} »
Спасибо за советы. Делал по примеру из MSDN а там был с try {} catch () {}. Переделал на проверку с блоком if. Всё равно периодически возникает Исключение.
Прикрепляю скриншот окна студии.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Последний раз редактировалось Tonny_Bennet, 20-07-2012 в 13:04.


Отправлено: 12:59, 20-07-2012 | #36


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


а зачем вы сделали ключом adc.HistValue[i], может лучше сделать ключом i, а adc.HistValue[i] - значением

Отправлено: 14:06, 20-07-2012 | #37


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178

Профиль | Отправить PM | Цитировать


Цитата ferget:
а зачем вы сделали ключом adc.HistValue[i], может лучше сделать ключом i, а adc.HistValue[i] - значением »
Это сделано для построения плотности распределения.

В массиве HistValue хранятся последние N значений измерений. К примеру:

0371
0372
0351
0372
0372
0372
0371
0371
0371
0304
0372
0371
0371
0371
0371

И мне нужно посчитать сколько раз из N выпадало 371, сколько раз выпадало 372 и т.д. Поэтому я последовательно перебираю все значения из массива, и если ключ не создан я создаю пару из HistValue[i] и 1, если ключ уже был создан я просто увеличиваю значение на 1. Когда перебор окончен я ищу максимальное значение и узнаю какому ключу это значение соответствует.

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 14:21, 20-07-2012 | #38


Аватара для ferget

Разный


Сообщения: 1294
Благодарности: 359

Профиль | Отправить PM | Цитировать


Цитата Tonny_Bennet:
И мне нужно посчитать сколько раз из N выпадало 371, сколько раз выпадало 372 и т.д. Поэтому я последовательно перебираю все значения из массива, и если ключ не создан я создаю пару из HistValue[i] и 1, если ключ уже был создан я просто увеличиваю значение на 1. Когда перебор окончен я ищу максимальное значение и узнаю какому ключу это значение соответствует. »
Спасибо, понятно

Но не понятно, что происходит на скриншоте, выглядит как будто значения в HistValue меняются на ходу

попробуйте создать в функции массив в него скопировать HistValue и работать с этим массивом
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:41, 20-07-2012 | #39


Аватара для Tonny_Bennet

Ветеран


Сообщения: 1384
Благодарности: 178

Профиль | Отправить PM | Цитировать


Цитата ferget:
Но не понятно, что происходит на скриншоте, выглядит как будто значения в HistValue меняются на ходу
попробуйте создать в функции массив в него скопировать HistValue и работать с этим массивом »
Скопировал. Вроде работает нормально.

В таком случае получается, что во время вызова процедуры передаётся ссылка на объект а не копия объекта???

-------
Сообщение оказалось полезным? Кнопка Полезное сообщение располагается чуть ниже.


Отправлено: 15:14, 20-07-2012 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Теория - Выбор значения многозначной функции

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] В пункте "выбор столбцов в таблице" не все значения anivan Microsoft Windows 2000/XP 4 16-09-2011 12:56
Разное - [решено] Excel 2003 выбор текстового значения или заменить bygor1412 Microsoft Office (Word, Excel, Outlook и т.д.) 2 24-10-2010 03:09
C/C++ - Присвоение функции значения mrcnn Программирование и базы данных 4 07-11-2008 08:26
Значения параметров h00ligan Автоматическая установка Windows 2000/XP/2003 1 21-06-2005 12:23
Значения абривеатур Trojn Хочу все знать 11 21-05-2003 23:58




 
Переход