我剛剛工作,雖然把一些MATLAB程序R中工作,但從來沒有使用過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)
}
我認爲這個問題是比較[K]行,可能有人指出什麼我做錯了嗎?我不確定我能否以這種方式選擇數組的元素。
順便說一下,牛頭= 1,T = 0.5和臨時(或T0)將是一個向量。
感謝
編輯:顯然我的描述是解釋我的代碼示例太簡單了,真的不知道還有什麼我可以寫這將是相關的,不只是浪費人民的時間。這是否足夠先生過濾器?
顯然,[據傳](http://blog.stackoverflow.com/2011/09/se-podcast-19/)變更已實現,並且這個問題的「這裏代碼的非常模型。你修好了。'題。因此提示寫更多。 – joran
關於函數應該做什麼的信息以及輸入和輸出的例子將是最有幫助的。另外,你說你認爲Comp [k]有問題,但你不會說它是什麼。你爲什麼不寫這個函數,以便函數中的變量名都是一樣的?這會讓其他人更容易遵循......我注意到的第一件事是他在你的'for'循環中的向量不能正確計算,':'運算符的優先級高於你 – John
您是否有權訪問matlab和R,以便您可以測試兩個版本的腳本?打印出正在發生的事情(或使用每個平臺的調試系統)並查看事情的不同之處 – Spacedman