Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
План-конспект.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
518.77 Кб
Скачать

3.4 Рівняння для визначення коефіцієнтів кубічного сплайна

Зауважимо, що умова c1-d1h1=0 збігається з рівнянням (4) при1, i=1 якщо c0=0. Отож, ми отримали замкнуту систему рівнянь для визначення коефіцієнтів кубічного сплайна:

i=1…Ne-1 c0=cNe-1=0 (5)

i=2…Ne-1 (6)

i=1…Ne-1 (7)

Переконаємось у тому, що ця система має єдиний розв’язок. Вилучимо з цих рівнянь змінні bi di i=1…Ne-2. Одержимо систему, що містить тільки ci i=1…Ne-2. Щодо цього розглянемо два сусідніх рівняння:

Віднімаючи від першого рівняння друге, одержимо:

Підставляючи знайдений вираз для bi-bi-1 у праву частину рівняння(7.7.6), одержимо:

(8)

Далі, з рівняння (5) одержуємо:

Підставляючи ці вирази у (8), приходимо до рівняння:

Остаточно, для визначення коефіцієнтів ci , одержуємо систему рівнянь:

(9)

i=1…Ne-2 c0=cNe-1=0

Внаслідок діагональної переваги система (9) має єдиний розв’язок. Системи із тридіагональною матрицею коефіцієнтів, на практиці розв’язують методом, який є значно оптимальнішим за метод Гауса. Його називають методом прогонки. За знайденими коефіцієнтами ci коефіцієнти di і bi визначають за явними формулами:

i=1…Ne-1 (10)

Отож, доведено існування єдиного кубічного сплайна, що відповідає умовам 1–3 і граничним умовам s’’(al)=s’’(bl)=0 .

Блок-схему алгоритму обчислення коефіцієнтів кубічного сплайна, згідно із теорією, яку наведено вище, зображено на рис.1. Ідентифікатором Ma позначено матрицю коефіцієнтів системи лінійних алгебричних рівнянь (11), з якої знаходять невідомі коефіцієнти ci i=1…Ne-1 Вона є тридіагональною. Її структуру подаємо нижче:

=

(11)

3.5 Блок схема

Рис.1. Алгоритм обчислення коефіцієнтів кубічного сплайна

3.6 Процедура обчислення коефіцієнтів кубічного сплайна Процедура обчислення коефiцiєнтiв кубiчного сплайна:

s[i](x)=a[i]+b[i]*(x-Xe[i])+c[i]/2*(x-Xe[i])^2 +d[i]/6*(x-Xe[i])^3

Procedure CubSpln(Xe,Ye: Vector; Ne: Integer; Var a, b,

c, d: Vec);

Type Matrix = Array[1..51,1..51] of Real;

Var h, Y : Vec;

Ma : Matrix;

i, j : Integer;

R, Q : Real;

{$I Progonka.pas}

Begin

Ne := Ne - 1;

{Формування вектора рiзниць h i коефiцiєнтiв a[i] сплайна}

For i := 1 to Ne do

Begin

h[i] := Xe[i] - Xe[i - 1];

a[i] := Ye[i]

End;

{Формування СЛАР з тридіагональною матрицею Ma i вектором правої частини системи Y для обчислення коефiцiєнтiв с[i] сплайна}

For i := 1 toNe - 1 do

For j := 1 toNe - 1 do

If i=j then

Begin

R := h[i]; Q :=h[i + 1];

Ma[i, i] := 2 * (R + Q);

Y[i] := 6*((Ye[i+1]-Ye[i])/Q-(Ye[i]-Ye[i-1])/R)

End Else

Begin

Q := h[i + 1];

Ma[j, i] := 0;

Ma[i + 1, i] := Q;

Ma[i, i + 1] := Q

End;

Progonka(Ma, Y, Ne-1, c); {Розв’язання СЛАР методом прогонки}

c[0] := 0; c[Ne] := 0;

For i:=1 toNe do{Обчислення коефiцiєнтiвd[i] i b[i]}

Begin

R := h[i];

d[i] := (c[i] - c[i-1]) / R;

b[i] := R*c[i]/2 - Sqr(R)*d[i]/6+(Ye[i] - Ye[i-1])/R

End

End;