为避免多次构建插值,我建议使用griddedInterpolant
所有插值构建一次,然后您可以随意查询。
请注意,您应该考虑插值,即您要使用哪种数值方案来计算不属于初始表的值(例如 OP 中的 (800;107) )。基本(和默认)方案是线性插值;使用您的表格(不统一),“makima”和“spline”之间可能存在高阶插值方案。有关所有这些的更多信息,请参阅文档。
构建插值的代码如下,假设整个表存储在变量中T
:
rpm = [800 1200 1400 1600:400:4800];
N = [0 20:10:100];
[g_rpm, g_N] = meshgrid(rpm, N);
G = griddedInterpolant(rpm, N ,T);
添加第四个参数以指定插值方案(例如'makima'
)。
然后,要找到所需的值,您可以构建自己的函数,如下所示:
F = @(r, t) fminsearch(@(x) abs(t-G(r,x)), 50);
50是先验起始值;T
如果不是单调的,您必须对其进行细化。
在 OP 中的输入:
F(800, 97)
给 20
F(800, 107)
给出 28.333(线性插值,28.224 makima 插值和 26.898 样条插值)
增强
如果您想对计算进行矢量化,您可以通过将函数体包含在以下内容中来做到这F
一点arrayfun
:
F = @(R,T) arrayfun(@(r,t) fminsearch(@(x) abs(t-G(r,x)), 25), R, T);
所以现在你可以像这样一次输入几个输入:
F([800 2000],[100 100])
ans =
21.966 15.564