我有以下公式在q中生成线性插值:
lsfit:{(enlist y) lsq x xexp/: til 1+z};
interp:{[xn;x;y]sum (1;xn)*flip lsfit[x;y;1]};
Run Code Online (Sandbox Code Playgroud)
以及下面的数据进行插值:
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]
Run Code Online (Sandbox Code Playgroud)
正在产生
index value
0 enlist 1.47
1 enlist 0nf
2 enlist 1.49
Run Code Online (Sandbox Code Playgroud)
为什么我要0进入第二排呢?
更新:其他示例的Inconsistet行为
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]
Run Code Online (Sandbox Code Playgroud)
生成
index value
0 enlist 1f
1 enlist 0nf
2 enlist 0nf
3 enlist 1f
Run Code Online (Sandbox Code Playgroud)
因此,看起来有时公式有效,第0行和第3行,有时它不行,第1行和第2行.
我该如何解决?
谢谢!
小智 5
您遇到此问题的原因是因为数学细节矩阵划分.
可以通过取矩阵的逆矩阵然后矩阵乘法来执行矩阵除法.在q中,可以通过直接执行这些操作来看出这一点.
q) enlist[2 2f] lsq (1 2f;3 4f)
-1 1
q) enlist[2 2f] mmu inv (1 2f;3 4f)
-1 1
Run Code Online (Sandbox Code Playgroud)
您输入的一个x值lsfit是行7.5 7.5.用z的值1f,将其转换该载体导入基质(1 1;7.5 7.5)中的xexp操作.然后在lsq操作中使用该矩阵.
然后出现问题因为(1 1;7.5 7.5)不可逆.当且仅当行列式不为零时,矩阵才是可逆的.2 x 2矩阵的决定因素是AD - BC.在你的榜样,A = 1,B = 1,C = 7.5,和D = 7.5.因此行列式为零,矩阵不可逆,函数的输出为Onf.
要解决此问题,您必须确保每行中的两个项目x不相同.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
1084 次 |
| 最近记录: |