从图形不是Hermite中识别Mathematica插值函数

问题描述

| 我正在反向工程Mathematica如何进行列表插值:
(* Fortunately,Mathematica WILL interpolate an arbitrary list *) 

tab = Table[a[i],{i,1,100}] 

f = Interpolation[tab] 

(* get the coefficient of each term by setting others to zero *) 

Plot[{f[42+x] /. {a[42] -> 0,a[43] ->0,a[44] -> 0,a[41] -> 1}},{x,1}] 

Plot[{f[42+x] /. {a[41] -> 0,a[42] -> 1}},1}] 

Plot[{f[42+x] /. {a[42] -> 0,a[41] ->0,a[43] -> 1}},a[41] -> 0,a[44] -> 1}},1}] 

(* above is neither Hermite,nor linear,though some look close *) 

(* these are available at oneoff.barrycarter.info/STACK/ *) 

Table[f[42+x] /. {a[42] -> 0,a[41] -> 1},1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff41.txt 

Table[f[42+x] /. {a[41] -> 0,a[42] -> 1},1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff42.txt 

Table[f[42+x] /. {a[41] -> 0,a[42] ->0,a[43] -> 1},1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff43.txt 

Table[f[42+x] /. {a[41] -> 0,a[43] -> 0,a[44] -> 1},1/100}] >> /home/barrycarter/BCINFO/ONEOFF/STACK/coeff44.txt
编辑:谢谢,胡扯!那正是我想要的。作为参考,系数为(按顺序):
(x-2)*(x-1)*x/-6
(x-2)*(x-1)*(x+1)/2
x*(x+1)*(x-2)/-2
(x-1)*x*(x+1)/6
    

解决方法

根据文档,插值器是分段多项式。这有点含糊,因此这里有一些事情需要调查。 您可以通过实验确定插值器是数据的线性函数。所有可能数据的良好基础由以下形式的向量组成:{1,0,...,0},{0,1,0,...,0},...,{0,..., 0,1}。为此,让我们构建一个微型函数来生成这些长度为$ n $的向量:
test[n_,i_] := Module[{x = ConstantArray[0,n]},x[[i]] = 1; x]
您可以通过尝试一些示例来确认线性,其中系数$ a $和$ b $作用于长度为$ i ^ \\ text {th} $和$ j ^ \\ text {th} $的基向量$ n $:
With[{a=1,b=2.5,n=5,i=2,j=3},Plot[{Interpolation[a test[n,i] + b test[n,j]][x],a Interpolation[test[n,i]][x] + b Interpolation[test[n,j]][x]},{x,n}]
]
因为两个函数是叠加的,所以只有一条曲线。 建立线性后,就足以在$ n $基向量上分析插值器的值。您可以通过微分确定多项式的次数。默认情况下,度为3,但是您可以使用\“ InterpolatingOrder \”参数对其进行修改。下面的代码将绘制一张显然是分段的常数曲线的表,该曲线是由内插器的导数产生的,用于对长度为$ n $的数据使用所有基向量对ioMax进行内插1阶:
With[{n=7,ioMax = 5},Table[
        Module[{fns},fns = Table[Interpolation[test[n,i],InterpolationOrder->io],{i,n}];
            Table[Plot[Evaluate@D[f[#],{#,io}]&[x],n},PlotRange->Full,PlotStyle->Thick,ImageSize->150],{f,fns}]
        ],{io,ioMax}
    ]
] // TableForm
输出显示中断发生在参数的整数值处,并且对于长度为$ n $的数据和度为$ d $的插值器,最多存在$ n-d $个不同的段。这些信息应该可以帮助您实现大部分目标。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...