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;

}


 

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

15725. Этапы совершенствования управления качеством в Японии 40 KB
  Этапы совершенствования управления качеством в Японии. Если в довоенный период к числу наиболее знаменательных событий произошедших в Японии и связанных с совершенствованием управления качеством можно отнести лишь установление в 1921 г. технических стандартов то в...
15726. Бетоносмеситель СБ-103 341 KB
  Курсовая работа По дисциплине: Автоматизация проектирования на тему: Бетоносмеситель СБ103 СОДЕРЖАНИЕ КЛАССИФИКАЦИЯ БЕТОНОСМЕСИТЕЛЕЙ ПРИНЦИП РАБОТЫ И НАЗНАЧЕНИЕ МАШИНЫ ТЕХНИЧЕСКАЯ ХАРАКТЕРИСТИКА БЕТОНОСМЕСИТЕЛЯ СБ10...
15727. АТП на 150 автомобилей ВАЗ-2104 и 200 грузовых автомобилей ГАЗель 364.5 KB
  Расчетнопояснительная записка к курсовому проекту на тему: АТП на 150 автомобилей ВАЗ2104 и 200 грузовых автомобилей ГАЗель Введение Курсовое проектирование по кафедре Автомобильный транспорт имеет своей целью закрепление знаний по дисциплине Производственноте...
15728. Дизельные генераторы KDE12EA3 157.97 KB
  Дизельные генераторы KDE12EA3 Дизельные генераторы KIPOR KDE12EA3 имеют новый автоматический регулятор напряжения обеспечивающий высокую точность значения выходного напряжения и мощный дизельный двигатель KD2V86F. Генератор обладает номинальным напряжением 380 / 220В номинальной с
15729. ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ СИСТЕМ ПИТАНИЯ АВТОМОБИЛЬНЫХ ДВИГАТЕЛЕЙ 116.9 KB
  Реферат на тему ТЕХНИЧЕСКОЕ ОБСЛУЖИВАНИЕ СИСТЕМ ПИТАНИЯ АВТОМОБИЛЬНЫХ ДВИГАТЕЛЕЙ Техническое обслуживание системы питания карбюраторного двигателя Неисправности системы питания заключаются в...
15730. Маркировка автомобильных шин 140.17 KB
  Маркировка автомобильных шин Автомобильные шины маркируются алфавитноцифровым кодом который обозначается на борту шины. Этот код определяет размеры шины и некоторые из ее ключевых характеристик типа индикаторов нагрузки и скорости. Иногда внутренний борт шины со
15731. Проект организации ТО и ремонта МТП в ЦРМ хозяйства с годовым объемом работ 33000 часов 151.16 KB
  КУРСОВАЯ РАБОТА Тема: Проект организации ТО и ремонта МТП в ЦРМ хозяйства с годовым объемом работ 33000 часов РЕФЕРАТ Пояснительная записка курсового проекта содержит 39 листов машиннопечатного текста формата А4 13 таблиц и два приложения список использованно
15732. МОДЕЛИРОВАНИЕ СОСТАВА МАШИННО-ТРАКТОРНОГО ПАРКА 369.5 KB
  Реферат по моделированию: МОДЕЛИРОВАНИЕ СОСТАВА МАШИННОТРАКТОРНОГО ПАРКА ВВЕДЕНИЕ За последние годы произошло значительное сокращение количества сельскохозяйственной техники в стране. Тяжелое финансовое положение предприятий нарушенный паритет цен на маши...
15733. ОСНОВНЫЕ ДАННЫЕ ДВИГАТЕЛЯ М-14П 422 KB
  КОНСТРУКЦИЯ ДВИГАТЕЛЯ М14П ОСНОВНЫЕ ДАННЫЕ ДВИГАТЕЛЯ М14П ОБЩИЕ СВЕДЕНИЯ Авиационный двигатель М14П поршневой четырехтактный бензиновый с воздушным охлаждением девятицилиндровый однорядный со звездообразным расположением цилиндров и с карб...