Розв’язування звичайних диференційних рівнянь на ЕОМ. Задача Коші
Аналіз найвідоміших методів розв’язування звичайних диференціальних рівнянь і їх систем, користуючись рекомендованою літературою. Розробка відповідної схеми алгоритму. Розв’язання системи звичайних диференціальних рівнянь в за допомогою MathCAD.
Рубрика | Математика |
Вид | лабораторная работа |
Язык | украинский |
Дата добавления | 21.10.2014 |
Размер файла | 412,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Лабораторна робота
Розв'язування звичайних диференційних рівнянь на ЕОМ. Задача Коші
Тема: Розв'язування звичайних диференційних рівнянь на ЕОМ. Задача коші
Мета роботи: вивчення алгоритмів чисельних методів розв'язання звичайних диференціальних рівнянь (ЗДР) і систем ЗДР на ЕОМ.
Порядок виконання роботи
1. Ознайомитись з відомими методами розв'язування ЗДР і систем ЗДР, користуючись рекомендованою літературою.
2. Скласти схему алгоритму розв'язування системи ЗДР методом, запропонованим викладачем.
3. Скласти програму розв'язування системи ЗДР алгоритмічною мовою за вказівкою викладача.
4. Використовуючи дані відповідного варіанту (табл. 1), розв'язати систему ЗДР на ЕОМ (початкові дані та результати надрукувати).
5. Розв'язати систему ЗДР в середовищі MathCAD.
6. Порівняти результати, які отримані при виконані пунктів 4,5, зробити висновки.
7. Оформити звіт.
Примітки: пункти 1-3 повинні бути виконані до початку занять у лабораторії.
Варіанти лабораторної роботи наведені в табл. 1.
Опис роботи
1. Для розв'язування N звичайних диференційних рівнянь необхідно розробити:
основну програму, яка виконує опис даних, введення початкових даних, відкликання підпрограми (або підпрограм), розв'язування системи ЗДР, вивід початкових даних та отриманих результатів на друкування;
підпрограму (або декілька підпрограм) розв'язування системи ЗДР методами запропонованими викладачем.
підпрограму побудови графіків;
підпрограму - функцію, яка складається з правих частин системи рівнянь.
2. В список параметрів підпрограм слід включити такі параметри: вхідні
N - число ЗДР у системі;
Х - параметр інтегрування;
Н - крок інтегрування;
P - ім'я зовнішньої підпрограми, яка обчислює праві частини системи ЗДР;
F - масив з N дійсних чисел (значення похідних). Для деяких методів цей параметр може бути вихідним;
E - точність розв'язку (використовується в багатоточкових методах (методах прогнозу та корекції));
вихідні
У - масив із N дійсних чисел (розв'язок системи);
Х - параметр інтегрування.
Примітка: результати розв'язання системи звичайних диференційних рівнянь на ЕОМ бажано звести у таку таблицю:
Проміжок інтегрування A-B
Крок інтегрування H=…
1. Підпрограма розв'язування систем ЗДР не повинна, бажано, залежати від параметрів системи та від кількості рівнянь системи.
2. Результати розв'язку системи ЗДР необхідно представляти в табличній та графічній формах.
3. Якщо в завданні не задано проміжок інтегрування, його необхідно визначити експериментальним шляхом, аналізуючи результати інтегрування.
Розв'язати на відрізку [0,3] з кроком 0,1 задачу Коші для системи рівнянь 2-го порядку:
Хід роботи
1. Схема алгоритм розв'язання системи ЗДР методом Рунге-Кутта зображена на рисунку 1.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Рисунок 1 - Схема алгоритму методу Рунге-Кутта
Лістинг програми:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <math.h>
#define K 2
float eps=0.0001;
typedef struct E1
{
float x;
float y0;
float y1;
};
void R_Kutt (int N, float x, float *y, float h);
void System (float x, float *Y, float *F);
int main()
{
int i=0, N=0;
float t0, tn, h=0.05, *X=NULL,*y=NULL, **Y=NULL, x=0.0;
float y1=0, y2=0.1;
printf («Vvedite granicu:\n»);
scanf («%f % f»,&t0,&tn);
printf («Vvedite shag h:\n»);
scanf («%f»,&h);
printf («\nVvedite y1_0:»);
scanf («%f»,&y1);
printf («\nVvedite y2_0:»);
scanf («%f»,&y2);
N=(tn-t0)/h +1; ///kilkist vidrizkiv
x=t0;
X=(float*) calloc (N, sizeof(float));
if(! X) exit(1);
Y=(float**) calloc (K, sizeof(float));
if(! Y) exit(1);
for (i=0; i<K; i++)
{
Y[i]=(float*) calloc (N, sizeof(float));
if (! Y[i]) exit(1);
}
y=(float*) calloc (K, sizeof(float));
if(! y) exit(1);
y[0]=y1;
y[1]=y2;
// *************
for (i=0; i<N; i++)
{
Y[0] [i]=y[0];
Y[1] [i]=y[1];
X[i]=x;
R_Kutt (K, x, y, h);
x=x+h;
}
// ********************
printf («\n# X Y1 Y2 \n\n»);
for (i=0; i<N; i++)
{
printf («%d\t%.4f\t\t%.4f\t\t%.4f\n», i, X[i], Y[0] [i], Y[1] [i]);
}
// ********************
_getch();
free(X);
for (i=0; i<K; i++)
free (Y[i]);
free(Y);
free(y);
return 0;
}
// ****************
void R_Kutt (int N, float x, float *y, float h)
{
int i=0;
float *k1=NULL, *k2=NULL, *k3=NULL, *k4=NULL, *y_temp=NULL, *F=NULL;
k1=(float*) calloc (N, sizeof(float));
k2=(float*) calloc (N, sizeof(float));
k3=(float*) calloc (N, sizeof(float));
k4=(float*) calloc (N, sizeof(float));
y_temp=(float*) calloc (N, sizeof(float));
F=(float*) calloc (N, sizeof(float));
if (! k1 ||! k2 ||! k3 ||! k4 ||! y_temp ||! F) exit(1);
System (x, y, F);
for (i=0; i<N; i++)
{
k1 [i]=h*F[i];
y_temp[i]=y[i]+0.5*k1 [i];
}
x=x+h*0.5;
System (x, y_temp, F);
for (i=0; i<N; i++)
{
k2 [i]=h*F[i];
y_temp[i]=y[i]+0.5*k2 [i];
}
System (x, y_temp, F);
for (i=0; i<N; i++)
{
k3 [i]=h*F[i];
y_temp[i]=y[i]+k3 [i];
}
x=x+h*0.5;
System (x, y_temp, F);
for (i=0; i<N; i++)
{
k4 [i]=h*F[i];
y[i]=y[i]+(k1 [i]+2.0*k2 [i]+2.0*k3 [i]+k4 [i])/6;
}
// ***Free memory***
free(k1);
free(k2);
free(k3);
free(k4);
free (y_temp);
free(F);
}
void System (float x, float *y, float *F)
{
F[0] =y[1];
F[1] = -0.01 * exp(-x);
}
3. Тестування програми
Результат виконання програми зображено на рисунку 2.
Рисунок 2 - Результат виконання програми
диференціальний рівняння алгоритм
4. Виконання програми в середовищі MathCad
Результат виконання програми в середовищі MathCad зображено на рисунку 3.
Рисунок 3 - Результат виконання програми в середовищі MathCad
Висновки: вивчили алгоритми наближених методів розв'язання систем лінійних алгебраїчних рівнянь на ЕОМ.
Размещено на Allbest.ru
Подобные документы
Поняття диференціальних рівнянь. Задача Коші і крайова задача. Класифікація методів для задачі Коші. Похибка методу Ейлера. Модифікований метод Ейлера-Коші. Пошук рішення задачі однокроковим методом Ейлера. Порівняння чисельного рішення з точним рішенням.
презентация [294,4 K], добавлен 06.02.2014Вивчення методів розв'язання лінійної крайової задачі комбінуванням двох задач Коші. Переваги та недоліки інших методів: прицілювання, колокацій, Гальоркіна, найменших квадратів та ін. Пошук єдиного розв'язку звичайного диференціального рівняння.
курсовая работа [419,2 K], добавлен 29.08.2010Розгляд крайової задачі для нелінійного рівняння другого порядку. Вивчення різницевого методу розв'язання крайових задач для звичайних диференціальних рівнянь. Метод прогонки - окремий випадок методу Гауса. Програма на алгоритмічній мові Turbo Pascal.
курсовая работа [49,7 K], добавлен 10.04.2011Класичні та сучасні наближені методи розв'язання диференціальних рівнянь та їх систем. Класифікація наближених методів розв'язування. Розв'язування трансцендентних, алгебраїчних і диференціальних рівнянь, методи чисельного інтегрування і диференціювання.
отчет по практике [143,9 K], добавлен 02.03.2010Етапи розв'язування задачі дослідження певного фізичного явища чи процесу, зведення її до диференціального рівняння. Методика та схема складання диференціальних рівнянь. Приклади розв'язування прикладних задач за допомогою диференціального рівняння.
контрольная работа [723,3 K], добавлен 07.01.2016Розв’язання систем лінійних рівнянь методом Жордана-Гауса. Еквівалентні перетворення системи, їх виконання як елемент методів розв’язування системи рівнянь. Базисні та вільні змінні. Лінійна та фундаментальна комбінації розв’язків, таблиці коефіцієнтів.
контрольная работа [170,2 K], добавлен 16.05.2010Основні етапи розв'язування алгебраїчних рівнянь: аналіз задачі, пошук плану розв'язування та його здійснення; перевірка та розгляд інших способів виконання. Раціоналізація розв'язування алгебраїчних рівнянь вищих степенів методом заміни змінних.
курсовая работа [229,8 K], добавлен 13.05.2013Класифікація методів для задачі Коші. Лінійні багатокрокові методи. Походження формул Адамса. Різницевий вигляд методу Адамса. Метод Рунге-Кутта четвертого порядку. Підвищення точності обчислень методу за рахунок подвійного обчислення значення функції.
презентация [1,6 M], добавлен 06.02.2014Розгляд найбільш відомих скінченно-різнецевих методів рішення рівнянь руху з непереривною силою: чисельна ітерація рівнянь Ньютона; алгоритм Бімана і Шофілда; метод Рунге-Кутта; методи Адамса, Крилова, Чаплигіна. Програма Рунге-Кутта на мові С#.
курсовая работа [359,5 K], добавлен 27.01.2011Задача Коші і крайова задача. Двоточкова крайова задача для диференціального рівняння другого порядку. Види граничних умов. Метод, заснований на заміні розв’язку крайової задачі розв’язком декількох задач Коші. Розв'язування систем нелінійних рівнянь.
презентация [86,2 K], добавлен 06.02.2014