Вторник, 07.01.2025
Pascal 4 All
Меню сайта
Категории каталога
Численные методы [5]
Графы [2]
Действия с графами
Наш опрос
А вы знали, что кликнув на обьявление в правом блоке раз в день Вы поможете сайту?
Всего ответов: 332

Главная » Статьи » Аналитические задачи » Численные методы

  


Вычисление значения аргумента при помощи кубического сплайна и метода прогонки для таблично заданной функции

program Spline;
uses crt;
const
n = 4;
type
arr = array[0..n] of real;
var
x, y, C: arr; {X, Y - vektory znachenii argumenta i funkcii}
i: byte; {i - schetchik}
Xx, spl, b, d: real; {b, d - koeff., uchastvuyushie v mnogochlene S(x)}
h, F: arr; {h - vektor shagov (x[i] - x[i - 1]; F - vektor iz A*C=F}
_a, _b, _c: arr; {diagonali trehdiagonal'noi matrici}
alpha, betta: arr; {dlya metoda progonki}

begin
clrscr;
writeln('N = ', n);
{}
for i := 0 to n do
begin
write('x[', i, '] := ');
readln(x[i]);
write('y[', i, '] := ');
readln(y[i]);
writeln;
end;
write('Vvedite X: ');
readln(Xx); {Xx - tochka gde nado naiti znachenie S(x)}
{/} {sdelali vvod elementov}

for i := 1 to n do {nahodim shagi mezhdu x[i]}
h[i] := x[i] - x[i - 1];

for i := 1 to n - 1 do {nahodim vektor F, A*X = F}
F[i] := 6 * ( (y[i+1] - y[i])/h[i+1] - (y[i] - y[i-1])/h[i] );

{}
for i := 1 to n - 1 do
_b[i] := 2 * (h[i] + h[i+1]);

for i := 1 to n - 2 do
_c[i] := - h[i + 1];

for i := 1 to n - 2 do
_a[i] := - h[i];
{/} {zapolnili linii treh diagonalei}

{}
alpha[1] := _c[1] / _b[1];
betta[1] := F[1] / _b[1];
for i := 2 to n - 1 do
begin
alpha[i] := _c[i] / (_b[i] - _a[i] * alpha[i - 1]);
betta[i] := (F[i] + _a[i] * betta[i - 1]) /
(_b[i] - _a[i] * alpha[i - 1]);
end;
{/} {pryamoi hod}

{}
C[n] := 0;
for i := n - 1 downto 1 do
C[i] := alpha[i] * C[i + 1] + betta[i];
{/} {obratnii hod}

for i := 1 to n do {nashli nomer (i) otrezka, gde nahoditsya Xx}
if x[i] >= Xx then break;
{}
d := (c[i] - c[i - 1]) / h[i]; {vichislyaem po formulam koeff}
b := h[i]*C[i]/2 - h[i]*h[i]*d/6 + (y[i] - y[i-1])/h[i];

spl := y[i] + b*(Xx-x[i]) + (C[i]*sqr(Xx-x[i]))/2 +
d*(sqr(Xx-x[i]))*(Xx-x[i])/6; {sam mnogochlen kubich. splaina}

writeln('S(x) = ', spl:3:4);
{/} {formula splaina}

readkey;
end.


Источник:

Категория: Численные методы | Добавил: Pavel (04.11.2007) | Автор: Павел Алексеевич
Просмотров: 1147 | Комментарии: 1 | Рейтинг: 0.0/0 |

Всего комментариев: 1
1 Pavel  
0
Эта задача из курса Численные методы - компьютерное моделирование. Сделать может быть проще и можно. Тут много недостатков. Можно, на мой взгляд, решение только усложнить. Главное - реализованы формулы метода прогонки для трехдиагональной матрицы. biggrin

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2025
Используются технологии uCoz
style=