Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Решение задачи Неймана для уравнения Пуассона в прямоугольной области

Тип: курсовая работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Разработка программы на языке С++ для решения дифференциального уравнения Лапласа в прямоугольной области методом сеток. Численное решение задачи Дирихле для уравнения Лапласа, построение сетки и итерационного процесса. Листинг и результат программы.
Краткое сожержание материала:

Размещено на

Курсовая работа

«Решение задачи Неймана для уравнения Пуассона в прямоугольной области»

Содержание

Введение

Аннотация

1. Численная постановка задачи

2. Решение заданного примера

3. Листинг программы

4. Результаты работы программы

Литература

Введение

Актуальность решения уравнения Пуассона состоит в том что, при вычислении решения системы уравнений Навье-Стокса, алгоритм решения этой системы происходит в несколько этапов одним из сложных является решение уравнения Пуассона.

Аннотация

Разработать программу для решения дифференциального уравнения Лапласа:

в прямоугольной области ABCD, с вершинами A(0;0), B(0:1), C(1;1), D(1,0), шагом h=l/n, где n-количество узлов, принимающее условия Дирихле на всех границах кроме правой (на правой поставлено условие Неймана). Уравнение решается методом сеток, c точностью е= 0,0000001. Программа разработана на языке C++.

  • 1. Численная постановка задачи

Уравнение Лапласа является модельным для эллиптических уравнений в частных производных.

Некоторые важные задачи, часто встречающиеся в приложениях, сводятся к решению одного эллиптического уравнения. К ним относятся задачи расчета дозвукового безвихревого (потенциального) течения газа и определения стационарного поля температуры в твердом теле.

В данной работе требуется решить, конечно - разностную задачу Дирихле или Неймана для уравнения Лапласа в прямоугольной области т. е. найти непрерывную функцию u(х,у), удовлетворяющую внутри многоугольной области

уравнению Лапласа

(1)

и принимающую на границе области заданные значения, т. е.

, ,

, ,

где f1=0, f2=0, f3=0, f4=0.

Будем считать, что u(х,у) непрерывна на границе области , т. е.

,

,

,

.

Выбрав шаги h, l по x и y соответственно, строим сетку:

, , , ,

где , .

Вводя обозначения

,

аппроксимируем частные производные и в каждом внутреннем узле сетки центральными разностными производными второго порядка

,

и заменим уравнение Лапласа конечно-разностным уравнением

, (2)

, .

Погрешность замены дифференциального уравнения разностным, составляет величину .

Уравнения (2) вместе со значениями в граничных узлах образуют систему линейных алгебраических уравнений относительно приближенных значений функции и(х, у) в узлах сетки . Наиболее простой вид имеет эта система при :

, , , , (3)

, .

При получении сеточных уравнений (3) была использована схема узлов. Набор узлов, используемых для аппроксимации уравнения в точке, называется шаблоном. В данной работе используется шаблон типа «крест».

Численное решение задачи Дирихле для уравнения Лапласа в многоугольнике состоит в нахождении приближенных значений искомой функции u(х,у) во внутренних узлах сетки. Для определения величин требуется решить систему линейных алгебраических уравнений (3).

В данной работе она решается методом минимальных невязок, который состоит в построении последовательности итераций вида:

,

где - невязка

- итерационный параметр

(верхним индексом s обозначен номер итерации). При последовательность сходится к точному решению системы (3). В качестве условия окончания итерационного процесса можно принять

.

Таким образом, погрешность приближенного решения, полученного методом сеток, складывается из двух погрешностей: погрешности аппроксимации дифференциального уравнения разностными значениями; погрешности, возникающей в результате приближенного решения системы разностных уравнений (3).

Известно, что описанная здесь разностная схема обладает свойством устойчивости и сходимости. Устойчивость схемы означает, что малые изменения в начальных данных приводят к малым изменениям решения разностной задачи. Только такие схемы имеет смысл применять в реальных вычислениях. Сходимость схемы означает, что при стремлении шага сетки к нулю () решение разностной задачи стремится к решению исходной задачи. Таким образом, выбрав достаточно малый шаг h, можно как угодно точно решить исходную задачу.

Пример решения такой задачи Дирихле, приведен в решении заданного примера.

2. Решение заданного примера

программа уравнение лаплас прямоугольный

Используя метод сеток, составить приближенное решение задачи Дирихле для уравнения Лапласа (1).

Решение получить в квадрате ABCD, с вершинами A(0;0), B(0:1), C(1;1), D(1,0) шагом h=l/n, где n-количество узлов, принимающее условия Дирихле на всех границах кроме правой (на правой границе поставлено условие Неймана).

; ; ; .

Систему линейных алгебраических уравнений решить по методом минимальных невязок, при е=0,0000001.

1) Построим сетку с шагом h=l=0,2

2. Построим итерационный процесс

В виде начального приближения возьмем ,

условия окончания итерационного процесса: .

3. Листинг программы

#define _USE_MATH_DEFINES

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <iostream>

#include<windows.h>

using namespace std;

//объявление типов точек области начало

#define FictivePoint 0 //не расчетная точка

#define ActualPoint 1 //расчетная точка

#define TopPoint 2 //точка на верхней границе

#define RightPoint 3 //точка на правой границе

#define BottomPoint 4 //точка на нижней границе

#define LeftPoint 5 //точка на левой границе

#define LeftBottomPoint 6 //точка на выпуклом угле

//объявление типов точек области конец

FILE *file;

//проверка на симетричность начало

double Simetric(int n,double **M)

{

int k=0;

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

if(M[i][j]==M[j][i])

{

k++;

}

}

}

if(k==n*n)

{

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

if(M[i][j]==M[j][i])

{

if(i!=j)

{

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 2 ) ;

}

if(i==j)

{

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 7 ) ;

}

cout<<M[i][j]<<" ";

}

}

cout<<endl;

}

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 2 ) ;

cout<<"Матрица симетрична!"<<endl;

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 7 ) ;

}

if(k!=n*n)

{

for(int i=0;i<n;i++)

{

for(int j=0;j<n;j++)

{

if(M[i][j]==M[j][i])

{

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 7 ) ;

cout<<M[i][j]<<" ";

}

if(M[i][j]!=M[j][i])

{

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 4 ) ;

cout<<M[i][j]<<" ";

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 7 ) ;

}

}

cout<<endl;

}

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 4 ) ;

cout<<"Матрица не симетрична!"<<endl;

SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , 7 ) ;

}

return 0;

}

//проверка на симетричность конец

//проверка на знакоопределенность н...

Другие файлы:

Решение краевых задач. Метод функции Грина
Решение первой задачи, уравнения Пуассона, функция Грина. Краевые задачи для уравнения Лапласа. Постановка краевых задач. Функции Грина для задачи Дир...

Метод сеток
Решение конечно-разностной задачи Дирихле для уравнения Лапласа в прямоугольной области. Погрешность замены дифференциального уравнения разностным. Ис...

Исследование возможностей пакета MathCAD
Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом...

Решение задачи Дирихле для уравнения Пуассона в квадратной области
Простейшая разностная схема для задачи Дирихле: построение, аппроксимация и устойчивость. Описания метода установления. Анализ алгоритмов, реализующих...

Решение двумерного уравнения Пуассона методом блочных итераций
Создание параллельной программы на языке программирования высокого уровня С с расширением MPI и аналогичной программы на OpenMP для решения двумерного...