我是一名远程学习者,目前正在与我的助教来回交流,但对这个问题无济于事。我是一个数学本科生,所以我了解三次样条背后的数学,但是我对编码非常陌生,在将数学转换为MATLAB中的代码时遇到了麻烦。我拥有的代码是我从教科书中提供给我的算法以及我与TA来回往返翻译的总和。
问题:实现三次样条插值。修改算法,使您的程序输出三次样条多项式的系数表。
代码正在返回
A = 2.3000
2.3000
没有多少应该返回的系数。
到目前为止的代码:
%INPUT The total number of inputs, x, and f(x).
n=13;
x = [0.9,1.3,1.9,2.1,2.6,3.0,3.9,4.4,4.7,5.0,6.0,7.0,8.0];
a = [1.3,1.5,1.85,2.1,2.6,2.7,2.4,2.15,2.05,2.1,2.25,2.3,2.25];
b=zeros(n,1)
c=zeros(n,1)
d=zeros(n,1)
%Step 1
for i = 1:n-1
h(i) = x(i+1) - x(i);
end
%Step 2
for i = 2:n-1
alpha(i) = (3/h(i))*(a(i+1) - a(i)) - (3/(h(i)-1))*(a(i) - a(i-1));
end
%Step 3
l(1) = 1;
mu(1) = 0;
z(1) = 0;
%Step 4
for i = 2:n-1
l(i) = 2*(x(i+1) - x(i-1)) - h(i-1)*mu(i-1);
mu(i) = h(i)/l(i);
z(i) = (alpha(i) - h(i-1)*z(i-1))/l(i);
end
%Step 5
l(n) = 1;
z(n) = 0;
c(n) = 0;
%Step 6
for j = n:n-1:1
c(j) = z(j) - mu(j)*c(j+1);
b(j) = (a(j+1) - a(j))/h(j) - h(j)*(c(j+1) + 2*c(j))/3;
d(j) = (c(j+1) - c(j))/(3*h(j));
end
%OUTPUT (aj , bj , cj , dj for j = 0, 1, . . . , n - 1)
A(j) = [a(j),b(j),c(j),d(j)]
disp(A)