MATLAB Кубический сплайн-коэффициент HW - PullRequest
0 голосов
/ 21 октября 2019

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