矩阵的方向导数

Directional Derivatives of a Matrix

我的工作区中有 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 个元素找出相同的元素,然后再使用它。谁能帮忙解决这个问题。

要回答你的字面问题,你应该将变量存储在 structure array or at least a 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 调用的 first 输出上调用外部 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 was introduced as a way to ignore function arguments in MATLAB Release 2009b。如果您有旧版本,只需使用名为 junk 或类似名称的实际变量。