2016-02-11 42 views
2

我的工作區中有40個結構。我需要編寫一個腳本來計算所有元素的方向派生。這裏是代碼:矩陣的方向導數

[dx,dy] = gradient(Structure_element_1.value); 
dxlb = min(min(dx)); 
dxub = max(max(dx)); 
dylb = min(min(dy)); 
dyub = max(max(dy)); 

[ddx,ddy] = gradient(gradient(Structure_element_1.value)); 
ddxlb = min(min(ddx)); 
ddxub = max(max(ddx)); 
ddylb = min(min(ddy)); 
ddyub = max(max(ddy)); 

這是一個元素的代碼。我需要找出所有40個元素的相同內容,然後再使用它。有人能幫忙嗎。

+2

這些結構是否都包含相同的字段?如果你有'Structure_element_1,Structure_element_2,...',那麼最好有'Structure_element(1),Structure_element(2),...'這可以讓你更容易地在整個數據範圍內進行操作。前者基本上需要使用'eval',由於許多原因這不是很好的做法,其中最主要的是它不能被MATLAB的編譯器優化。 – excaza

+0

您可能想要閱讀'for'循環與'eval'組合(參見:http://www.mathworks.com/matlabcentral/newsreader/view_thread/275986)。此外,請使用'min(dx(:​​))'而不是'min(min(dx))'。 –

+0

此外,您可能可以重複使用第一次調用的結果到'gradient'來傳入第二個調用,而不是執行'gradient(gradient(...));'。 –

回答

1

要回答您的字面問題,您應該將變量存儲在structure array或至少一個cell array。如果你所有的結構都具有相同的字段,可以通過索引一個數組變量來訪問所有的人,說Structure_element

for i = 1:numel(Structure_element) 
    field = Structure_element(i).value 
    % compute gradients of field 
end 

我們解決實際坡度計算的問題。 gradient函數計算\frac{\partial F}{\partial x}, \frac{\partial F}{\partial y}的近似值,其中F是您的數據矩陣。通常,MATLAB函數知道請求多少個輸出參數。當您撥打gradient(gradient(F))時,外部gradient被稱爲第一個輸出的內部gradient調用。這意味着您目前正在獲得\frac{\partial^2 F}{\partial x^2}, \frac{\partial}{\partial y} \frac{\partial F}{\partial x}的近似值。

我懷疑你真的想要得到\frac{\partial^2 F}{\partial x^2}, \frac{\partial^2 F}{\partial y^2}。要做到這一點,你必須得到來自內心的召喚兩個輸出gradient,分別將它們傳遞到 外呼,並選擇正確的輸出:

[dx,dy] = gradient(F); 
[ddx, ~] = gradient(dx); 
[~, ddy] = gradient(dy); 

注分離的呼叫。作爲ignore function argumentsMATLAB Release 2009b中的一種方式引入了tilde。如果你有一個較舊的版本,只需使用一個名爲junk的實際變量或類似的東西。

+0

非常感謝..現在我明白了Gradient()的功能。 –

+0

如果答案有幫助,你也可以upvote :) –