MATLAB中插值的多维矩阵对角索引

时间:2017-09-27 22:44:13

标签: matlab

我有一个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.

0 个答案:

没有答案