51087

Решение краевой задачи второго порядка для обыкновенных дифференциальных уравнений

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

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

Цель работы: Практическое использование методов численного решения краевой задачи. Дано: Дифференциальное уравнение с граничными условиями

Русский

2014-02-05

30.33 KB

3 чел.

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

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

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

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

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

на тему "Решение краевой задачи второго порядка для обыкновенных дифференциальных уравнений"

                                

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

                                        групи КА-06

                                        Анікін Вадим

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

Київ 2012

Цель работы: Практическое использование методов численного решения краевой задачи.

 Дано:  Дифференциальное уравнение с граничными условиями:

              

         

Ход работы:

Найдем численное решение краевой задачи  на отрезке [1.7;2] с шагом h=0,05, используя метод конечных разностей. Будем использовать разностные производные второго порядка точности:

 

Решим данню систему с помощью разложения Холецкого.

Результат:

//Result.txt

A:   -14       20       -5        0        0        0        0

    400     -798      380        0        0        0        0

      0      405     -798      355        0        0        0

      0        0      420     -798      320        0        0

      0        0        0      445     -798      275        0

      0        0        0        0      480     -798      220

      0        0        0        0       10      -40       30

b: 1.500 1.750 1.800 1.850 1.900 1.950 2.000

y: -1.278 -1.015 -0.782 -0.594 -0.450 -0.338 -0.233

A*y: 1.500 1.750 1.800 1.850 1.900 1.950 2.000

 Вывод: 

Мы нашли численное решение краевой задачи  на отрезке [1.7; 2] с шагом h=0,05, используя метод конечных разностей и метод Холецкого. Точность решения – три знака после запятой.

Приложение:

//method.cpp

#include <iostream>

#include <fstream>

#include <math.h>

include <conio.h>

using namespace std;

double pi(double y)

{

 return -0.5 * pow(y, 2);

}

double qi(double y)

{

 return 2;

}

double fi(double y)

{

 return y;

}

FILE * p;

void outV (double *v, char *name)

{

fprintf (p, name);

fprintf (p, "\n");

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

 fprintf (p, "%.3f ", v[i]);

fprintf (p, "\n"); fprintf (p, "\n");

}

void outM (double *m, char* name)

{

fprintf (p, name);

fprintf (p, "\n");

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

{

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

  fprintf (p, "%8.0f ", *(m + 7*i + j));

 fprintf (p, "\n");

}

fprintf (p, "\n");

}

double *Cholesky( double *A, double *b)

{

 double *X, l[7][7]={0}, c[7][7] = {0}, y[7], sum = 0, *LC;

X=(double *)calloc(7,10);

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

{

 l[i][0] = *(A+7*i);

 c[0][i] = *(A+i) / l[0][0];

}

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

{

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

 {

  sum = 0;

  if (i>=j)

  {

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

    sum += l[i][k] * c[k][j];

   l[i][j] = *(A+7*i+j) - sum;

  }

  if (i <= j)

  {

   sum = 0;

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

    sum += l[i][k] * c[k][j];

   c[i][j] = (*(A+7*i+j) - sum) / l[i][i];

  }

  

 }

}

fprintf (p, "\n");

LC=(double *)calloc(49,10);

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

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

  for (int k=0;k < 7; k++)

   *(LC+7*i+j)+=l[i][k]*c[k][j];

y[0]=b[0]/l[0][0];

 for (int i = 1; i < 7; i++)

{

 sum = 0;

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

  sum += l[i][k] * y[k];

 y[i]=(b[i]-sum)/l[i][i];

}

*(X+6)=y[6];

 for (int i = 5; i>=0; i--)

{

 sum = 0;

 for (int k = i+1; k < 7; k++)

  sum += c[i][k] * (*(X+k));

 *(X+i)=(y[i]-sum);

}

outV(X, "X: ");

 return X;

}

void check( double *A, double *X)

{

 double sum[7]={0,0,0,0,0,0,0}, *I;

I=(double *)calloc(49,10);

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

{

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

 sum[i] += *(A + 7 * i + j) * (*(X+j));

}

outV(sum, "A*x: ");

}

int main()

{

 double *A, *b, *X, aa = 1.7, bb = 2, h = 0.05, alpha0 = 1, alpha1 = 0.5, betta0 = 0, betta1 = 1;

 int N = (int)((bb - aa) / h) + 1;

p = fopen ("Result.txt","w");

A=(double*)calloc(N * N, 10);

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

{

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

  if (j == i - 1) A[N * i + j] = 1 / (h * h) - pi(j) / (2 * h); else

   if (j == i) A[N * i + j] = - 2 / (h * h) + qi(j); else

    if (j == i + 1) A[N * i + j] = 1 / (h * h) + pi(j) /

 (2 * h); else A[N * i + j] = 0;

}

A[0] = alpha0 - 3 * alpha1 / (2 * h); A[1] = 2 * alpha1 / h; A[2] = - alpha1 /

 (2 * h);

A[48] = betta0 + 3 * betta1 / (2 * h);

A[47] = -2 * betta1/ h;

A[46] = betta1 / (2 * h);

b=(double*)calloc(N, 10);

b[0] = 1.5; b[6] = 2;

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

 *(b + i) = fi(aa + i * h);

outM(A, "A: ");

outV(b, "b: ");

X=Cholesky(A, b);

check(A, X);

 return 0;

}


 

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

1165. Создание бизнес-плана предприятия ООО Китиара по производству обувных изделий 82 KB
  В курсовом проекте был составлен бизнес-план общества с ограниченной ответственностью Китиара. Данный бизнес-план позволяет получить необходимые денежные средства для реализации проекта
1166. Аланское государство и история Северного кавказа 81.5 KB
  Гибель Хазарского каганата и образование Аланского государства. Появление новых кочевых народов на Северном Кавказе. Завоевание монголо-татарами Северного Кавказа. Начало формирования современных народов населяющих Северный Кавказ их социально-экономические отношения.
1167. Преобразование приложений в оконные приложения 113.5 KB
  Включить контейнерный объект в основной класс, вставив вызовы его функций в функции, осуществляющие ввод-вывод в файл и очистку. Реализовать функции для вывода информации.
1168. Создание фильма Чарнобыль. Фантомы на студии БВЦ (Беларусь) 78 KB
  Предпосылки создания проекта. Построение драматургии звукового сопровождения. Звуковая экспликация. Выразительные средства и фактуры звукового сопровождения. Технические средства и стадии реализации проекта.
1169. Анализ безопасности жизнедеятельности 77 KB
  Метеорологические условия и освещенность на рабочих местах. Характеристика воздушной среды по запыленности и загазованности. Наличие потенциально опасных мест для работающих. Характеристика вибрации и шумовых установок. Возможность поражения рабочих электрическим током.
1170. Построение эпюр напряжения на элементах RC-цепи 71.5 KB
  Построить эпюры напряжения на элементах RC-цепи во время переходного процесса с применением системы моделирования EWB.Затем с помощью системы MATHCAD получить те же эпюры с помощью математических формул.
1171. Система ДАУ фирмы Камева 59.5 KB
  Электронная система ДАУ фирмы Камева (Швеция). Связанное управление частотой вращения ГД и разворотом лопастей ВРШ из РР. Раздельное управление частотой вращения ГД. Распределение нагрузки между параллельно работающими ГД корректировкой сигнала задания на регуляторы частоты вращения.
1172. Організаційно–економічне обгрунтування захисних заходів в АОЗТ Агро-союз Дніпропетровської області в 2011 році 52.5 KB
  Економічна ефективність галузі рослинництва. Економічна ефективність захисту рослин від шкідливих організмів. Експлуатаційні витрати. Витрати на амортизацію агрегату. Витрати на поточні ремонти та технічний догляд агрегату.
1173. Роль и значение полиграфии в системе рыночной экономии 29.5 KB
  Промышленность является фундаментом для общественного производства продукции и основой для развития экономических субъектов рыночной экономики. Промышленность характеризуется отраслевой структурой, на которую оказывают влияние следующие факторы: развитие научно-технического прогресса.