Как изменить скрипт на функцию? - PullRequest
0 голосов
/ 19 марта 2020

У меня есть набор данных в листе Excel, который я импортировал в MATLAB, однако в этом наборе данных есть NaN. Я выяснил некоторый код в основном скрипте, чтобы заменить NaN на нужные значения:

max = x(:, 2);
min = x(:, 3);
for j = 1:length(max)
 for k = 1:length(min)
   if isnan (max(j))
     max (j) = ((max(j-1)+max(j+1))/2);
   elseif isnan (min(k))
     min (k) = ((min(k-1)+min(k+1))/2);
   end
 end
end

Однако мне нужно иметь возможность превратить этот код в пользовательскую функцию и вызывать ее из основной сценарий вместо того, чтобы выполнять все вычисления в основном сценарии.

Я пытался начать делать функцию:

function [missingmax, missingmin] = missing(max, min)

Однако я не смог понять остальное.

Ответы [ 2 ]

1 голос
/ 19 марта 2020
function [max_x, min_x] = missing(x)
max_x = x(:, 2);
min_x = x(:, 3);
for jj = 1:length(max_x)
    for kk = 1:length(min_x)
        if isnan (max_x(jj))
            max_x (jj) = ((max_x(jj-1)+max_x(jj+1))/2);
        elseif isnan (min_x(kk))
            min_x (kk) = ((min_x(kk-1)+min_x(kk+1))/2);
        end
    end
end
end

Вы были на правильном пути. Пара вещей:

  1. Ваш ввод x, а не min,max
  2. Ваш вывод min и max, а не missingmax и missingmin
  3. j обозначает мнимую единицу Это не рекомендуется для использования в качестве переменной, поэтому я изменил ее.
  4. Вы называли переменные min и max. Не делай этого. Когда-либо. Шутки в сторону. Не. Если вам удастся выполнить min=4 и затем попытаться вычислить минимум массива, вы получите кучу ошибок. В основном: никогда не используйте имя встроенной функции для переменной.
0 голосов
/ 20 марта 2020

Поскольку вы выполняете линейную интерполяцию, вам не нужно определять функцию здесь. Он уже существует в Matlab: fillmissing

Таким образом, вы можете заменить отсутствующие значения в x следующим образом

x_filled = fillmissing(x,'linear')
...