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

Автор работы: Пользователь скрыл имя, 30 Апреля 2013 в 08:18, курсовая работа

Описание работы

Паскаль т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 тузету оңай

Файлы: 1 файл

курстык жоба Дифференциал.doc

— 621.50 Кб (Скачать файл)

     Оператор 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.

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