Методи розв’язування диференційних рівнянь у частинних похідних

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра автоматизованих систем управління

Інформація про роботу

Рік:
2011
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Чисельні методи в інформатиці

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет «Львівська політехніка» Кафедра автоматизованих систем управління Звіт до лабораторної роботи № 7 з курсу «Чисельні методи в інформатиці» на тему «Методи розв’язування диференційних рівнянь у частинних похідних» Львів – 2011 Мета роботи: Засвоїти теоретичний матеріал і методи розв’язування диференційних рівнянь у частинних похідних, набути практичні навики знаходження їхніх наближених значень. Короткі теоретичні відомості Із розв’язуванням диференційних рівнянь у частинних похідних інженерам і дослідникам доводиться зустрічатися в багатьох областях науки і техніки, в аеро- і гідродинаміці, ядерній фізиці, радіозв’язку тощо. Розрізняють три типи диференційних рівнянь другого порядку: – еліптичні, при B2 − 4AC < 0 ; – параболічні, при B2 − 4AC = 0; – гіперболічні, при B2 − 4AC > 0. Рівняння можуть переходити з одного вигляду до іншого в залежності від значень коефіцієнтів. Існують два методи розв’язування диференційних рівнянь у частинних похідних: різницевий метод (метод скінченних різниць) і метод скінченних елементів. У сучасній прикладній математиці обидва методи розглядаються як інтерпретації використання загальної теорії різницевих схем до розв’язування диференційних рівнянь у частинних похідних . В основі методу cкінченних елементів лежить варіаційне числення. Диференційне рівняння, яке описує задачу, та відповідні граничні умови використовують для формулювання варіаційної задачі. В методі скінченних елементів фізична задача замінюється її кусково-гладкою моделлю. Цей метод, незважаючи на те, що він вимагає складної постановки задачі, високої кваліфікації та досвіду користувача, є неуніверсальним (кожний розв’язок застосовується лише для конкретної задачі). Метод скінченних елементів знайшов широке використання для розв’язування спеціальних задач в теоретичній механіці, гідродинаміці, теорії поля, однак, він складний, вимагає серйозної підготовки і знань в конкретній області використання. Тому при розв’язуванні задач автоматики та систем керування частіше використовується різницевий метод. 1. Різницевий метод. Для числового розв’язування диференційних рівнянь другого порядку в частинних похідних найчастіше використовується двовимірна прямокутна сітка. Центрально-різницеві шаблони, які застосовують на двовимірній квадратній сітці з кроком h , зображеній на рисунку 1 (індекс j надається незалежній змінній y , а i відноситься до x ), можуть бути отримані аналогічно як і в одновимірному випадку.  Рис. 1. Квадратна сітка. 2. Розв’язування різних типів диференційних рівнянь у частинних похідних. Практичні методи і алгоритми розв’язування різних типів диференційних рівнянь в частинних похідних мають свої особливості і вимагають окремого розгляду на прикладі найбільш розповсюджених задач. 2.1. Еліптичні рівняння. До еліптичних рівнянь зводиться багато різних фізичних задач: розрахунок напружень, які виникають при пружному скруті довгого циліндричного стрижня; розподіл електричних напруг на площині, що проводить струм; задача про стаціонарні течії тепла в двовимірному тілі. Розглянемо класичну задачу Діріхле для рівняння Лапласа в прямокутній області, що формулюється таким чином: знайти неперервну функцію f(x,y), яка в прямокутній області Ω = {(x, y) | 0 ≤ x ≤ a, 0 ≤ y ≤ b} задовольняє рівняння Лапласа:  і приймає на границі області задані значення: x=0; f (0,y) = f1 (y), x=a; f (a,y) = f2 (y), y=0; f (x,0) = f3 (x), y=b; f (x,b) = f4 (x). Введемо в області розв’язання двовимірну сітку з кроком h по осі x і l по осі y. Тоді, користуючись прийнятими в попередніх розділах позначеннями і апроксимуючи рівняння Лапласа різницевим рівнянням, отримаємо таку систему лінійних рівнянь (приймемо для спрощення l=h): (2) при i=1,2,…,n-1; j=1,…,m-1. Ця система рівнянь має велику кількість нульових елементів і задовольняє умови збіжності при використанні ітераційних методів. Найбільше використання для розв’язання таких систем знайшов метод Гаусса-Зейделя, який, коли застосовується до еліптичних різницевих рівнянь, називається методом Лібмана або методом послідовних зміщень. Порядок ітерацій можна простежити, переписавши систему (2) у вигляді: де верхніми індексами позначено порядковий номер ітерації: m – попередня, m+1 – наступна. Зазвичай вважають  для всіх i, j. Система рівнянь легко розв’язується на ПЕОМ. Взагалі кажучи, будь-які еліптичні рівняння, які не містять , зводяться до систем різницевих рівнянь, які можна розв’язувати як методом Лібмана, так і іншими ітераційними методами (Якобі, послідовної верхньої релаксації та ін.), оскільки для них виконуються умови збіжності. Для еліптичних рівнянь, які містять , в загальному вигляді, питання про збіжність ітераційних методів не має теоретичного розв’язку і необхідно розглядати отриману систему рівнянь в кожному конкретному випадку.  2.2. Гіперболічні рівняння. В інженерній практиці найчастіше зустрічається гіперболічне рівняння в частинних похідних – хвильове рівняння, яке описує різні види коливань: коливання струни або мембрани, розповсюдження звукових хвиль у різних середовищах тощо. В загальному вигляді задача формулюється таким чином: знайти функ-цію f (x, t), яка задовольняє всередині області Ω={(x, t) , 0 ≤ x ≤ a, 0 ≤t ≤ T } рівняння , початкові  і граничні умови  Оскільки заміна змінних t =c·t приводить рівняння до вигляду:  то надалі приймаємо с=1. Переходячи до різницевого рівняння на сітці з кроком h по x й τ по t з центральними різницями, отримаємо Якщо ввести  , то вираз для fi, j +1 прийме вигляд: fi, j+1 = r² ( fi+1, j + fi−1, j ) + 2(1 − r² ) fi, j − fi, j− 1. (3) Текст програми: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "RiznUn.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" const n=4,m=4; TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { float x[n]={0}, y[m]={0}, u[n+1][m+1]={0}; int i,j,m1,n1; float a,b,hx,hy,s,t,w,r,e; a=StrToFloat(LabeledEdit1->Text); b=StrToFloat(LabeledEdit2->Text); e=StrToFloat(LabeledEdit3->Text); hx=a/n; hy=b/m; t=(hx/hy)*(hx/hy); for (j=0; j<=m; j++) { y[j]=j*hy; u[0][j]=0; u[n][j]=y[j]; } for (i=0; i<=n; i++) { x[i]=i*hx; u[i][0]=0; u[i][m]=x[i]; } for (i=1; i<=n; i++) for (j=1; j<=m; j++) u[i][j]=1; do { w=0; for (i=1; i<=n; i++) for (j=1; j<=m; j++) { s=(u[i-1][j]+u[i+1][j]+t*(u[i][j-1]+u[i][j+1]))/(2*(1+t)); r=abs(s-u[i][j]); if (r>w) w=r; u[i][j]=s; } } while (w>=e); StringGrid1->RowCount=n+2; StringGrid1->ColCount=m+2; StringGrid1->Cells[0][0]="x\\y"; for (i=0; i<=n; i++) { for (j=0; j<=m; j++) StringGrid1->Cells[j+1][i+1]=FloatToStrF(u[i][j],ffFixed,6,3); StringGrid1->Cells[0][i+1]=FloatToStrF(x[i],ffFixed,6,3); } for (j=0; j<=m; j++) StringGrid1->Cells[j+1][0]=FloatToStrF(y[j],ffFixed,6,3); } //--------------------------------------------------------------------------------- Результат виконання програми:  Висновок: На цій лабораторній роботі я засвоїв теоретичний матеріал і методи розв’язування диференційних рівнянь у частинних похідних, набув практичні навики знаходження їхніх наближених значень.
Антиботан аватар за замовчуванням

20.02.2013 20:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!