Я только что работал, хотя и конвертировал некоторые скрипты MATLAB для работы в R, однако никогда в своей жизни не использовал MATLAB, и, будучи не совсем экспертом по R, у меня возникли некоторые проблемы.
ПравитьЭто сценарий, который мне дали, предназначенный для исправления измерений температуры для задержки, вызванной эффектами массы изоляции.Насколько я понимаю, он смотрит на скорость изменения температуры и пытается скорректировать ошибки, вызванные временем отклика датчика.К сожалению, у меня нет доступной литературы, чтобы дать мне представление о числах, которые я ожидаю от функции, и единственный способ выяснить это - это экспериментально проверить ее на более позднем этапе.
оригинальный скрипт:
function [Tc, dT] = CTD_TempTimelagCorrection(T0,Tau,t)
N1 = Tau/t;
Tc = T0;
N = 3;
for j=ceil(N/2):numel(T0)-ceil(N/2)
A = nan(N,1);
# Compute weights
for k=1:N
A(k) = (1/N) + N1 * ((12*k - (6*(N+1))) / (N*(N^2 - 1)));
end
A = A./sum(A);
# Verify unity
if sum(A) ~= 1
disp('Error: Sum of weights is not unity');
end
Comp = nan(N,1);
# Compute components
for k=1:N
Comp(k) = A(k)*T0(j - (ceil(N/2)) + k);
end
Tc(j) = sum(Comp);
dT = Tc - T0;
end
где мне удалось добраться до:
CTD_TempTimelagCorrection <- function(temp,Tau,t){
## Define which equation to use based on duration of lag and frequency
## With ESM2 profiler sampling @ 2hz: N1>tau/t = TRUE
N1 = Tau/t
Tc = temp
N = 3
for(i in ceiling(N/2):length(temp)-ceiling(N/2)){
A = matrix(nrow=N,ncol=1)
# Compute weights
for(k in 1:N){
A[k] = (1/N) + N1 * ((12*k - (6*(N+1))) / (N*(N^2 - 1)))
}
A = A/sum(A)
# Verify unity
if(sum(A) != 1){
print("Error: Sum of weights is not unity")
}
Comp = matrix(nrow=N,ncol=1)
# Compute components
for(k in 1:N){
Comp[k] = A[k]*temp[i - (ceiling(N/2)) + k]
}
Tc[i] = sum(Comp)
dT = Tc - temp
}
return(dT)
}
Я думаю, что проблема в строке Comp [k], кто-то может указать на то, что я сделал неправильно?Я не уверен, что могу выбрать элементы массива таким образом.
, кстати, Tau = 1, t = 0,5 и temp (или T0) будет вектором.
Спасибо
редактировать: очевидно, мое описание слишком краткое, чтобы объяснить мои примеры кода, не совсем уверен, что еще я мог бы написать, что было бы уместно, а не просто тратить время людей.Этого достаточно, мистер Фильтр?