2011-12-09 18 views
2

讓我問一下使用Matlab來解決我的問題是廢話還是一些人做類似的問題。matlab很好的問題

我有一個初始序列S(1),其中每個項是一個2D點。 我通過在每個連續的2個術語點p(i)p(i+1)之間插入新術語點p 來創建新序列S(2)。 其中pS(2)上最近指數的4個術語點的函數f。 也就是說,

p= f(p(i-1),p(i),p(i+1),p(i+2)) 

而且功能f是寫在一個C般的風格 但不是在矩陣語言的純粹的風格。 以同樣的方式,我重複生成新的更長的序列S(i+1)高達S(m)

以上可能對你很模糊,但請給點建議。 我不問Matlab是否是這個問題的最佳選擇,但是否沒有專家會使用Matlab來解決這個問題或者一些問題。

預先感謝您。

回答

2

它很大程度上取決於f。如果f可以在Matlab中進行高效編碼,或者您願意花時間到MEX(Matlab C擴展),那麼Matlab將會有效地執行。

的代碼可以矢量化這樣的:

f = @(x) mean(x,3); 
m=3; 
S{1}=[1,2,3;4,5,6]; 
for i=2:m 
    S{i} = cat(3,... 
     [[0;0] S{i-1}(:,1:end-2)],... 
     S{i-1}(:,1:end-1),... 
     S{i-1}(:,2:end),... 
     [S{i-1}(:,3:end) [0;0]]); 
    S{i} = [f(S{i}) [0;0]]; 
    S{i} = cat(3,S{i-1},S{i}); 
    S{i} = permute(S{i},[1 3 2]); 
    S{i} = S{i}(:,:); 
    S{i}(:,end)=[]; 
end 
+0

,非常感謝。 –

1

是的,Matlab似乎適合這樣的任務。對於序列列表的數據結構,請考慮使用cell arrays。您可以將S作爲單元陣列,而S{1}將對應於您的S(1),並且可以再次是點的單元陣列,或者如果點只是數字的對或三元組,則可以是常用矩陣。

作爲替代方案,在我看來,對於所有類型的序列,Python都是非常強大的。

+0

,非常感謝你。 –