Имам 3 x n
(n
е произволно число) матрица в MATLAB. Пример за n=13
:
M = [40, 0, 0, 0, 41, 0, 0, 0, 0, 0, 41.6, 0, 20;
20, 0, 0, 0, 23, 0, 0, 0, 0, 0, 23, 0, 189;
102, 0, 0, 0, 192, 0, 0, 0, 0, 0, 96, 0, 21];
Броят на нулите между две ненулеви числа във всеки ред е произволен, но това число винаги е едно и също между редовете. Искам да интерполирам всеки ред така:
Minter = [40, 40.25, 40.5, 40.75, 41, 41.1, 41.2, 41.3, 41.4, 41.5, 41.6, 30.8, 20;
20, 20.75, 21.5, 22.25, 23, 23, 23, 23, 23, 23, 23, 106, 189;
102, 124.5, 147, 169.5, 192, 176, 160, 144, 128, 112, 96, 58.5, 21];
Така че искам да заменя нулите с числа, получени с метода на линейна интерполация.
Написах собствена функция, за да направя това. Използвам функцията MATLAB find
за търсене на индекси на числа, които са >0
, и след това в зависимост от разликата между два индекса (от функцията find
) и в зависимост от първото дясно и ляво ненулево число (от оригиналната матрица ), изчислявам числа между тези две ненулеви числа и замествам нули с тези числа в оригиналната матрица. Работя върху всеки ред поотделно.
Този метод работи добре, но не е много бърз. Има ли по-бърз начин в MATLAB? Опитах функцията interp1
, но без особен успех.