Я учусь на расстоянии и в настоящее время собираюсь туда и обратно с моим ТА, но безрезультатно по этому вопросу. Я был студентом по математике, поэтому я понимаю, что математика стоит за кубическим сплайном, однако я очень новичок в кодировании и у меня возникают проблемы с переводом математики в код в 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)