Главная страница
Навигация по странице:

  • Программа решения дифуравнения первого порядка

  • Программа решения системы дифуравнения первого порядка

  • 2. Математическая формулировка задач

  • 3. Алгоритмизация задачи

  • 5. Блок-схема алгоритма 5 .1. Блок-схема алгоритма головной программы 5.2 Блок-схема подпрограммы–процедуры «

  • 5.4 Блок-схема подпрограммы–процедуры « NormCursor » 5.5 Блок-схема подпрограммы

  • 5.9 Блок-схема алгоритма подпрограммы–процедуры « Zastawka ».

  • 5.11 Блок-схема алгоритма подпрограммы–процедуры « MyMenu ».

  • Блок-схема алгоритма подпрограммы–процедуры « eilerrk ».

  • Текст исходной программы

  • Результаты работы программы

  • Информатика курсовая. Программа решения дифуравнения первого порядка


    Скачать 4.2 Mb.
    НазваниеПрограмма решения дифуравнения первого порядка
    АнкорИнформатика курсовая
    Дата08.09.2022
    Размер4.2 Mb.
    Формат файлаdocx
    Имя файлаPoyasnitelnaya_zapiska (1).docx
    ТипПрограмма
    #667820

    Министерство образования Республики Беларусь

    Белорусский национальный технический университет

    Факультет горного дела и экологии

    Кафедра «Горные машины»

    КУРСОВАЯ РАБОТА

    по дисциплине «Информатика»


    Тема: Программа решения дифуравнения первого порядка
    Руководитель: Евдокимчева Н.Н.

    Исполнитель: студент группы 10208119

    Сотников М.Ю.


    Минск 2020

    Министерство образования Республики Беларусь

    Белорусский национальный технический университет


    Кафедра «Горные машины»

    ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

    к курсовой работе

    по дисциплине «Информатика»

    Тема: Программа решения системы дифуравнения первого порядка

    Руководитель : Евдокимчева Н.Н.

    Исполнитель: студент группы 10208119

    Сотников М.Ю.
    Минск 2020

    Содержание

    Введение…………………………………………………....................……………….

    1. Постановка задачи……..................…………………………………………...….....6

    2. Математическая формулировка задачи………………………..…...........……7

    3. Алгоритмизация задачи………………………………………....................…...….9

    4. Идентификаторы программы……………………………….…………................11

    5. Блок – схема алгоритма………………………………………………....................12

    6. Текст исходной программы…………………………………………....................23

    7. Результаты работы программы……..........……………………………...............27

    8. Анализ результатов……………………………………………………....................29

    9. Инструкция по работе с программой…………………………………..............30

    Заключение…………………………………………………………….........................31

    Список использованных источников………………………………...................32

    Введение


    В курсовой работе в соответствии с заданием решается задача решения дифференциального уравнения первого порядка методом Эйлера и Рунге-Кутта.
    В данной пояснительной записке приводится описание последовательности шагов по составлению программы на алгоритмическом языке Turbo Pascal 7.0 и результаты применения этой программы. Рассматриваются вопросы математической формулировки и алгоритмизации задачи, разработки блок-схемы алгоритма ее решения, составления исходной Pascal-программы и реализация вычислений по составленной программе.
    Выбор вычисления, обращение к справке по программе и выход из программы обеспечивается с помощью специального меню. Ввод исходных данных и вывод результатов поиска минимума функции выполняется в отдельном окне.

    1. Постановка задачи


    Ставится задача составить программу решения системы дифференциального уравнения первого порядка методом Эйлера и Рунге-Кутта.

    Таким образом, программа должна обеспечивать возможность:

    • быстрой смены функции путем замены аналитического выражения ее правой части в подпрограмме – функции;

    • вывода результатов вычисления на дисплей в удобном для восприятия виде с отображением названия выбранного численного метода.

    Кроме того, целесообразно предоставить пользователю возможность получить краткую справку по программе, а также давать подсказки по ходу работы с программой.

    В результате сформулируем следующую задачу по созданию программы:

    • значения функции должны вычисляться в подпрограмме – функции;

    • программа после загрузки должна выводить на дисплей исходное окно-заставку, в которой отображаются общие сведения об авторе и подсказку для пользователя о последующих действиях;

    • после выполнения указанной в строке подсказки процедуры перехода должно выводиться вертикальное меню с пунктами: «Справка», «Решение» и «Выход»;

    • при выборе в меню пункта «Справка» должна выводиться краткая, справка о назначении программы и порядке работы с ней;

    • после выбора в меню пункта «Решение» должно открываться отдельное окно, в котором будут выводиться результаты решения дифференциального уравнения;

    • при выборе пункта меню «Выход» программы должна завершать работу.


    2. Математическая формулировка задач
    2.1 Метод Эйлера.

    Метод Эйлера относится к численным методам, дающим решение в виде таблицы приближённых значений искомой функции. Пусть дано дифференциальное уравнение Y'=f(x,y) с начальным условием y(x0)=y0.

    Выбрав достаточно малый шаг h, рассмотрим систему равноотстоящих точек xi=x0+ih (i=0,1,2,…).

    В методе Эйлера приближённые значения y(xi) yi вычисляются последовательно по формулам

    yi+1=yi+hf(xi,yi) (i=1,2,3…). (1)

    При этом искомая интегральная кривая y=y(x), проходящая через точку M0(x0,y0), заменяется ломанной M0M1M2K с вершинами Mi(xi,yi) (i=0,1,2,3,K); каждое звено MiMi+1 этой ломаной, называемой ломаной Эйлера, имеет направление, совпадающее с направлением той интегральной кривой уравнения Y'=f(x,y), которая проходит через точку Mi.

    2.2 Метод Рунге – Кутты.

    При решении методом Рунге – Кутты дифференциального уравнения Y'=f(x,y) с начальным условием y(x0)=y0 через yi обозначают приближённые значения искомого решения в точке xi и вычисление приближённого значения y i+1 в следующей точке x i+1= xi+h производится по формулам:

    y i+1= y i+ yi, (2)

    yi=1/6(K(i)1+2K(i)2+2K(i)3+K(i)4), где (3)

    K(i)1= h*f(xi,yi), (4)

    K(i)2=h*f(x i+h/2, y i+ K(i)1/2), (5)

    K(i)3= h*f(x i+h/2, y i+ K(i)2/2), (6)

    K(i)4= h*f(x i+h, y i+ K(i)3). (7)
    Порядок выполнения вычислений по методу Рунге – Кутты:

    1. Выбираются x и y.

    2. Вычисляются f(x0,y0). Определяются K(0)1=h*f(x0,y0).

    3. Определяются x 0+h/2 , y 0+ K(1)1/2.

    4. Вычисляются f(x 0+h/2, y 0+ K(0)1/2) и K(0)2=h*f(x 0+h/2, y 0+ K(0)1/2).

    5. Принимаются x 0+h/2 ,y 0+ K(0)2/2.

    6. Вычисляются f(x 0+h/2, y 0+ K(0)2/2) , K(0)3=h*f(x 0+h/2, y 0+ K(0)2/2).

    7. Определяются x 0+h , y 0+ K(0)3.

    8. Вычисляются f(x 0+h, y 0+ K(0)3/2) ,K(0)4=h*f(x 0+h, y 0+ K(0)3).

    9. Суммируются K(0)1+2K(0)2+2K(0)3+K(0)4 , делятся на шесть и в результате получаются y0.

    10. Вычисляются y 1= y 0+ y0.

    Затем все вычисления продолжаются в том же порядке, принимая за начальную точку (x1, y1). Заметим, что шаг расчёта можно менять при переходе от одной точки к другой. Для контроля правильности выбора шага h рекомендуется вычислять дробь

    =I(K(1)2 - K(1)3)/(K(1)1 - K(1)2)I.

    Величина не должна превышать нескольких сотых. В противном случае шаг h следует уменьшить.

    Метод Рунге – Кутты имеет порядок точности h на всём отрезке [x0, X]. Грубую оценку погрешности можно получить с помощью двойного просчёта по формуле

    ,

    где - значение точного решения уравнения в точке , а и - приближённые значения, полученные с шагом h/2 и h.

    При решении на ЭВМ методом Рунге – Кутта с автоматическим выбором шага обычно в каждой точке xi делают двойной просчёт – сначала с шагом h, затем с шагом h/2. Если полученные при этом значения yi различаются в пределах допустимой точности, то шаг h для следующей точки x i+1 удваивают, в противном случае берут половинный шаг.


    3. Алгоритмизация задачи
    В соответствии с постановленной в разделе 1 задачей целесообразно реализовать алгоритм, использующий обращение к соответствующим подпрограммам из головной программы.

    Алгоритм работы головной программы следующий:


    1. Скрыть курсор с использованием подпрограммы - процедуры скрытия курсора и вывести в специальном окне заставку программы, содержащую сведения об исполнителе и руководителе курсовой работы, а также подсказку для пользователя о последующих действиях, с использованием подпрограммы - процедуры заставки.

    2. Запустить подпрограмму-процедуру вертикального меню при нажатии любой клавиши, с использованием подпрограмм-процедур построения окна, вывода рамки окна и скрытия курсора.

    3. Запустить подпрограмму-процедуру справки и вывести в специальном окне справочные сведения о работе с программой при выборе пункта меню «Справка» с использованием подпрограмм-процедур построения окна, вывода рамки окна и скрытия курсора, а также строки-подсказки о возврате в меню.

    4. Запустить подпрограмму-процедуру решения дифференциального уравнения первого порядка при выборе пункта меню «Решение» с и использованием подпрограмм-процедур построения окна, вывода рамки окна и вкл0ючения курсора, а также строки-подсказки о возврате в меню.

    5. Завершить работу программы при выборе пункта меню «Выход».


    Алгоритм решения системы дифуравнения первого порядка методом Эйлера и методом Рунге-Кутта в подпрограмме-процедуре включает следующие шаги:


    1. Создать окно для вывода результатов вычисления по методу Эйлера и Рунге-Кутта

    2. Восстановить отображение курсора нормального размера соответствующей подпрограммой-процедурой;

    3. Присвоить значения x0,y0,h,e , согласно условиям задания

    4. Используется цикл от 0 до N для вычисления по формулам (1)-(7) значений Y при X, к которому приращивается шаг 0.1 до значения X = 0.5. Так как в задании указано найти решение на интервале от 0 до 0.5, то следовательно число шагов N будет равным 5.

    5. Вывести результаты вычислений;

    6. Вывести в окне запрос о возможности выхода в главное меню программы;

    7. Выполнить анализ кода нажатой в ответ на запрос клавиши: при нажатии «Enter» перейти к пункту 3, при нажатии «Esc» перейти в окно с меню, при нажатии любой другой клавиши игнорировать нажатия;



    4. Идентификаторы программы


    Для указания соответствия обозначений переменных в формулах математической формулировки и их идентификаторов в программе сведем их в таблицу 1:

    Таблица 1


    Обозначение параметров

    Смысл параметра

    В формулах

    В программе



    X

    Аргумент функции до и после приращения



    F(x)

    Соответственно, значения функции от аргумента x до и после приращения

    F’(xy)

    fxy

    Исходное значение функции



    Eps

    Точность вычислений

    h

    h

    Шаг приращения


    Остальные идентификаторы являются промежуточными или служебными.
    5. Блок-схема алгоритма

    5 .1. Блок-схема алгоритма головной программы
    5.2 Блок-схема подпрограммы–процедуры «CursorSize».


    5.3 Блок-схема подпрограммы–процедуры «HiddeCursor»




    5.4 Блок-схема подпрограммы–процедуры «NormCursor»



    5.5 Блок-схема подпрограммы – процедуры «TextOut»



    5.6 Блок-схема подпрограммы – процедуры «Fon»




    5.7 Блок-схема подпрограммы – процедуры «Ramka»



    5.8 Блок-схема подпрограммы – процедуры «Okno»



    5.9 Блок-схема алгоритма подпрограммы–процедуры «Zastawka».


    5.10 Блок-схема алгоритма подпрограммы–процедуры «Sprawka».



    5.11 Блок-схема алгоритма подпрограммы–процедуры «MyMenu».


    5.13 Блок-схема алгоритма подпрограммы–процедуры «wwod».





      1. Блок-схема алгоритма подпрограммы–процедуры «eilerrk».




    5.15 Блок-схема подпрограммы–процедуры «Resheniye»




    1. Текст исходной программы


    program eilerrkeilerrk;

    uses

    crt,dos;

    type

    mas1 = Array[1..3] of String[50];

    const

    menu : mas1 =(' Справка ',

    ' Решение ',

    ' Выход ');

    OsnText = Yellow;

    OsnFon = Blue;

    OsnRamka = LightGray;

    RamkaMenu = 6;

    var

    poz : integer;

    key : Char;
    i,N : integer;


    Procedure CursorSize(Size: word);

    var Regs: Registers;

    Begin

    With Regs do

    begin

    AH:=$01;

    CH:=Hi(size);

    Cl:=Lo(Size);

    intr($10,Regs);

    end;

    end;
    procedure HiddeCursor;

    Begin

    CursorSize($2000);

    End;
    Procedure NormCursor;

    Begin

    CursorSize($0607);

    End;
    procedure TextOut(x,y: byte;Text: string);

    Begin

    GotoXY(x,y);

    write(Text);

    End;
    procedure Fon(FCol: byte);

    Begin

    TextBackGround(FCol);

    ClrScr;

    End;
    Procedure ramka(x1,y1,x2,y2,RCol:byte);

    const

    a=#201; b=#205; c=#187; d=#186; e=#188; f=#200;

    var

    i: integer;

    Begin

    x2:= x2 - 1;

    Textcolor(RCol);

    TextOut(x1,y1,a);

    for i:=x1+1 to x2-1 do write(b);

    write(c);

    for i:=y1+1 to y2-1 do

    begin

    TextOut(x1,i,d);

    TextOut(x2,i,d);

    end;

    TextOut(x1,y2,f);

    for i:=x1+1 to x2-1 do write(b);

    TextOut(x2,y2,e);

    TextColor(OsnText);

    End;
    procedure Okno(x1,y1,x2,y2,FCol,RCol,TCol :byte);

    Begin

    window(x1,y1,x2,y2);

    Fon(FCol);

    ramka(x1,y1,x2,y2,RCol);

    window(x1+1,y1+1,x2-2,y2-1);

    Fon(FCol);

    TextColor(TCol);

    GotoXY(1,1);

    End;
    Procedure Zastawka;

    Begin

    HiddeCursor;

    okno(1,1,80,25,Black,Yellow,White);

    TextOut(13, 1,'Министерство образования Республики Беларусь');

    TextOut(13, 2,'Белорусский национальный технический университет');

    TextOut(14, 7,'Программа решения дифференциального уравнения');

    TextOut(29, 8,'Курсовая работа');

    TextOut(25, 9,'по дисциплине "Информатика"');

    TextOut(49,13,'Исполнитель : Сотников М.Ю.');

    TextOut(58,14,'гр.: 10208119');

    TextOut(49,16,'Руководитель: Евдокимчева Н.Н.');

    TextOut(31,21,'Минск 2020');

    TextColor(Yellow);

    TextOut(17,23,'Для продолжения нажмите любую клавишу ... ');

    ReadKey;

    End;
    program Spravka;

    begin

    HiddeCursor;

    okno(1,1,80,25,OsnFon,OsnRamka,OsnText);

    TextOut(32,2,'Справка');

    TextOut(5,4,'Данная программа позволяет решить дифференциальное уравнение');

    TextOut(2,5,'методом Эйлера и методом Рунге-Кутта.');

    TextOut(5,7,'После перехода в меню выберите клавишами управления курсора необходимый');

    TextOut(2,8,'пункт');

    TextOut(5,9,'При выборе пункта меню Решение на экран выводится решение уравнения);

    TextOut(5,10,'в заданном интервале от 0 до 0.5 с погрешностью 0.001, при шаге');

    TextOut(5,11,'h=0.1 , y(0)=1. После получения результатов будет предложен выход в главное.');

    TextOut(5,15,'‚меню');

    TextOut(23,23,'Esc - выход в главное меню');

    repeat

    ch:=ReadKey;

    until ch=#27;

    end.

    Procedure Mymenu;

    var i : integer;

    Begin

    ramka(22,7,57,13,RamkaMenu);

    TextColor(RamkaMenu);

    TextOut(35,7,'[ Меню ]');

    TextColor(OsnText);

    for i:=1 to 3 do

    begin

    Gotoxy(25,i+8);

    if i=poz then Textbackground(Red) else Textbackground(OsnFon);

    write(Menu[i]);

    end;

    TextColor(OsnText);

    TextBackGround(OsnFon);{}

    End;
    program wwod;

    begin

    okno(1,1,80,25,OsnFon,OsnRamka,OsnText);

    TextOut(2,1,'Решение дифференциального уравнения методом Эйлера и Рунге Кутта');

    TextOut(15,2,'y^=y+(1+X)y^2 при h=0.1, e=0.001, y(0)=1');

    end.
    program eilerrk;

    begin

    clrscr;

    read(('x':3,' Метод Эйлера , y(x)= ':20,' Метод Рунге-Кутта, y(x)= ':18));

    x:=x0;

    ye:=1;

    yem:=1;

    yr:=1;

    for i := 1 to n do

    begin

    writeln((x:5:2,f(x):25:10,yr:25:10));

    ye:=ye+h*fxy(x,ye);

    k1:=h*fxy(x,yr);

    k2:=h*fxy(x+h/2,yr+k1/2);

    k3:=h*fxy(x+h/2,yr+k2/2);

    k4:=h*fxy(x+h,yr+k3);

    yr:=yr+(k1+2*k2+2*k3+k4)/6;

    x:=x+h;

    end;

    end.

    program Resheniye;

    begin

    NormCursor;

    repeat

    repeat

    wwod;

    TextOut(5,22,'Enter -Получить решение; Esc - выход в глав. меню');

    repeat

    ch:=ReadKey;

    until (ch=#13)or(ch=#8)or(ch=#27);

    until (ch=#13)or(ch=#27);

    if ch=#27 then

    break

    else

    begin

    end;

    repeat

    eilerrk;

    TextOut(5,22,' Esc - выход в главное меню ');

    repeat

    ch:=ReadKey;

    until (ch=#13)or(ch=#27)or(ch=#8);

    until (ch=#27)or(ch=#8);

    until ch=#27;

    end.

    BEGIN

    TextMode(3);

    zastawka;

    repeat

    hiddecursor;

    poz:=1;

    okno(1, 1,80,25,OsnFon,OsnRamka,OsnText);

    Mymenu;

    key:=readkey;

    while key<>#13 do

    begin

    Case key of

    #72: if poz=1 then poz:=3 else poz:=poz-1;

    #80: if poz=3 then poz:=1 else poz:=poz+1;

    end;

    Mymenu;

    key:=readkey;

    end;

    Case poz of

    1: spravka;

    2: resheniye;

    3: exit;

    end;

    until False;{+}

    END.



    1. Результаты работы программы


    После запуска программы в соответствии с поставленной задачей на проектирование выводится окно заставки программы, приведенное на рисунке 2.


    Рисунок 2. Окно заставки.
    После нажатия любой клавиши выводится окно с меню, представленное на рисунке 3.



    Рисунок 3. Окно с меню.

    При выборе пункта меню «Справка» открывается соответствующее окно, в котором находится справочная информация о программе (см. рис. 4).



    Рисунок 4. Окно справки.

    При выборе пункта меню «Решение» открывается соответствующее окно, в котором выводятся результаты поиска (см. рис. 5,).



    Рисунок 5. Вывод результатов.



    1. Анализ результатов


    Проведем проверку результатов вычислений программы сравнивая с результатами Excel.


    Рисунок 6. Проверка результатов


    Рисунок 7. Результаты расчетов методами Эйлера и Рунге-Кутта.

    Вывод: метод Эйлера находит решение дифференциального уравнения первого порядка и результаты удовлетворяют заданной погрешности e=0.001.

    9. Инструкция по работе с программой



    Файл DifUrawn.pas с исходным текстом Паскаль-программы находится по адресу E:\ 2 курс\10208119\Sotnikov.

    Необходимо загрузить Turbo Pascal 7.0, сделать текущим каталог Sotnikov, открыть файл с исходной Паскаль-программой DifUrawn.pas и запустить ее на выполнение командой Run.

    После вывода заставки программы нажать любую клавишу для перехода в меню и открыть окно справки. После ознакомления со справкой нажатием клавиши «Esc» возвратится в окно меню, с помощью клавиш управления курсором выбрать пункт «Решение» и ввести по запросу программы исходные данные. Затем проверить правильность введенных данных и сообщить результат программе. При необходимости повторить процедуру ввода исходных данных

    Результаты поиска минимума выводятся в том же окне, где вводились исходные данные.

    Нажатие клавиши «Esc» приводит к переходу в меню программы.

    Завершение работы с программой реализуется выбором пункта меню “Выход”.


    Заключение



    В данной курсовой работе разработана и реализована средствами языка программирования Турбо-Паскаль программа решения дифуравнения первого порядка методом Эйлера и методом Рунге-Кутта.

    Программа обладает дружеским интерфейсом, по запросу пользователя сообщает общие сведения по работе с программой и производит вычисления, ввод данных осуществляется с клавиатуры по запросу программы.

    Список использованных источников





    1. Начала программирования на языке Паскаль/С.А. Абрамов – М., 1987

    2. Программирование в среде Турбо-Паскаль/Д.Б. Поляков – М., 1992

    3. Методические указания по выполнению курсовой работы по дисциплине «Информатика» для студентов специальностей горного профиля заочной формы обучения/С.М. Петренко, И.В. Недашковская – М., 2005

    4. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ/В.П. Дьяконов – М.: Наука, 1987

    5. Численные методы для ПЭВМ на языках бейсик, фортран и паскаль/А.Е. Мудров – Томск, 1991



    написать администратору сайта