Измените это:
x= Symmetrie(square_matrix[4][4]);
на следующее:
x = Symmetrie(square_matrix);
, поскольку ваш метод ожидает всю матрицу в качестве параметра, а не только элемент.
square_matrix[4][4]
- это отдельный элемент матрицы, то есть элемент в 5-й строке и 5-м столбце. Конечно, это вызывает неопределенное поведение (UB) , так как ваша матрица имеет 4 строки.
Что еще более важно, не игнорируйте сгенерированные предупреждения. Например, в GCC вы получите что-то вроде этого:
prog.c: In function 'main':
prog.c:24:32: warning: passing argument 1 of 'Symmetrie' makes pointer from integer without a cast [-Wint-conversion]
24 | x= Symmetrie(square_matrix[4][4]);
| ~~~~~~~~~~~~~~~~^~~
| |
| int
prog.c:5:20: note: expected 'int (*)[100]' but argument is of type 'int'
5 | int Symmetrie (int matrix[][max]) {
| ~~~~^~~~~~~~~~~~~
, как вы можете видеть в Live Demo kbd>.
Существует несколько опций:
Мне нравится использовать фильтры - фильтр Калмана является типичным (и часто лучше всего) решение - это использует объем прогнозирующего усреднения, которое лучше, чем дешевый БИХ (Импульсная характеристика Бога) фильтр:
FilteredValue = FilteredValue * 0.75 + NewValue * 0.25
Можно получить модули GPS, которые дают Вам 4-5, фиксирует в секунду, который позволит Вам использовать вышеупомянутый 'дешевый' фильтр с разумным временем отклика.
Можно также просто получить лучший GPS (SiRF III или лучше), который не является столь же шумным и имеет лучший внутренний прием (где возможный).
Потребительский снимок "единиц GPS к дороге", если это возможно, таким образом, ошибки от дороги не замечены потребителем, а также несколькими из других методов.
Kalman не легко реализовать, но без внешнего набора данных или датчика (такого как дорожная скорость), это - наилучший вариант. Проверьте http://www.google.com/search?q=open%20source%20kalman%20filter для кода и учебных руководств на нем.
- Adam
ре: фильтрация в присутствии "поп-" шума-
Один из самых легких способов, которыми я нашел, чтобы сделать, это:
delta = newValue - filteredValue;
delta = delta > LARGEST_SANE_DELTA ? LARGEST_SANE_DELTA
: (delta < -LARGEST_SANE_DELTA ? -LARGEST_SANE_DELTA : delta);
filteredValue += alpha*delta;
где альфа = 1/tau и tau является временной константой рассматриваемого фильтра низких частот, выраженный в кратных числах времени между повторениями вышеупомянутого кода. Значение LARGEST_SANE_DELTA
представляет большое возможное изменение в newValue
и отсекает чрезмерно большую вариацию во входе. Существуют, возможно, лучшие способы отклонить этот тип шума, но они более сложны, и тот, который я упомянул, довольно прост.