Дифференциалдық теңдеудерді шешу жобасы

Кіріспе

    Паскаль тiлiн 1968 - 1971 жылдары швейцариялык. ғалым Никлаус Вирт оқып - үйренуге қолайлы программалау тілі ретінде ұсынған болатын. Бұл тілдің стандарты кейiнiрек бекiтiлдi, ол сол кездері кең таралған АЛГОЛ, ФОРТРАН, БЕЙСИК тiлдерiне қарағанда жетiлдiрiлген, жұмыс iстeyгe ыңғайлы тiл болды. Паскаль тiлi өзінің қарапайымдылығының және тиiмдiлiгiнің арқасында дүние жүзіне тез таралды. Қазiргi кезде барлық дербес компьютерлер осы тілде жұмыс iстей алады. Паскаль тiлiнде жазылған программаның дұрыстығын компьютерде тексеру және жiберiлген қатенi тузету оңай.

    Бұл тілде жазылған программа компьютерде орындалу барысында алдымен трансляцияланады (машина тiлiне аударылады), объектiк программаға түрлендіріледі де содан кейiн ғана орындалады. Осы сәтте компьютерде программаның екі нұсқacы болады, оның бiрiншiсi - алгоритмдiк тiлдегi алғашқы түпнұсқасы, ал екiншiсi - объектiк кодтағы жазылған программа. Есеп нәтижесін машиналық кодта жазылған программа арқылы аламыз, ал программаны түзету қажет болғанда, оның алгоритмдiк тiлде жазылған алғашқы нұcқacы өңделеді.

    Қазiргi кезде Паскаль кез келген күрдлі есептерді шығара алатын, кең таралған стандартты оқу тіліне айналды.

 

 

 

 

 

 

 

 

 

 

І. Жалпы  бөлім

1.1Турбо Паскаль туралы жалпы түсінік

    Алгоритм алгорифм (ағылшынша: algorіthm, algorіsmus — Әл-Хорезмидің атынан шыққан) — бастапқы берілген мәліметтермен бір мәнде анықталатын нәтиже алу үшін қай амалды (жұмысты) қандай ретпен орындау қажеттігін белгілейтін есептерді (мәселелерді) шешу (математикалық есеп-қисаптар орындау, техникалық объектілерді жобалау, ғылыми-зерттеу жұмысын жүргізу т.б.) тәсілдерінің дәл сипаттамасы. Алгоритм — математика мен кибернетиканың негізгі ұғымдарының бірі. Агоритмді орындау алгоритмдік процесс деп аталады.

    Алгоритм дегеніміз берілген есепті шешуге арналған қатаң анықталған әрекеттер тізбегі немесе, қысқаша айтқанда, есептің шешу әдісі. Алгоритмнің негізгі қасиеттеріне тоқталайық.

    Жалпы Алгоритм деп алдын ала не істеу керек екені дәл көрсетілген есептеу процесін айтады. Есептеу процесі қандай болса да алғашқы мәндерден бастап, сол арқылы толық анықталған қорытынды шыққанша жүргізіледі. Алгоритм ұғымының алғышартына алгоритмдік процеспен қатар мүмкін болатын алғашқы деректер жиынтығының нұсқауы және қорытынды алуға байланысты жүргізілген процестің аяқталғандығын көрсететін ереже енеді. Белгілі бір бастапқы деректердің жиынына қолданылған Алгоритм тиянақты қорытындыға келмеуі немесе есептеу барысы аяқталмай тоқталуы мүмкін. Егер есептеу процесі белгілі бір қорытынды алумен аяқталса (не аяқталмай қалса), онда Алгоритм мүмкін болатын бастапқы деректерге қолданылады (не қолдануға болмайды) деп ұйғарылады.

    Паскаль тiлiн 1968 - 1971 жылдары швейцариялык. ғалым Никлаус Вирт оқып - үйренуге қолайлы программалау тілі ретінде ұсынған болатын. Бұл тілдің стандарты кейiнiрек бекiтiлдi, ол сол кездері кең таралған АЛГОЛ, ФОРТРАН, БЕЙСИК тiлдерiне қарағанда жетiлдiрiлген, жұмыс iстeyгe ыңғайлы тiл болды. Паскаль тiлi өзінің қарапайымдылығының және тиiмдiлiгiнің арқасында дүние жүзіне тез таралды. Қазiргi кезде барлық дербес компьютерлер осы тілде жұмыс iстей алады. Паскаль тiлiнде жазылған программаның дұрыстығын компьютерде тексеру және жiберiлген қатенi тузету оңай.

    Бұл тілде жазылған программа компьютерде орындалу барысында алдымен трансляцияланады (машина тiлiне аударылады), объектiк программаға түрлендіріледі де содан кейiн ғана орындалады. Осы сәтте компьютерде программаның екі нұсқacы болады, оның бiрiншiсi - алгоритмдiк тiлдегi алғашқы түпнұсқасы, ал екiншiсi - объектiк кодтағы жазылған программа. Есеп нәтижесін машиналық кодта жазылған программа арқылы аламыз, ал программаны түзету қажет болғанда, оның алгоритмдiк тiлде жазылған алғашқы нұcқacы өңделеді.

    Қазiргi кезде Паскаль кез келген күрдлі есептерді шығара алатын, кең таралған стандартты оқу тіліне айналды.

1.2Паскаль тілінің негізі элементтері.

    Программалар белгілі бір мәселені, есепті шешуге арналған. Есеп шығару барысында компьютерге бастапқы мәліметтер енгізіледі, оларды қалай өңделетіндігі көрсетіледі және нәтиже қандай түрде, қандай құрылғыға шығарылатыны айтылады.

    Паскаль тілінде программа жеке - жеке жолдардан тұрады. Оларды теру, түзету арнайы мәтіндік редакторлар атқарылады. Программа алдындағы азат жол немесе бос орын саны өз қалауымызша алынады. Бір қатарда бірнеше команда немесе оператор орналаса алады, олар бір - бірімен нүктелі үтір (;) арқылы ажыратылып жазылады, бірақ бір жолда бір ғана оператор тұрғаны дұрыс, ол түзету жеңіл, әрі оқуға ыңғайлы.

    Паскаль тілінде программа үш бөліктен тұрады: тақырып, сипаттау бөлімі және операторлар бөлімі.

    Кез келген программаның алғашқы жолы PROGRAM сөзінен басталатын оның тақырыбынан тұрады. Одан кейін программаның ішкі объектілерінің сипаттау бөлімі жазылады. Бұл бөлім программадағы айнымалылар, тұрақтылар  тәрізді объектілердің жалпы қасиеттерін алдын ала анықтап алуға көмектеседі. Сипаттау бөлімі бірнеші бөліктерден тұрады, бірақ программаның күрделілігіне байланысты көбінесе ол бір немесе екі ғана бөліктен тұруы мүмкін.

    Программаның соңғы және негізгі бөлімі операторлар бөлімі – болып табылады. Орындалатын іс - әрекеттер, командалар осы бөлімде орналасады. Ол begin түйінді сөзінен басталып, бірақ атқарылатын операторлар (командалар) тізбегі жеке - жеке жолдарға жазылып біткен соң end түйінді сөзімен аяқталады.

Program  BASTAU:

Сипаттау бөлімі

Begin

Операторлар бөлімі

End.

    Операторлар бөлімінде командалар ретімен орналасады. Олардың кейбірі шартқа байланысты атқарылса, ал кейбір қайталанатын цикл немесе қосымша программа түрінде орындалады. Операторлар бөлімінде орнатылатын негізгі әрекеттерді қарастырайық.

    Деректер - сан мәндері мен мәтін түріндегі сөз тіркесін мән ретінде қабылдай алатын тұрақтылар, айнымалылар т.б. осы тәрізді құрылымдар немесе солардың адрестері.

    Дерек енгізу - бастапқы деректерді пернетақтадан, дискіден немесе еңгізу - шығару порттарынан еңгізу арқылы жүзеге асады.

    Операциялар немесе амалдар - берілген және есептелген мәндердің меншіктеу, соларды өңдеу, салыстыру операцияларын орындайды.

    Шартты түрде атқарьшу белгілі бір көрсетілген шарттың орындалуына байланысты, командалар жиыны атқарылады, әйтпесе олар аттап өтіледі немесе басқа командалар жиыны орындалады.

    Цикл - белгілі бір шарттар орындалған жағдайда көрсетілген командалар жиынын бірнеше рет қайталанып атқарылады. Қайталау саны бүтін санмен беріледі.

    Көмекші программа - алдын ала қандай да бір атаумен атымен атымен аталған командалар тобы. Олар программаның кез келген жерінен оның атауын көрсету арқылы шақырылып атқарыла береді.

    Түсініктеме - программа жолдары соңында немесе оның түйінді сөздері арасында қазақша (орысша) түсінік беретін пішінді жақшаға алынып жазылған сөз тіркесітері. Олар программа операторларының орындалуына ешқандай әсер етпейді.

1.3 Мәлімет типтері

    Программада пайдаланылатын мәліметтердің немесе шамалардың мәндері Паскаль тіліндегі алдын ала келісілген типтердің біріне тән болуы тиіс.

    Мәліметтердің немесе шамалардың типі деп, олардың қабылдай алатын мәндерінің және олармен орындауға болатын амалдардың жиының анықтауды айтады, яғни тип дегеніміз - шамалардың қабылдайтын мәндеріне берілетін сипаттама.

    Мәліметтердің әр типі тек өзіне ғана сәйкес келетін операциялар жиынын орындата алады. Мысалы, 1 мен 2 мәндері бүтін сандар типіне жатады, оларды қосуға, азайтуға, көбейтуге және бөлуге болады.АJI, «ІВМ» және «РС» мәндері сөз тіркесі типіне жатады, бұларды біріктіріп жазуға ғана болады («ІВМ РС»). Қосуға, азайтуға, көбейтуге, бөлуге болмайды. Кез келген тұрақты, айнымалы функция немесе өрнек өзіне тән бір типпен ғана сипатталады. Паскаль тілінде шамалардың типін көрсету міндетті болып табылады. Сондықтан программа алдына оның сипаттау бөлімінде пайдаланылатын барлық шама атаулары және оның типтері көрсетілуі қажет.

    Паскаль тілінде пайдаланылатын барлық типтер скалярлық (қарапайым) және құрылымдық (структуралық) болып үлкен екі топқа бөлінеді. Скалярлық (қарапайым) типке шамалардың стандартты типі және жасанды тип (тағайындалған) жатады. Стандартты типтерге:

Бүтін - INTEGER;

Нақты - REAL;

Логикалық - BOOLEAN;

Тіркестік - (STRING);

Мәтіндік (ТЕХТ) тәрізді типтер жатады.

    Құрылымдық типтері жиымдар - ARRAҮ, жазбалар - RECORD, жиындар - SET және файлдар - FILE түрлеріне бөлінеді.

    Бұлардан өзге типтер программаның типтері сипаттау бөлігінде анықталуы қажет. Тұрақты сандардың типін олардың сыртқы пішініне қарап - ақ ажыратуға болады, ал айнымалылар мен функциялар типтері программаның сипаттау бөлімінде көрсетіледі.

    Ол үшін type түйінді сөзі қолданылып, жазылу пішімін былай көрсетуге

болады:

Туре =;

    Логикалық шамалар екілік сандар жүйесіне сәйкес «1» және «О» деген мәндерді ғана қабылдайды. Мұндағы «1» тексерілетін белгілі бір шарттың - логикалық тұжырымның орындалатынын, яғни ақиқат екенін, ал «О» сол шарттың орындалмайтынын - тұжырымның жалған екенін көрсетеді. Бұл екі мән программада ағылшын тіліндегі айтылуына сәйкес true (1) және false (О) болып жазылады.

    Символдық шамалар апострофқа алынған бір символды ғана мән ретінде қабылдай алады, мысалы, 'R','Л','%'тағы басқа. Бірақ әрбір таңбаны оның кодына байланысты реттелген бүтін сандармен де өрнектеу мүмкіндігі бар.

    Мәліметтердің қарапайым түрлерін стандартты типтер деп атау қалыптасқан. Стандартты типтердің real түрінен өзгелері реттелген деп аталады, өйткені оларды бүтін сан арқылы өрнектей отырып өсуі не кемуі бойынша реттеп орналастыруға болады.

    Стандартты типтер. Паскаль тілінде  төмендегі қарапайым типтер пайдаланылады:

Бүтін типтер - SHORTINT, INTEGER, LONGINT, ВУТЕ, WORD;

Нақты тип - REAL, SINGLE, DOUВLE, EXTENDED, СОМР;

Логикалық - BOOLEAN;

Симводық - CНAR;

Ауқымды (диапозонды) тип;

Саналатын тип;

 

1.4 Паскаль тілінің негізі элементтері

    Программалар белгілі бір мәселені, есепті шешуге арналған. Есеп шығару барысында компьютерге бастапқы мәліметтер енгізіледі, оларды қалай өңделетіндігі көрсетіледі және нәтиже қандай түрде, қандай құрылғыға шығарылатыны айтылады.

    Паскаль тілінде программа жеке - жеке жолдардан тұрады. Оларды теру, түзету арнайы мәтіндік редакторлар атқарылады. Программа алдындағы азат жол немесе бос орын саны өз қалауымызша алынады. Бір қатарда бірнеше команда немесе оператор орналаса алады, олар бір - бірімен нүктелі үтір (;) арқылы ажыратылып жазылады, бірақ бір жолда бір ғана оператор тұрғаны дұрыс, ол түзету жеңіл, әрі оқуға ыңғайлы.

    Паскаль тілінде программа үш бөліктен тұрады: тақырып, сипаттау бөлімі және операторлар бөлімі.

    Кез келген программаның алғашқы жолы PROGRAM сөзінен басталатын оның тақырыбынан тұрады. Одан кейін программаның ішкі объектілерінің сипаттау бөлімі жазылады. Бұл бөлім программадағы айнымалылар, тұрақтылар  тәрізді объектілердің жалпы қасиеттерін алдын ала анықтап алуға көмектеседі. Сипаттау бөлімі бірнеші бөліктерден тұрады, бірақ программаның күрделілігіне байланысты көбінесе ол бір немесе екі ғана бөліктен тұруы мүмкін.

    Программаның соңғы және негізгі бөлімі операторлар бөлімі – болып табылады. Орындалатын іс - әрекеттер, командалар осы бөлімде орналасады. Ол begin түйінді сөзінен басталып, бірақ атқарылатын операторлар (командалар) тізбегі жеке - жеке жолдарға жазылып біткен соң end түйінді сөзімен аяқталады.

Program BASTAU:

Сипаттау бөлімі

begin

Операторлар бөлімі

end

    Операторлар бөлімінде командалар ретімен орналасады. Олардың кейбірі шартқа байланысты атқарылса, ал кейбір қайталанатын цикл немесе қосымша программа түрінде орындалады. Операторлар бөлімінде орнатылатын негізгі әрекеттерді қарастырайық.

    Деректер - сан мәндері мен мәтін түріндегі сөз тіркесін мән ретінде қабылдай алатын тұрақтылар, айнымалылар т.б. осы тәрізді құрылымдар немесе солардың адрестері.

    Дерек енгізу - бастапқы деректерді пернетақтадан, дискіден немесе еңгізу - шығару порттарынан еңгізу арқылы жүзеге асады.

    Операциялар немесе амалдар - берілген және есептелген мәндердің меншіктеу, соларды өңдеу, салыстыру операцияларын орындайды.

    Шартты түрде атқарьшу белгілі бір көрсетілген шарттың орындалуына байланысты, командалар жиыны атқарылады, әйтпесе олар аттап өтіледі немесе басқа командалар жиыны орындалады.

    Цикл - белгілі бір шарттар орындалған жағдайда көрсетілген командалар жиынын бірнеше рет қайталанып атқарылады. Қайталау саны бүтін санмен беріледі.

    Көмекші программа - алдын ала қандай да бір атаумен атымен атымен аталған командалар тобы. Олар программаның кез келген жерінен оның атауын көрсету арқылы шақырылып атқарыла береді.

    Түсініктеме - программа жолдары соңында немесе оның түйінді сөздері арасында қазақша (орысша) түсінік беретін пішінді жақшаға алынып жазылған сөз тіркесітері. Олар программа операторларының орындалуына ешқандай әсер етпейді.

1.5  FOR операторы

 Циклдегі  операторларды қайталау саны алдын ала белгілі болған жағдайда FOR операторы қолданылады. Бұл оператор параметрлі цикл операторы деп те аталады, өйткені қайталау саны функция аргументі (айнымалы) сияқты циклдің параметрі қызметін атқаратын басқару айнымалысы арқылы беріледі. Параметр өзінің алғашқы мәтіннен соңғы мәніне дейін бірлік қадаммен өзгеру барысында циклге кіретін бір немесе бірнеше операторды қайталап орындауды атқарады.

     Оператор FOR сөзінен басталатын оның тақырыбынан және цикл тұлғасынан тұрады да, синтаксистік диаграммасы 5-суреттегідей болып кескінделеді.

                               5-сурет.  For операторының диаграммасы

     Диаграммаға  сәйкес оның жазылуы екі түрде  болады:

     For <айнымалы>:=<S1> to <S2> do < оператор>;

     For < айнымалы >:=<S1> downto <S2> do < оператор >;

мұндағы S1 және  S2-цикл параметрінің алғашқы және соңғы  мәндерін айқындайтын өрнектер; for…do-цикл тақырыбын анықтайтын түйінді сөздер; < оператор>-цикл тұлғасы.

     FOR- үшін, TO- дейін, DO- орындау деген мағынаны беретін түйінді сөздер. Паскаль тіліне цикл параметрі міндетті түрде бүтін немесе реттелген типтегі айнымалы болуы қажет. Параметрдің өзгеру қадамына байланысты операторда TO немесе DOWNTO(DOWN-төмен, TO-дейін, DOWNTO-кері қарай) түйінді сөздер пайдаланылады. Егер қадам +1-ге тең болса, онда операторда TO, ал қадам -1-ге тең болса, онда  DOWNTO сөзі қолданылады. Параметрдің бастапқы және соңғы мәндері бүтін сан түрінде немесе өсуі, кемуі бойынша реттелетін болуы тиіс, әйтпесе оларды бүтін мән беретін арифметикалық өрнек түрінде жазуға да болады.

       FOR операторының орындалуы блок-схемасы  түрінде 6-суретте бейнеленген.                    

 


 

       

 

 

 

Цикл тұлғасы (блок-схемадағы <оператор>) жай немесе құрама оператор болуы мүмкін. FOR операторының жұмысы цикл параметрінің алғашқы мәнінен соңғы мәніне дейінгі аралықты бірлік қадаммен қайталап өтпей тоқталмайды. 6-сурет.For операторының блок-                                                                                                схемасы

      Цикл тақырыбы:

  • басқару айнымалысының (цикл параметрі) өзгеру диапазонын және цикл ішіндегі операторлардың қайталану санын;
  • цикл параметрінің өзгеру бағытын (өсуі- to, кемуі- downto) анықтайды. 

 

 

 

 

 

 

 

 

 

 

 

 

II. Арнайы бөлім

2.1 Дифференциалдық теңдеулер тарауларын

бағдарламалау тілдерімен байланыстыру

    Дифференциалдық  теңдеулер  көбінесе  динамикалық  модельдеу аймағын  зерттегенде  көп  қолданылады.  Олар,  ереже  бойынша,  уақыт өтуіне байланысты параметрлердің өзгеруін қарастырады (басқа жағдайлар болуы  да  мүмкін).  Дифференциалдық  теңдеулердің  шешімдері  сан  емес функция  болып  табылады,  сол  себепті  дифференциалдық  теңдеулерді шешу қиынға түседі. Əсіресе бұл диффереренциалдық теңдеулердің жеке туындыларын  тапқанда қиындық  туғызады.  Қарастырылып  отырған əдістемелік  нұсқауда  бұл  əдістер  қарастырылмаған.  Дифференциалдық теңдеулерді  шешу  əдістері  модельдеуде  жəне  жеке  жауап  алу  үшін  ең маңызды болып табылады.

Сандық  əдістерді  пайдаланғанда  дифференциалдық  теңдеулердің шешімдері dy/dx=f(x,y) немесе  таблица түрінде беріледі, яғни x мəнінің y мəніне  сəйкестігі  беріледі.  Есептің  жауаптары  қадамдық  сипатта  болады, яғни  бір  немесе  бірнеше  бастапқы (x,y) нүктелер  арқылы,  сəйкесінше келесі нүктелер табылады жəне т.с.с. Қатар жатқан екі нүкте арасындағы қашықтық қадам деп аталады, яғни h=xi+1  +x  . Ең көп тарағаны x=x0,  y(x0)=y0 түріндегі берілетін Коши есептері. Мəндерін біле отыра шешу əдісі есептеуді жеңілдете түседі, яғни y1 x1 –ге сəйкесінше y2 x2 –ге т.с.с . Басқа шешу жолдарының бірі – аралық нүкте арқылы.  Ол  белгілі  бір  əдістермен,  бастапқы  шарттағыдай  эквивалент есептерге ұқсас шығарылады.

    Дифференциалдық  теңдеулерді  шешудің  екі  класты  əдісі  бар:  бір

қадамды жəне көп қадамды.

Бір қадамды  əдіс мынадай:

Yi+1= F[f(xi,yi)],  фукцияның бір ғана  нүктесін  тапқанда,  ал  екі қадамды əдіс:Yi+1 =F(yi-3, yi-2, yi-1, yi)  тапқанда  қолданылады.  Сондықтан көпқадамды əдіс «бастауыш» қасиетіне ие емес, яғни онымен Коши есебін шығара  алмаймыз,  ол  əрқашан  бірқадамды  əдіспен  шығарылады.  Көп қадамды əдістің тағы бір кері қасиеті – қадам өзгерісін анықтай алмайды, ал  ол  есеп  жауабының  нақтылығын  көрсете  түседі.  Қадамдардың  есеп шешімінің  дəлдігіне  əсерін  тигізетінін ескерсек,  ал  ол  есеп  жауабын нақтылай  түседі.  Көп  қадамды  əдіс  компьютердің  төменгі  сақтау қабілеттілігімен  теориялық  баға  бергенде  əсерін  тигізеді.  Көп  қадамды əдістің  көрсеткіші  ретінде  болжау  жəне  коррекциялау  əдістері  болып табылады.  Бір  қадамды  əдіс  класына  Эйлер,  Рунге-Кутта  əдістері  жəне тағы басқалар жатады. Бір  қадамды  əдіспен  шешкенде  Тейлор  қатары  маңындағы нүктелерді  табу  үшін  роль  атқарады,  сəйкесінше,  əдістің  дəлдігі  өрнек бойынша, y нүктесінде  орналасқан y нүктесі жəне f(xi,yi)  нүктесіндегі туындысы   h: y i+1 = yi+ ∆yi    қадамындағы функцияның мəнін табады. Сандық  əдіспен  жекелеген  теңдеулер  ғана  шығарылады,  бірақ  теңдеулер жүйесі  (көбінесе бірінші ретті ), бір теңдеуді шешу түрінде кең тараған.

Жоғарғы ретті  дифференциалдық теңдеудің түрі :

y(n) =f(x,y,y’,yn ,…,y(n-1)  );

айнымалыларды y1=y′ ,y2=yn ,y3=ym  алмастыру  арқылы  шығарады.  Осы кезде n–ші ретті дифференциалдық теңдеу :

y′=y 1

y1′=y2

y2′=y3

…..

yn-1′ =f(x,y,y1,y2,…yn-1  ) .

Эйлер əдісі  бірінші ретті дифференциалды теңдеуді y′=f(x,y) шешуге арналған  қарапайым  əдістердің  бірі.  Ол  көбінесе  оқу  мақсатында,

практикалық  есептеулерде  үлкен  роль  атқарады.  Есептеуіш  алгоритм

төмендегідей  көрсетіледі.

Yi+1  =y(xi+h)=yi + ∆yi=yi+hf(xi,yi)

h=x  бойынша  қадам (жалпы  жағдайда  тұрақты  емес).  Бастапқы y(x0)=y0

шартына осы əдіс қолданылады.

Эйлер  əдісінің  графикалық  кескінделуі  берілген a1 , a2  бұрыштары

tga1=f(x0,y0), tga2=f∆y1=∆xf(x0,y0),  ∆y2= ∆xf(x1,y1) функциясының есептеуіш

мəндері сəйкесінше анықталады.

Мысал 1. Y′=2x2+2y түріндегі дифференциалдық теңдеуді шешу,  шарттары

x0=0 y(x0)=1 h қадамы [0.1] интервалында жатсын.

Бұл теңдеудің жауабы y=1.5e2x-x2-x-0.5 болып табылады.

Бірінші қадам:

y1=y0+hf(x0,y0)=1+0.1(2*0+2*1)=1.2.

Екінші қадам:

y2=y1+hf(x1,y1)=1.2+0.1(2*0.1+2*1.2)=1.442.

Бұл есептеуге  келтірілген формуламен есептеу  көп қиындық туғызбайды,

сондықтан қалған қалған мəндерін кесте түрінде көрсетейік .

x 0 0, 2 0,4 0,6 0,8 1,0

Нақты жауап 1 1 ,4977 2,2783 3,5202 5,4895 8,5836

Жуықталған  жауап 1  1,4420 2,1041  3,1183  4,6747  7,0472

Дəлдікті  айқындай  түсу  үшін  екінші  ретті  Эйлердің  модификация  əдісі қолданылады. Ол төмендегідей алгоритмде көрсетіледі

Yi+1=yi+0.5h[f(xi,yi)+f(xi+1,yi+1)].

Бұл формулада f(xi+1,yi+1) мəні белгісіз yi+1 мəнінде қолданылады. Бұл мəн жуықтап  табылған,  мысалы,  Эйлер  əдісі,  бірақ  соңынан  алгоритмде қолданылады.

Есептеудің  дəлдігін  екі  қайтара  жүргізеді,  алғашында xi  нүктесіндегі h

қадамы  анықталады. Y(xi+h)=y1i+1, кейіннен  осы xi+1  нүктесінде h/2

қадамын y2i+1-мен алмастырады.

Егер екі  жауап та / y1i+1- y2i+1/ шегінде бар болса, жауап қабылданады, алегер жоқ болса тағы екі қадамға бөледі.

Мысал 2: Жоғарыдағы есепті қарастырамыз:

ші қадамын  Эйгер əдісі бойынша

y1=y0+hf(x0,y0)=1+0.1(2*0+2*1)=1.2

2) 1- ші қадамын  модификация əдісі бойынша

y1=y0+h/2[f(x0,y0)+f(x1,y1)]=1+0.1/2[(2*0+2*1)+(2*0.12+2*1.2)]=1.221

2-ші қадам  Эйгер əдіісі бойынша

y2= y1+hf(x1,y1)=1.221+1.1(2*0.12+2*1.221)=1.473

2-ші қадам  модификация əдісі бойынша

y2=y1+h/2[f(x1,y1)+f (x2,y2)]=1.221+0.1/2[(0.12+2*1.221)+(2*0.22+2*1.221)]=

=1.4923

Келесі жолдар таблицада көрсетілген

x 0 0, 2 0,4 0,6 0,8 1,0

Нақты жауап 1 1 ,4977 2, 2783 3,5202 5,8405 8,5836

Жуықталған  жауап 1  1,4423 2,2466  3,4176  5,2288  8,0032

Рунге-Кутта  əдісі:

Рунге-Кутта  əдісінің бірнеше түрлі жолы бар, ең көп тарағаны 4-ші ретті

əдісі,  сəйкесінше,  Эйлер  əдісіне  қарағанда  дəлдікпен  анықталатын 1-ші

əдіс.  Функцияның  бір  мəнін  анықтау  үшін  дифференциал  теңдеудің  оң жағын 4 рет есептеу керек. Есептеуіш алгоритм төмендегідей жазылады:

Yi+1=yi+(k1+2k2+2k3+k4)/6

Мұндағы k1=hf((xi,yi)

k2=hf(xi+h/2,yi+ k1/2)

k3=hf (xi+h/2,yi+ k2/2)

k4= hf (xi+h,yi+ k3)

Мысал 3: бірінші  қадамда  келтірілген  формулалар  бойынша k1, k2, k3, k4 анықталады.

K1= 0.1(2*0+2*1)=0.2

k2=0.1(2*0.052+2*(1+0.2/2))=0.221

k3=0.1(2*0.052+2*(1+0.221/2))=0.223

k4=0.1(2*0.12+2*(1+0.223))=0.247

y1=1+(0.2+2*0.221+2*0.223+0.247)/6=1.2221

екінші қадамда

k1=0,246

k2=0,274

k3=0,276

k4=0,308

сəйкесінше y2=1.2221+(0.246+2*0.274+2*0.276+0.308)/6=1.4977

Қалған жауаптар кестеде:

x 0 0, 2 0,4 0,6 0,8 1,0

Нақты жауап 1 1 ,4977 2, 2783 3,5202 5,4805 8,5836

Жуықталған  жауап 1  1,4977 2,2783  3,5201  5,4894  8,5834

2.2 Дифференциалдық теңдеулерді Эйлeр-Коши әдісімен шешу

Төменде көрсетілген 1 суреттегіндей, алғашқы шарттардың көмегімен шешімдердің жиыныннан біреуін таңдап алуға болатындығын көрсетеді.

1-сурет.Дифференциалдық теңдеуді шешудің жиыны.

Эйлер-Коши әдісі- дифференциал теңдеуді ең тимді шешу әдісі(екінші қатардағы дәлдік). Бұл әдіс келесі шешу қатарын көрсетеді:

yi+1* = yi + h f( xi ; yi ), мұндағы i = 0,1,2 ... n

yi+1 = yi + h (f( xi ; yi ) + f( xi+1 ; yi+1*)) / 2

n-санының түрлерин аралық қадамға бөлу арқылы табуға болады n=(x)

n = (xn - xo) / h геометриясы интеграл қисығына жанама бағыттың бастапқы нүктеге х,у-нк және көмекші нүкте хi+1,yi+1*-ке анықтау болып табылады, ал соңғы бағыт ретінде осы бағыттадың орташасы алынады (бөлік сызықпен көрсетілгені 2сурет).

2-сурет. Эйлeр-Коши әдісінің графикалық түрі.

Эйлор-Коши әдісімен табылғанда yi+1 шешімі, yi+1*  шешуінің Эйлор тапқан әдісіне қарағашда неғұрлым туралау шешімге жақын болып табылады. Әдічтің қателігі һ қадамының екінші дәрежесіне пропорциялы, яғни Эйлор-Коши әдісі қатардағы дәлдікті көрсетеді.

2.3 Тапсырманың қойылуы

a+ cos(b/sqrt(0.3))=0 Дифференциалдық теңдеуді Рунге-Кутта және Эйлeр-Коши әдістерімен шешу арқылы және сол әдістерді салыстыру.

2.4 Паскаль тіліндегі  бағдарламасы:

Program Runge_Eilеr;

Const h=0.1;

var xR,xkR:real; i:integer; LR:array [0..4,1..10] of real;

ykR,yR:array [0..2] of real;    j:real;    yke,ye,yxxe,xke,xe:array [0..2] of real;

function F(a,b:real):real;

begin

f:=a+ cos(b/sqrt(0.3));

end;

begin clrscr;

xe[0]:=0.7;ye[0]:=2.1;

for i:=1 to 10 do begin

{1} xe[1]:=xe[0]+h;

{2} yxxe[1]:=ye[0]+h*f(xe[0],ye[0]);

{3} ye[1]:=ye[0]+h*(f(xe[0],ye[0]) + f(xe[0]+h,yxxe[1]))/2;

write(' x=',xe[1]:2:1,' ye=',ye[1]:6:10);

writeln(' ye*=',yxxe[1]:6:10);xe[0]:=xe[1];

ye[0]:=ye[1];

{1}LR[1,i]:=F(xr,yr[0]);

{2}xkr:=xr+h/2;

ykr[1]:=yr[0]+Lr[1,i]*(h/2);

{3}Lr[2,i]:=F(xkr,ykr[1]);

{4}ykr[2]:=yr[0]+Lr[2,i]*(h/2);

{5}Lr[3,i]:=F(xkr,ykr[2]);

{6}xr:=xr+h;

yr[1]:=yr[0]+Lr[3,i]*h;

{7}Lr[4,i]:=f(xr,yr[1]);

{8}Lr[0,i]:=(1/6)*(Lr[1,i]+2*Lr[2,i]+2*Lr[3,i]+Lr[4,i]);

{9}yr[0]:=yr[0]+Lr[0,i]*h;

writeln('       yr=',yr[0]:6:10); end;

end.

2.5 Негізгі  бағдарлама блок-схемасы

 

2.6 Көмекші бағдарламаның блок-схемасы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Қорытынды

Мен «Жай дифференциалдық  теңдеулерді шешу әдістерінің жобасы»  тақырыбына курстық жоба жаздым. Жоба мынадай бөлімдерден тұрады:Кіріспе, жалпы бөлім, арнайы бөлім, қорытынды, әдебиеттер, қосымша тапсырмалар.

Кіріспеде «Алгоритімдеу  негіздері» және «Сандық әдістер» пәндерінің маңызы, оның ішінде фукцияны «дифференциалдық теңдеулерді шешу әдістерінің» тақырыбымен  байланысы, дифференциалдық теңдеулерді шешу әдістерінің түрлері және курстық жобаның мақсаты жайлы жазылды.

Арнайы бөлімде  жоба тапсырмасының Паскаль тіліндегі  бағдарламасы құрылып, нәтижесі алынды. Сонымен қатар есепті шешу аргоритімі, иденфикаторлар кестесі, блок схемесы құрылды.

Сонымен қорыта айтқанда осы курстық жобаны орындау  барысында мен мынадай нәрселерді үйрендім:

Дифференциалдық теңдеулерді Эйлeр-Коши,Рунге-Кутта әдісмен шешуді үйрендім. Паскаль программалау ортасының жақсы мүмкіндіктерімен таныстым.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Қолданылған әдебиеттер тізімі

  1. Турбо Паскаль 7.0 “BHV” 1996.
  2. В.В. Фаронов. Турбо Паскаль 7.0 Начальный курс. Учебное пособие. Издательство “Нолидж” 1997.
  3. В.В. Фаронов. Турбо Паскаль 7.0 Практика программирования. Учебное пособие. Издательство “Нолидж” 1997
  4. А.И. Марченко, Л.А.Марченко. Программирование в среде Турбо Паскаль 7.0. Киев “ВЕК+” 1999.
  5. Иванов А.Ф., Садриева Л.М. Методическое руководство по подготовке и защите курсовых работ по дисциплине “Информатика”. АлНИ, 2002.
Дифференциалдық теңдеудерді шешу жобасы