矩阵的方向导数

时间:2016-02-11 15:10:27

标签: matlab gradient boundary derivative

我的Workspace中有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个元素的相同内容,然后再使用它。任何人都可以帮忙解决这个问题。

1 个答案:

答案 0 :(得分: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);

请注意分开的通话。引入tilde作为ignore function argumentsMATLAB Release 2009b的一种方式。如果你有一个旧版本,只需使用名为junk的实际变量或类似的东西。