Я конвертирую программу из MATLAB 2012 в 2016. Я получаю некоторые странные ошибки, некоторые из которых, я полагаю, связаны с отсутствием точности в функциях MATLAB.
Например, у меня есть серия времен oldTs
как таковая:
Time Data
-----------------------------
1.00000000000000001 1.277032377439511
1.00000000000000002 1.277032378456123
1.00000000000000003 1.277032380112478
У меня есть другой временной ряд newTs
с похожими данными, но гораздо больше строк. oldTs
может иметь полмиллиона строк, тогда как newTs
может иметь миллион. Я хочу интерполировать данные из старых временных рядов с новыми временными рядами, например:
interpolatedTs = interp(oldTs.time, oldTs.data, newTs.time)
Это дает мне ошибку: x values must be distinct
Дело в том, что мои значения x различны . Я думаю, что MATLAB может обрезать некоторые данные, и, следовательно, полагая, что некоторые данные не являются уникальными. Я обнаружил, что другие функции MATLAB делают это:
test = [1.00000000000000001, 1.00000000000000002, 1.0000000000000000003]
unique(test)
ans =
1
test2 = [10000000000000000001, 10000000000000000002, 10000000000000000003]
unique(test2)
ans =
1.000000000000000e+19
MATLAB считает, что этот вектор имеет только одно уникальное значение вместо трех! Это огромная проблема для меня, так как мне нужно поддерживать высочайший уровень точности и точности с моими данными, и я не могу жертвовать какой-либо этой точностью. Скорость / Хранение не является фактором.
Обрезают ли определенные функции MATLAB по умолчанию данные с определенным n-ным десятичным знаком? Изменилось ли это с MATLAB 2012 на MATLAB 2016? Есть ли способ заставить MATLAB использовать определенную точность для программы? Почему MATLAB делает это для начала?
Любой свет, проливаемый на эту тему, высоко ценится. Спасибо.