51526

Диференціальні рівняння у частинних похідних

Лабораторная работа

Информатика, кибернетика и программирование

Проведемо дискретизацію крайових умов отримаємо: Початкову матрицю обираємо як нульову. На кожній ітерації перераховуємо значення елементів матриці за попередніми формулами. Умова завершення

Украинкский

2014-02-12

52.85 KB

1 чел.

Науково-навчальний комплекс "Інститут прикладного системного аналізу"  

при Національному технічному університеті України "КПІ"

Кафедра математичних методів системного аналізу

Лабораторна робота № 2

з курсу "Чисельні методи"

на тему "Диференціальні рівняння у частинних похідних"

                                

                                       Виконав:    студент 3-го курсу

                                        групи КА-06

                                        Анікін Вадим

                                   Прийняв:  Коновалюк М. М.

Київ 2012

 Дано:  Еліптична задача. Розв'язати рівняння Лапласа

uxx + uyy = 0,     0 < x < L1; 0 < y < L2 

var

L1

L2

При x = 0

При x = L1

При y = 0

При y = L2

1

0.90

1.10

u(0, y) - ux(0, y) = g1

ux(L1, y) = g2

uy(x, 0) = g3

uy(x, L2) = g4

 Як точний розвязок беремо функцію:

вар

a

b

c

d

f

1

-0.30

1.50

0.70

0.50

1.30

u(x,y) = a (x2 - y2) + b x y + c x + d y + f

Ход работы:

Розіб’ємо відрізок на відрізків довжиною

  ,

а відрізок на відрізків довжиною

  .

Позначимо , ; , .

Нехай – це значення точного розв’язку рівняння, а – значення наближеного розв’язку.

Проведемо дискретизацію рівняння:

В нашому випадку  При :

Проведемо дискретизацію крайових умов отримаємо:

Початкову матрицю обираємо як нульову. На кожній ітерації перераховуємо значення елементів матриці за попередніми формулами. Умова завершення

Результат:

//Result.txt

1.3 1.353 1.412  1.477 1.548  1.625 1.708  1.797 1.892  1.993 2.1  2.213

1.367  1.435 1.509  1.589 1.675  1.767 1.865  1.969 2.079  2.195 2.317  2.445

1.428  1.511 1.6  1.695 1.796  1.903 2.016  2.135 2.26  2.391 2.528  2.671

1.483  1.581 1.685  1.795 1.911  2.033 2.161  2.295 2.435  2.581 2.733  2.891

1.532  1.645 1.764  1.889 2.02  2.157 2.3  2.449 2.604  2.765 2.932  3.105

1.575  1.703 1.837  1.977 2.123  2.275 2.433  2.597 2.767  2.943 3.125  3.313

1.612  1.755 1.904  2.059 2.22  2.387 2.56  2.739 2.924  3.115 3.312  3.515

1.643  1.801 1.965  2.135 2.311  2.493 2.681  2.875 3.075  3.281 3.493  3.711

1.668  1.841 2.02  2.205 2.396  2.593 2.796  3.005 3.22  3.441 3.668  3.901

1.687  1.875 2.069  2.269 2.475  2.687 2.905  3.129 3.359  3.595 3.837  4.085

Приложение:

//method.cpp

#include <iostream>

#include <fstream>

#include <math.h>

#include <vector>

using namespace std;

const double eps = 0.000001;

const double a = -0.3, b = 1.5, c = 0.7, d = 0.5, f = 1.3, l1 = 0.9, l2 = 1.1, h1 = 0.1, h2 = 0.1;

const int n1 = (int)(l1 / h1), n2 = (int)(l2 / h2);

 

double u(double x, double y)

{

 return a * (x * x - y * y) + b * x * y + c * x + d * y + f;

}

double g1(const double y)

{

return -a * y * y + (d - b) * y + f - c;

}

double g2(const double y)

{

return 2 * a * l1 + b * y + c;

}

double g3(const double x)

{

return b * x + d;

}

double g4(const double x)

{

return - 2 * a * l2 + b * x + d;

}

double norm(vector< vector<double> >& matr)

{

 double sk = 0;

   for(int i = 0; i < matr.size(); i++)

   {

       for(int j = 0; j < matr[i].size(); j++)

 {

  sk += matr[i][j] * matr[i][j];

 }

   }

 return sqrt(sk);

}

int copy_matr(const vector< vector<double> > & source, vector< vector<double> > & cop)

{

 for(int i = 0; i < cop.size(); i++)

{

 for(int j = 0; j < cop[i].size(); j++)

 {

  cop[i][j] = source[i][j];

 }

}

   return 0;

}

int sub_matr(const vector< vector<double> > & source1, const vector< vector<double> > & source2, vector< vector<double> > & cop)

{

 for(int i = 0; i < cop.size(); i++)

{

 for(int j = 0; j < cop[i].size(); j++)

 {

  cop[i][j] = source1[i][j] - source2[i][j];

 }

}

   return 0;

}

int out_matrix(const vector< vector<double> > & matr, char * name_file, char * coment)

{

   ofstream f_out(name_file, ios :: app);

   f_out << coment;

   int size = matr.size();

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

   {

       int size_i = matr[i].size();

       for(int j= 0; j< size_i; j++)  if(!f_out.fail()) f_out << matr[i][j] << "\t";

       f_out << endl;

   }

   f_out << endl;

   return 0;

}

int main()

{

 char* name_file = "result.txt";

ofstream f_ou(name_file, ios :: trunc);

f_ou.close();

ofstream f_out(name_file, ios :: app);

vector< vector<double> > now(n1 + 1, vector<double>(n2 + 1));

vector< vector<double> > last(n1 + 1, vector<double>(n2 + 1));

vector< vector<double> > temp(n1 + 1, vector<double>(n2 + 1));

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

{

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

 {

  last[i][j] = 0;

 }

}

copy_matr(last, now);

out_matrix(last, name_file, "pochatkova:\n");

f_out << norm(last) << endl;

 int i = 0;

 do

{

 copy_matr(now, last);

 for(int j = 0; j <= n2 - 1; j++)

 { now[0][j] = (now[1][j] + h1 * g1(j * h2)) / (h1 + 1); }

 

 for(int j = 0; j <= n2 - 1; j++)

 { now[n1][j] = now[n1-1][j] + h1 * g2(j * h2); }

 for(int i = 1; i <= n1 - 1; i++)

 { now[i][0] = now[i][1] - h2 * g3(i * h1); }

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

 { now[i][n2] = now[i][n2-1] + h2 * g4(i * h1); }

 for(int i = 1; i <= n1 - 1; i++)

 {

  for(int j = 1; j <= n2 - 1; j++)

  {

   now[i][j] = ( now[i-1][j] + now[i+1][j] + now[i][j-1] + now[i][j+1] ) / 4;

  }

 }

 i++;

 f_out << i << " ";

 out_matrix(now, name_file, "iter:\n");

 f_out << norm(last) << endl;

 sub_matr(now, last, temp);

} while( h1 * norm(temp) >= eps);

vector< vector<double> > real(n1 + 1, vector<double>(n2 + 1));

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

{

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

 {

  real[i][j] = u(i * h1, j * h2);

 }

}

out_matrix(real, name_file, "real:\n");

f_out << "norm(real)=" << norm(real) << endl;

 return 0;

}


 

А также другие работы, которые могут Вас заинтересовать

53687. Работа с клавиатурным тренажером 39.5 KB
  Цели: Научить работать с клавиатурным тренажером Потренироваться печатать. Работа по теме урока: Сейчас мы приступим к работе с клавиатурным тренажером. Работа с клавиатурным тренажером. Работа в Блокноте 10 25 4.
53688. Информационные процессы 136 KB
  Цели урока: Ввести понятие информационных процессов познакомить учащихся с понятиями: источник и приемник информации канал связи носитель информации исполнитель. Задачи: Образовательная: изучить понятия: информационные процессы виды информационных процессов; изучить способы хранения передачи и обработки информации; научить приводить примеры получения передачи и обработки информации; научить учеников решать практические задачи на использование изученных понятий. Что такое информация для человека Назовите некоторые...
53690. Рисование с натуры натюрморта «Дары осени» 69 KB
  Ознакомить с натюрмортом как жанром изобразительного искусства; научить выполнять изображение с натуры, различать оттенки красок; развить умение анализировать форму и цветовую окраску овощей.
53691. Рисование с натуры яблока 68.5 KB
  Цели урока: Образовательная: научиться рисовать яблоко с натуры. Воспитательные: воспитать интерес к рисункам с натуры; способствовать формированию положительного отношения к изобразительному искусству пробудить желание творить. Задачи: научить построению рисунка с натуры с применением пропорции; способствовать развитию чувства цвета; стимулировать учащихся к самоконтролю и дисциплине.
53692. Объемные изображения в скульптуре. Тобольская резная кость 62.5 KB
  Словарь: скульптура лепка рельеф План урока Организационный момент. Слово скульптура нам известно уже давно но вот какими возможностями обладает объёмное изображение какие виды скульптурных изображений существуют мы познакомимся сегодня на уроке. Скульптура – древнейший вид искусства возникший на заре существования человечества. Что же представляет собой скульптура и чем она отличается от других видов искусства В живописи изображение создаётся красками на плоскости холста.
53693. Декоративное рисование «Кокошник» 38.5 KB
  Давайте проверим все ли пришли сегодня на урок или кто то решил в такую замечательную погоду пойти вместо школы погулять в парке отмечаются присутствующие У: А какое у нас сейчас время года ребята А какой месяц А число Не забываем что отвечать нужно полным ответом. Ответ детей если затрудняются оказать помощь У: Молодцы ребята У: сегодня на уроке мы будем рисовать красивый головной убор русских девушек кокошник. Подготовительная беседа:...
53694. Идет дождь 32.5 KB
  А какое у нас сейчас время года ребята А какой месяц А число Не забываем что отвечать нужно полным ответом. Ответ детей если затрудняются оказать помощь У: Молодцы ребята У: так как сегодня утром шел дождь темой нашего сегодняшнего урока будет идет дождь мы будем рисовать различные виды капелек дождя. Подготовительная беседа: У: ребята посмотрите за окно.
53695. Родная природа в стихотворениях поэтов XX века. Анна Андреевна Ахматова 74 KB
  Учитель: Перед тем как продолжить тему Родная природа в стихотворениях поэтов ХХ века мы с вами вспомним стихотворения которые уже прошли. Не торопитесь; и выделяйте фразовым ударением учитель пишет фразовое ударение на доске ключевые слова слова которые передают настроение лирического героя. Вначале – кто вызвался сам читают на выбор стихотворение целиком; затем учитель вызывает тех кто не был на прошлом уроке читают указанное учителем стих. Учитель:...