算法如下:
lagrange<-function(t,x,y)
{
xs=sort(x);ys=y[order(x)]#排序是为了输入x时有更大的灵活性,可以不按由小到大输入
X=matrix(0,length(x),length(x))
T=0
for(i in 1:length(x))
{
T=t^(i-1)#计算t的0~n-1次方
for(j in 1:length(x))
X[i,j]=xs^(j-1) #构造范德蒙行列式
}
a=solve(X,ys) #解出a1,a2,...an
sol=a%*%T #求出插值
plot(x,y)
points(t,sol,type="p",col="red")
sol
}
f=function(x) sqrt(x)
x=seq(1,10,by=1)
y=f(x)
lagrange(2.5,x,y)
但当x=seq(1,10,by=0.5)时,输出如下结果:
> lagrange(2.5,x,y)
错误于drop(.Call("La_dgesv", a, as.matrix(b), tol, PACKAGE = "base")) :
系统计算上是奇异的: 倒条件数=5.41391e-27
请问这是什么原因?矩阵算法在何种情况下才是稳定的?