我有一个3d矩阵
V(A(X), B(X), :)
其中a,b和c是向量A,B和C的长度。 存在长度为x的向量X,联合确定V的第一维和第二维的值。值A(X)和B(X)不必在由A定义的网格上。或者B.因此,对于给定的X,我想选择元素
[Ag, Bg, Cg] = ndgrid(A,B,C);
V_q = griddedInterpolant(Ag,Bg,Cg,V,'linear');
其中A(X)和B(x)在由矢量A和B定义的界限内,但不一定是网格点。我按如下方式对V中的值进行插值:
[aq, bq, cq] = ndgrid(A(X),B(X),C); % new grids
Vq = V_q(aq,bq,cq);
我想要做的是仅在前两个维度的对角线元素处理函数V.这是因为X同时确定了这两个维度。我首先在新值上定义函数V,然后在每个点评估函数:
diags = Vq(bsxfun(@plus,[1:x+1:x*x]',[0:c-1]*x*x));
我要找的元素由
提供A = 1:2; a = length(A);
B = 1:3; b = length(B);
C = 1:4; c = length(C);
V = reshape(1:a*b*c,[a,b,c]);
[ag, bg, cg] = ndgrid(A,B,C);
V_q = griddedInterpolant(ag,bg,cg,V,'linear');
x = 5;
Ax = linspace(A(1),A(end),x);
Bx = linspace(B(1),B(end),x);
[aq, bq, cq] = ndgrid(Ax,Bx,C); % new grids
Vq = V_q(aq,bq,cq);
% Solution:
diags = Vq(bsxfun(@plus,(1:x+1:x*x)',(0:c-1)*x*x))
diags =
1.0000 7.0000 13.0000 19.0000
2.2500 8.2500 14.2500 20.2500
3.5000 9.5000 15.5000 21.5000
4.7500 10.7500 16.7500 22.7500
6.0000 12.0000 18.0000 24.0000
首先在AxB空间定义的所有点(而不仅仅是对角线)上评估V矩阵对我来说似乎效率低下。我希望有一种方法可以使用cellfun命令来编写它,但不幸的是我不知道如何。
我附上一个例子:
.. code:: python
import os
this_is_the_last_code_line = 5
Now I want this text to be a blockquote.