gpt4 book ai didi

matlab - Interpn - 改变输出

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:36 25 4
gpt4 key购买 nike

我有 4 个网格:

  1. kgrid 是 [77x1]
  2. x 即 [15x1]
  3. z 即 [9x1]
  4. s 即 [2x1]

然后我有一个函数:

  1. kprime 即 [77x15x9x2]

我想在某些点 ksim (750 x 1)zsim (750 x 1) (xsim 是一个标量)。我在做:

[ks, xs, zs, ss] = ndgrid(kgrid, x, z, [1;2]);
Output = interpn(ks, xs, zs, ss, kprime, ksim, xsim, zsim, 1,'linear');

此插值的问题是给出的输出是针对 ksimzsim 的所有组合,这意味着输出是 750x750。我实际上需要 750x1 的输出,这意味着我只需要在 ksim(1,1)zsim(1,1),然后是 ksim(2,1)zsim(2,1),然后是 ksim(3,1)zsim(3,1)

换句话说,在得到 Output 之后我正在做:

Output = diag(squeeze(Output));

我知道我可以使用这个输出然后只选择我想要的数字,但这是非常低效的,因为它实际上插值了我实际上不需要的所有其他点。任何帮助表示赞赏。

最佳答案

tl;dr:xsim 和 (ssim) 从标量更改为与 ksim 大小相同的向量> 和 zsim

Output = interpn (ks, xs, zs, ss,           ...
kprime, ...
ksim, ...
repmat(xsim, size(ksim)), ... % <-- here
zsim, ...
repmat(1, size(ksim)), ... % <-- and here
'linear');


解释:

ksimxsimzsimssim 输入都需要具有相同的形状,因此在该形状的每个公共(public)位置,每个输入都充当内插对象的“内插下标”组件。请注意,虽然它们都需要具有相同的形状,但该形状的大小和尺寸可以是任意的。

相反,如果您传递不同大小的向量(毕竟,标量是长度为 1 的向量),这些将被解释为 ndgrid 构造的组件。因此,您实际上是在告诉 interpn 评估由向量 ksimzsim(以及您的单例 xsim ssim)。这就是为什么你得到一个 2D 网格外观的输出。


请注意,相同的方案也适用于 构造向量(即 ks、xs、zs 和 ss),即您可以使用“向量语法”而不是“通用形状”语法来定义网格,即

Output = interpn(kgrid, x, z, s, kprime, % ...etc etc

你会得到相同的结果。

关于matlab - Interpn - 改变输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39193457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com