首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(q/kdb+)插值公式在某些情况下无效

(q/kdb+)插值公式在某些情况下无效
EN

Stack Overflow用户
提问于 2018-10-26 18:59:43
回答 1查看 827关注 0票数 0

下面的公式用于生成Q中的线性插值:

代码语言:javascript
运行
复制
lsfit:{(enlist y) lsq x xexp/: til 1+z};
interp:{[xn;x;y]sum (1;xn)*flip lsfit[x;y;1]};

和下面的数据进行插值:

代码语言:javascript
运行
复制
xn:(4.7;7.5;4.9);
x:(3 5f;7.5 7.5;3 5f);
y:(1.3 1.5;2 2f;1.3 1.5);
interp'[xn;x;y]

它正在产生

代码语言:javascript
运行
复制
index   value
0   enlist 1.47
1   enlist 0nf
2   enlist 1.49

为什么我要把0放在第二排?

更新:其他示例的不一致性行为

代码语言:javascript
运行
复制
xn:(6;7;8;9);
x:(6 6f;7 7f;8 8f;9 9f);
y:(1 1f;1 1f;1 1f;1 1f);
interp'[xn;x;y]

生成

代码语言:javascript
运行
复制
index   value
0   enlist 1f
1   enlist 0nf
2   enlist 0nf
3   enlist 1f

因此,它看起来像有时公式工作,行0和3,有时它没有,第1和第2行。

我怎么才能修好它?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-10-27 00:57:14

您遇到此问题的原因是由于数学细节矩阵的划分。

矩阵除法的方法是取矩阵的逆,再求矩阵的乘积。在q中,可以通过直接执行这些操作来看到这一点。

代码语言:javascript
运行
复制
q) enlist[2 2f] lsq (1 2f;3 4f)
-1 1
q) enlist[2 2f] mmu inv (1 2f;3 4f)
-1 1

您向x输入的lsfit值之一是行7.5 7.5。使用z1f,这将将该向量转换为xexp操作中的矩阵(1 1;7.5 7.5)。然后在lsq操作中使用此矩阵。

出现这个问题是因为(1 1;7.5 7.5)不是可逆的。矩阵是可逆的当且仅当行列式是非零的.2 x 2矩阵的行列式是AD - BC。在您的示例中,A = 1B = 1C = 7.5D = 7.5。所以行列式是零,矩阵不是可逆的,函数的输出是Onf

要解决此问题,您必须确保x每一行中的两项不相同。

希望这能有所帮助。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53014838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档