我的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个元素的相同内容,然后再使用它。任何人都可以帮忙解决这个问题。
答案 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
函数计算的近似值,其中是您的数据矩阵。通常,MATLAB函数知道请求了多少输出参数。当您致电gradient(gradient(F))
时,会在内部gradient
电话的第一个输出上调用外部gradient
。这意味着您目前正在获得的近似值。
我怀疑你真的想要。要做到这一点,你必须从内部调用gradient
获取两个输出,将它们分别传递给
外部呼叫,并选择正确的输出:
[dx,dy] = gradient(F);
[ddx, ~] = gradient(dx);
[~, ddy] = gradient(dy);
请注意分开的通话。引入tilde作为ignore function arguments中MATLAB Release 2009b的一种方式。如果你有一个旧版本,只需使用名为junk
的实际变量或类似的东西。