Автор работы: Пользователь скрыл имя, 25 Мая 2013 в 22:15, лабораторная работа
1. Цель работы:
Приобретение навыков решения уравнений параболического типа методом сеток.
Приобретение
навыков решения уравнений
Требуется найти решение уравнения
в области , удовлетворяющее условиям
(2)
Разобьём область прямыми
;
где - шаг по оси ; -шаг по оси .
Обозначим через .
Заменив в каждом внутреннем узле
производные конечно-разностным
, (3)
Преобразовав её, будем иметь
,(4)
где ; ; .
В граничных узлах
; (5)
В начальный момент времени
Эта разностная схема устойчива при любом .
Будем решать систему уравнений (4),(5),(6) методом прогонки.
Для этого положим
,
где пока неизвестные коэффициенты.
Тогда
.
Подставив значение (7) в (4), получим
Откуда
(9)
Из сравнения (7) и (9) видно, что
,
( ) (11)
Для из (4) имеем
Откуда
или
Сравнивая (7) при с последним выражением, получим
Таким образом, сначала проводим прямой ход, вычисляя коэффициенты и по формулам (12),(13) и (10),(11). Затем осуществляем обратный ход по формуле (7). Последовательно находим
………………………………………………..
Методом сеток ( с использованием метода прогонки) найти приближенное решение уравнения
в области , удовлетворяющее условиям
взяв
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define H 0.1
#define L 0.01
#define P 1.0
#define T 0.05
#define PI 4.0*atan(1.0)
#define S H*H/L
double f(int i, int j)
{
double x=H*i, t=L*j;
return exp(t)*x;
}
double phi(int i)
{
double x=H*i;
return x*(1-x);
}
double mu1(int j)
{
double t=L*j;
return sin(t);
}
double mu2(int j)
{
double t=L*j;
return 1-cos(t);
}
void main()
{
int i,j,n,m;
double **u,*a,*b;
clrscr();
n=ceil(P/H);
m=ceil(T/L);
a=new double[n-1];
b=new double[n-1];
u=new double*[n+1];
for(i=0;i<=n;i++)
u[i]=new double[m+1];
for(i=0;i<=n;i++)
u[i][0]=phi(i);
for(j=0;j<m;j++)
{
u[0][j+1]=mu1(j+1);
a[0]=1.0/(2.0+S);
b[0]=u[0][j+1]+u[1][j]*S+f(1,
for(i=1;i<n-1;i++)
{
a[i]=1.0/(2.0+S-a[i-1]);
b[i]=a[i-1]*b[i-1]+u[i+1][j]*
}
u[n][j+1]=mu2(j+1);
for(i=n-1;i>0;i--)
u[i][j+1]=a[i-1]*(b[i-1]+u[i+
}
printf("t \\ x");
for(i=0;i<=n;i++)
printf("%6.2f",H*i);
printf("\n");
for(j=0;j<=m;j++)
{
printf("\n%.2f ",L*j);
for(i=0;i<=n;i++)
printf("%6.2f",u[i][j]);
}
delete a;
delete b;
for(i=0;i<=n;i++)
delete u[i];
delete[] u;
printf("\n\nPress any key to continue...");
getch();
}
Пример работы программы:
Информация о работе Решение уравнений параболического типа методом сеток