Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Численные методы Часть 5..pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
7.37 Mб
Скачать

Алгоритм решения

Ниже приведён фрагмент программы на языке Си, реализующей процедуру построения приближённого решения дифференциального уравнения с использованием иерархических кусочно-непрерывных полиномов второй степени.

Программа 2.3

//

Стационарная задача теплопроводности

 

//

Ne

число

сегментов

 

 

//

Nk

число

узлов

 

 

 

//

locale

массив

коэффициентов

системы уравнений для

сегмента

//

localF

массив

правых частей

системы уравнений для

сегмента

//

globalC

 

массив

коэффициентов системы уравнений для объекта

//

globalF

 

массив

коэффициентов системы уравнений для объекта

/ /

х

массив координат узлов

 

 

//

хО

начальная

точка

 

 

/ /

х1

конечная точка

 

 

/ /

h

длина

сегмента

 

 

//

W0

амплитуда

мощности источников

 

/ /

L

коэффициент

теплопроводности

 

//

ТО

температура

на левом торце (хО)

 

//

Те

температура

среды

 

 

//

А

коэффициент

теплоотдачи

 

 

#define Ne 64

void main(void)

{double globalC[2*Ne+l] [ 2*Ne+l], globalF[2*Ne+l] , x[Ne+l] ; double locale[2] [2] , localF[2], x0=0., xl=M_PI, h= (xl-xO) /Ne; double L=70.0, W=1000.0, T0=100.0, 76=20.0, A=30.0;

int i, j, k, Nk=Ne+l;

//определение координат и номеров узлов каждого сегмента for(k=0; k<Nk; k++) x[k]=x0+h*k;

//инициализация массивов коэффициентов и правых частей

//системы уравнений

for(i=0; i<2*Ne+l; i++)

for(globalF[i]=0.0/ j=0; j<2*Ne+l; j++) globalC[i] [j]=0.0; for(k=0; k<2*Ne+l; k++)

// формирование матриц коэффициентов и правых частей для сегмента

{locale [0] [0]=L/h;

locale [0] [1]=1оса1С[1] [0]=0.0; locale [0] [2]=localC[2] [0]=L/h; locale [1] [1]=16.0 *L/(3.0*h); locale [1] [2]=localC [2] [1]=0.0; locale [2] [2]=2.0*L/h;

localF [0] =W0* (cos (x [k] )- (sin(x[k+l] )-sin(x[k] )) /h) ; localF [1] =W0* (8.0* (cos (x [k] )-cos (x [k+1] ))/ (h*h) -

4 . 0 * (sin(x[k])+sin(x[k+1]))/h);

localF [2] =W0* ((sin (x [k+1] )-sin(x [k] )) /h-cos (x [k+1] )) ;