计算方法试验—三次样条插值第二类边界
题目:要求编写出求解三次样条插值的一般解的程序。已知,第二类边界条件。
如下,为编写的 m 文件。
function [s,m]=yangtiao(x0,y0,df,conds)
%函数yangtiao是三次样条函数按第一和第二种边界条件求x所对应的函数值s.
%其中x是自变量的值构成的向量,输出的m为弯矩向量.
%x0为插值节点构成的向量,y0为对应于插值节点的函数值构成的向量.
%conds为边界条件,其值取1时, 为第一种边界条件,此时df为边界点的一阶
%导数值构成的向量;其值取2时, 为第二种边界条件,df为边界点的二阶导数值构成的向量.
n=length(x0);
h=diff(x0);
D=diff(y0)./h;
b=ones(1,n)*2;
for j=2:n-1
a(j)=h(j-1)/(h(j-1)+h(j));
c(j)=h(j)/(h(j-1)+h(j));
d(j)=6*(h(j-1)*(y0(j+1)-y0(j))-h(j)*(y0(j)-y0(j-1)))/(h(j)*h(j-1)*(h(j)+h(j-1)));
end
a(1:n-2)=a(2:n-1);
switch conds
case 1
a(n-1)=1;
c(1)=1;
d(1)=6*((y0(2)-y0(1))/(x0(2)-x0(1))-df(1))/(x0(2)-x0(1));
d(n)=6*(df(2)-(y0(n)-y0(n-1))/(x0(n)-x0(n-1)))/(x0(n)-x0(n-1));
case 2
a(n-1)=0;
c(1)=0;
d(1)=2*df(1);
d(n)=2*df(2);
otherwise
error('conds的值输入错误,conds的值只能取1或者2')
end
for i=2:n
r=a(i-1)/b(i-1);
b(i)=b(i)-r*c(i-1);
d(i)=d(i)-r*d(i-1);
end
m(n)=d(n)/b(n);
for i=n-1:-1:1
评论8