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;

}


 

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

70927. Планування виробництва продукції 131 KB
  Структура й показники виробничої програми підприємства Важливим розділом поточного плану підприємства є виробнича програма або план виробництва та реалізації продукції. Виробнича програма визначає необхідний обсяг виробництва продукції у плановому періоді який за номенклатурою...
70928. Оперативно-календарне планування і контроль 100 KB
  Основними завданнями оперативно-календарного планування на підприємстві є: забезпечення ритмічного виробництва відповідно до встановлених обсягів та номенклатури виготовлення і збуту продукції; забезпечення рівномірності та комплектності завантаження устаткування...
70929. Матеріально-технічне забезпечення виробництва. Постачання матеріально-технічних ресурсів на робочі місця 247 KB
  Вивчення ринку сировини й матеріалів. Запаси матеріалів та регулювання їхніх обсягів. Однак служба матеріальнотехнічного забезпечення повинна перевіряти замовлення виробничих підрозділів з огляду на відповідність замовлених матеріалів технічним умовам та даним обліку наявних...
70930. Забезпечення операційної діяльності виробничою потужністю 176 KB
  Виробнича потужність підприємства - це потенційно максимально можливий випуск продукції необхідної номенклатури і якості протягом планового періоду при повному завантаженні обладнання та виробничих площ у прийнятому режимі роботи з урахуванням застосування передової технології організації...
70931. Виробнича інфраструктура 248 KB
  Прикладом є виробництво різних видів енергії та тепла деталей для ремонту обладнання технологічного оснащення та інструменту. Виробнича програма енергетичного цеху в натуральних показниках охоплює такі види робіт: виробництво та розподіл електричної енергії в умовах...
70932. Витрати виробництва 112.5 KB
  Залежність витрат від зміни обсягів господарської діяльності Обсяг господарської діяльності Змінні витрати Постійні витрати Витрати по підприємству разом по підприємству на одиницю продукції разом по підприємству на одиницю продукції разом по підприємству на одиницю...
70933. Фінансове планування і контроль на підприємстві 162.5 KB
  Перелік основних бюджетів підприємства за їхнім цільовим призначенням Операційні Фінансові бюджет доходу; бюджет виробництва продукції виробнича програма; бюджет прямих матеріальних витрат; бюджет обсягів придбання матеріалів; бюджет витрат на оплату праці; бюджет загальновиробничих витрат...
70934. Планування і контроль оновлення продукції 134 KB
  В умовах ринкової економіки планування виробничої діяльності підприємства орієнтується на максимальне задоволення попиту потенційних споживачів продукції (робіт, послуг). Протягом свого життєвого циклу продукція на ринку переживає декілька етапів.
70935. Організаційно-технічний розвиток підприємства 91 KB
  Виробничий процес на промисловому підприємстві здійснюється постійно в усіх його підрозділах. Технічний же прогрес залежно від обсягу наявних ресурсів та технічної політики відбувається періодично. Однак, загалом для підприємства він повинен носити безперервний характер.