马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
以下是我写的样条插值程序(第一边界条件),但是运行程序计算在给定插值点处的数值却不是原始给定的数值,请大家看一下,其实很简单,谢谢大家!!
function sp1=spline1(x,y,xi) % X,Y是插值需要的x(i) 与f(i)的向量%
np1=length(y);
for i=1:(np1-1)
if(xi<=x(i+1)&xi>=x(i)) %如果给定的xi在[x(i) x(i+1)]分段,用带定系数法确定3次多项试%
A=[1,x(i),x(i)^2,x(i)^3;1,x(i+1),x(i+1)^2,x(i+1)^3;0,1,2*x(i),3*x(i)^2;0,1,2*x(i+1),3*x(i+1)^2]; %系数矩阵%
B=[orifun(x(i));orifun(x(i+1));orifunder(x(i));orifunder(x(i+1))];%对应AX=B中的B,即[f(x(i));f(x(i+1)); 在x(i)导数值;在x(i+1)导数值]%
C=inv(A);
a=C*B;
a=a';
sp1=polyval(a,xi); %构造3次多项式%
end
end
function y=orifunder(x0)
syms x;
t=diff(orifun(x));
x=x0;
y=eval(t);
function y=orifun(x)
y=1/(1+25*x*x); %实验时候给点的原涵数,要进行各种插直计算比较进度,避免RUNGE现象%Sample TextSample TextSample Text |