განვითარების გარემოს შერჩევა. სადაც y არის სასურველი ფუნქცია, x არის დამოუკიდებელი ცვლადი, f(x,y) არის x და y-ის უწყვეტი ფუნქცია. თუმცა, შეუძლებელია ამ განტოლების ანალიტიკური ამოხსნის მიღება საკმარისად თვითნებური ფუნქციისთვის f და მხოლოდ ზოგიერთი განსაკუთრებული შემთხვევისთვის.

მოდით მივცეთ პირველი რიგის დიფერენციალური განტოლება საწყისი პირობით y(x 0)=y 0. მოდით ავირჩიოთ ნაბიჯი h და შემოვიტანოთ აღნიშვნა:

x i = x 0 + ih და y i = y(x i), სადაც i = 0, 1, 2, ... .

ზემოთ აღწერილი მეთოდის მსგავსად, ხსნარი მზადდება

დიფერენციალური განტოლება. განსხვავება ისაა, რომ ნაბიჯი დაყოფილია 4 ნაწილად.

მეოთხე რიგის Runge-Kutta მეთოდის მიხედვით, სასურველი y ფუნქციის თანმიმდევრული მნიშვნელობები y i განისაზღვრება ფორმულით:

y i+1 = y i +?y i

სადაც i = 0, 1, 2 ...

Y=(k1+2*k2+2*k3+k4)/6

k1, k2, k3, k4 რიცხვები თითოეულ საფეხურზე გამოითვლება ფორმულების გამოყენებით:

k1 = h*f(x i, y i)

k2 = f (x i +h/2, y i +k1 /2)*h

k3 = F(x i +h/2, y i +k2 /2)*h

k4 = F(x i +h, y i +k3)*h

ეს არის აშკარა ოთხსაფეხურიანი მეთოდი 4 ბრძანებით სიზუსტით.

რუნგ-კუტას მეთოდის გამოყენებით დიფერენციალური განტოლების ამოხსნის პროცედურის ნაკადის დიაგრამა ნაჩვენებია ნახაზ 6-ზე.

F(x, y) - მოცემული ფუნქცია - ცალკე უნდა იყოს აღწერილი.

შეყვანის პარამეტრები:

X0, XK - საწყისი და საბოლოო

დამოუკიდებელი ღირებულებები

ცვლადი;

Y0 - მნიშვნელობა y 0 საწყისი მდგომარეობიდან

N - დანაყოფის სეგმენტების რაოდენობა;

გამომავალი პარამეტრები:

Y - საჭირო გადაწყვეტის მნიშვნელობების მასივი

ქსელის კვანძებში.

ალგორითმი პრობლემის გადასაჭრელად

გამოსავალი MathCAD-ში

პროგრამების სია Visual Basic ენაზე

Dim xr(), yr(), xe(), ye(), xo(), yo() როგორც Single

პირადი x0, y0, h, xk, k1, k2, c, k3, k4, yd როგორც მარტოხელა

პირადი n, i როგორც მთელი რიცხვი

საჯარო ფუნქცია f(ByVal a, ByVal b) როგორც Single

f = -(a - b) / a

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

x0 = Val(TextBox1.Text)

xk = Val(TextBox2.Text)

y0 = Val(TextBox4.Text)

h = Val(TextBox3.Text)

n = (xk - x0) / სთ

c = y0 / x0 + მათემატიკის ჟურნალი (x0)

DataGridView1.ColumnCount = 4

DataGridView1.RowCount = n + 2

DataGridView1.Item(0, 0).Value = "x"!}

DataGridView1.Item(1, 0).Value = "General"!}

DataGridView1.Item(2, 0).Value = "Euler M"!}

DataGridView1.Item(3, 0).Value = "Runge Kutt"!}

i = 0-დან n-მდე - 1

xe(i) = მათემატიკა. რაუნდი((xe(0) + i * h), 2)

ye(i + 1) = ye(i) + h * f(xe(i) + h / 2, ye(i) + h / 2 * f(xe(i), ye(i)))

DataGridView1.Item(2, 1).მნიშვნელობა = ye(0)

DataGridView1.Item(0, 1).მნიშვნელობა = xe(0)

DataGridView1.Item(0, i + 1).მნიშვნელობა = xe(i)

DataGridView1.Item(2, i + 1). მნიშვნელობა = Str(ye(i))

i = 0-დან n-მდე - 1

xr(i) = მათემატიკა.რაუნდი((xe(0) + i * h), 2)

k1 = h * f(xr(i), yr(i))

k2 = h * f(xr(i) + h / 2, yr(i) + k1 / 2)

k3 = h * f(xr(i) + h / 2, yr(i) + k2 / 2)

k4 = h * f(xr(i) + h, yr(i) + k3)

yd = (k1 + 2 * k2 + 2 * k3 + k4) / 6

yr(i + 1) = yr(i) + yd

DataGridView1.Item(3, 1).მნიშვნელობა = yr(0)

DataGridView1.Item(3, i + 1). მნიშვნელობა = Str(წ(i))

i = 0-დან n-მდე - 1

xo(i) = მათემატიკა. რაუნდი((xe(0) + i * h), 2)

yo(i) = xo(i) * (c - მათემატიკა.Log(xo(i)))

DataGridView1.Item(1, 1). მნიშვნელობა = yo(0)

DataGridView1.Item(1, i + 1). მნიშვნელობა = Str(yo(i))

Chart1.Series.Add("ზოგადი გადაწყვეტა")

Chart1.Series("General Solution").ChartType = SeriesChartType.Line

i = 0-დან n-მდე - 1

დიაგრამა 1. სერია ("ზოგადი გადაწყვეტა"). Points.AddXY(xo(i), yo(i))

Chart1.Series ("General გადაწყვეტა").ChartArea = "ChartArea1"

Chart1.Series.Add("Euler M")

Chart1.Series("Euler M").ChartType = SeriesChartType.Point

i = 0-დან n-მდე - 1

დიაგრამა1.სერია("ეილერი M").ქულები.AddXY(xe(i), ye(i))

Chart1.Series ("Euler M").ChartArea = "ChartArea1"

დიაგრამა1.სერია ("Euler M").ფერი = ფერი.ლურჯი

Chart1.Series.Add("Runge Kutt")

Chart1.Series ("Runge Kutt").ChartType = SeriesChartType.Line

i = 0-დან n-მდე - 1

Chart1.Series("Runge Kutt").Points.AddXY(xr(i), yr(i))

Chart1.Series ("Runge Kutt").ChartArea = "ChartArea1"

დიაგრამა1.სერია ("Runge Kutt").ფერი = ფერი.მწვანე

თქვენი კარგი ნამუშევრის ცოდნის ბაზაზე წარდგენა მარტივია. გამოიყენეთ ქვემოთ მოცემული ფორმა

სტუდენტები, კურსდამთავრებულები, ახალგაზრდა მეცნიერები, რომლებიც იყენებენ ცოდნის ბაზას სწავლასა და მუშაობაში, ძალიან მადლობლები იქნებიან თქვენი.

გამოქვეყნებულია http://www.allbest.ru/

ფედერალური სახელმწიფო ავტონომიური საგანმანათლებლო დაწესებულებაუმაღლესი პროფესიული განათლება

„ბელგოროდის სახელმწიფო ნაციონალ

კვლევითი უნივერსიტეტი"

საინჟინრო ტექნოლოგიებისა და საბუნებისმეტყველო მეცნიერებათა ინსტიტუტი

მათემატიკური და პროგრამული საინფორმაციო სისტემების დეპარტამენტი

ჩვეულებრივი დიფერენციალური განტოლებების სისტემის ამოხსნის პროგრამული დანერგვა მე-4 რიგის რუნგ-კუტას მეთოდით

კურსი

დისციპლინაში "გამოთვლების მეთოდები"

სრულ განაკვეთზე სტუდენტი

სასწავლო სფეროები 010500.62

„მათემატიკური მხარდაჭერა და ადმინისტრირება

საინფორმაციო სისტემები"

მე-3 წლის ჯგუფი 07001302

დანკოვი ნიკოლაი ალექსეევიჩი

ბელგოროდი 2016 წელი

შესავალი

1. თეორიული ნაწილი

1.1 პირველი რიგის ჩვეულებრივი დიფერენციალური განტოლება. კუშის პრობლემა

1.2 რუნგ-კუტას მეთოდის არსი

1.3 განვითარების გარემოს შერჩევა

2. პრაქტიკული ნაწილი

2.1 მე-4 რიგის Runge-Kutta მეთოდის პროგრამული დანერგვა

3. ტესტირება

3.1 მაგალითი

დასკვნა

განაცხადი

შესავალი

გარემომცველი სამყაროს ფენომენების მრავალფეროვნების შესწავლისას, რომლებიც დაკავშირებულია როგორც ზუსტ მეცნიერებებთან, ასევე ჰუმანიტარულ მეცნიერებებთან, მკვლევარები რიგ შემთხვევებში აწყდებიან იმ ფაქტს, რომ ფუნქციონალური დამოკიდებულებები რაოდენობებს შორის გვხვდება განტოლებებიდან, რომლებშიც სასურველი ფუნქციების წარმოებულებია. აწმყო. მათ შორის უმარტივესი არის ის, რომელიც შეიცავს მხოლოდ პირველი რიგის წარმოებულებს და შეიძლება დაიწეროს ფორმით

= f(x, y) ,

სადაც y არის სასურველი ფუნქცია, x არის დამოუკიდებელი ცვლადი, f(x,y) არის x და y-ის უწყვეტი ფუნქცია. თუმცა, ამ განტოლების ანალიტიკური ამოხსნის მიღება შეუძლებელია f საკმაოდ თვითნებური ფუნქციისთვის და მხოლოდ ზოგიერთი განსაკუთრებული შემთხვევისთვის, რომელიც შეიძლება მოიძებნოს საცნობარო ლიტერატურაში.

ბოლო ათწლეულების განმავლობაში ელექტრონული გამოთვლითი ტექნოლოგიის სწრაფი განვითარების გამო, შესაძლებელი გახდა მიახლოებითი მათემატიკური მეთოდების გამოყენება ამ ტიპის პრობლემების გადასაჭრელად. ერთ-ერთ ასეთ მიდგომას ეწოდება რუნგ-კუტას მეთოდი და აერთიანებს მოდიფიკაციების მთელ ჯგუფს, რომლებიც დაკავშირებულია მათი მომზადების მეთოდთან.

საკურსო სამუშაოს მიზანი: ჩვეულებრივი დიფერენციალური განტოლებების ამოხსნის მე-4 რიგის რუნგ-კუტა მეთოდის შესწავლა.

პრობლემის ფორმულირება: აუცილებელია შეიქმნას პროგრამა, რომელიც საშუალებას მოგცემთ ამოხსნათ ჩვეულებრივი დიფერენციალური განტოლებები მე-4 რიგის რუნგ-კუტას მეთოდით.

საკურსო ნამუშევარი შედგება 3 ნაწილისგან, შეიცავს 6 ნახატს, 3 ჩამონათვალს, 1 დანართს და 18 გვერდს.

1. თეორიული ნაწილი

1.1 პირველი რიგის ჩვეულებრივი დიფერენციალური განტოლება. კუშის პრობლემა

სიმარტივისთვის, ჩვენ განვიხილავთ x და y ცვლადების ორგანზომილებიან სივრცეს და მის კუთვნილ G ცვლას. მოდით განისაზღვროს უწყვეტად დიფერენცირებადი ფუნქცია f(x, y) ამ ღია სიმრავლეზე და მიეცეს განტოლება

= f(x, y) (1)

არსებობისა და უნიკალურობის თეორემის მიხედვით, ნებისმიერი წერტილისთვის (x 0 ,y 0) ?G არის ამონახსნი y = y(x), განსაზღვრული გარკვეულ ინტერვალზე (x 0 -d, x 0 +d), რომელიც აკმაყოფილებს პირობა y(x 0) = y 0, ისეთი, რომ წერტილები (x,y(x)) ?G და y` x ? f(x, y(x)), და ეს გამოსავალი იქნება უნიკალური. (1) განტოლების ამოცანა საწყისი პირობით y(x 0) = y 0 (კოშის ამოცანა) არის y(x) ფუნქციის პოვნა, რომელიც აქცევს ორივე განტოლებას (1) და საწყის მდგომარეობას იდენტურად. დავუშვათ, რომ x დამოუკიდებელი ცვლადის მიერ მიღებული მნიშვნელობები მიეკუთვნება ინტერვალს (X 0, X N) და ჩაწერეთ კოშის პრობლემა:

(2)

მოდით გავყოთ სეგმენტი [X 0, X N] N ნაწილად ისე, რომ x n +1 - x n = h n,

n = 0, … ,N-1. შემდგომში განზოგადების დაკარგვის გარეშე განვიხილავთ შემთხვევას, როდესაც დანაყოფი ერთგვაროვანია, ე.ი. ყველა h n = h = = const,

n = 0 ,… ,N-1.

1.2 რუნგ-კუტას მეთოდის არსი

რუნგ-კუტას მეთოდები ფართოდ გამოიყენება დიფერენციალური განტოლებების ამოხსნისას. მე-4 რიგის მეთოდმა იპოვა ყველაზე დიდი გამოყენება.

(3)

(4)

(5)

- პარამეტრი, რომელიც განსაზღვრავს ფუნქციის მნიშვნელობას განსაზღვრის დომენის წერტილთან ახლოს.

მე -4 რიგის ჩვეულებრივი მეთოდი:

(6)

(7)

(8)

(9)

(10)

ფორმულის (10) შეცდომა პროპორციულია h 5-ის.

ეს მეთოდი ბევრად უფრო ზუსტია, ვიდრე ეილერის მეთოდები, მაგრამ ასევე მოითხოვს მეტ გამოთვლებს: წერტილის (x i +1, y i +1) პოზიცია განისაზღვრება f (x,y) ფუნქციის 4-ჯერ გაანგარიშებით. კომპიუტერების მოსვლასთან ერთად, ამ ნაკლოვანებამ შეწყვიტა მნიშვნელოვანი და მე-4 რიგის Runge-Kutta მეთოდი ძალიან ფართოდ გამოიყენება პრაქტიკაში.

მიკროსეგმენტების რაოდენობა, რომლებშიც იყოფა თავდაპირველი სეგმენტი, განისაზღვრება საჭირო გაანგარიშების სიზუსტით. საჭირო სიზუსტის მისაღწევად, პრობლემა წყდება რამდენჯერმე მიკროსეგმენტების რაოდენობის n ზედიზედ გაორმაგებული. სიზუსტე ითვლება მიღწეულ, თუ საწყისი და გაორმაგებული n რიცხვით, y i და y 2i მნიშვნელობები (დამთხვევაში x წერტილებში) განსხვავდება არაუმეტეს მოცემული ოდენობით:

, i =0, ..,n, (11)

სადაც p არის მეთოდის სიზუსტის რიგი.

Rugne-Kutta მეთოდს აქვს შემდეგი თვისებები:

1. მეთოდი არის ერთსაფეხურიანი (საპოვნელად გჭირდებათ ინფორმაცია წინა პუნქტის შესახებ)

2. არ მოითხოვს f(x,y) წარმოებულების გამოთვლას, მაგრამ მოითხოვს თავად ფუნქციის გამოთვლას.

3. აქვს პატარა შეცდომა

1.3 განვითარების გარემოს შერჩევა

C++ Builder არის პროგრამული პროდუქტი, აპლიკაციის სწრაფი განვითარების (RAD) ინსტრუმენტი, ინტეგრირებული პროგრამირების გარემო (IDE), სისტემა, რომელსაც იყენებენ პროგრამისტები C++ პროგრამირების ენაზე პროგრამული უზრუნველყოფის შესაქმნელად. ეს პროდუქტი საშუალებას გაძლევთ შექმნათ როგორც კონსოლის აპლიკაციები, ასევე აპლიკაციები გრაფიკული ინტერფეისით.

Microsoft Visual Studio არის Microsoft-ის პროდუქტების ხაზი, რომელიც მოიცავს ინტეგრირებული პროგრამული უზრუნველყოფის განვითარების გარემოს და უამრავ სხვა ინსტრუმენტს. ამ პროდუქტის გამოყენებით შეგიძლიათ განავითაროთ კონსოლის აპლიკაციები, GUI აპლიკაციები, ასევე ვებსაიტები, ვებ აპლიკაციები, ვებ სერვისები, როგორც მშობლიურ, ისე მართულ კოდებში, რომლებიც მხარდაჭერილია Windows, Windows Mobile, Windows CE, Xbox, Windows Phone .NET Compact Framework და Silverlight.

დავალების შესასრულებლად შეირჩა C++ Builder პროგრამული პროდუქტი. ვინაიდან მისი გამოყენება უფრო ადვილია და აკმაყოფილებს ყველა საჭირო მოთხოვნას კონსოლის აპლიკაციის შესაქმნელად.

2. პრაქტიკული ნაწილი

2.1 მე-4 რიგის Rknge-Kutta მეთოდის პროგრამული დანერგვა

დიფერენციალური განტოლება კოშის პროგრამირება

პროგრამის შემუშავება იწყება ფუნქციების აღწერით. ამისათვის ჩვენ ვიყენებთ switch განცხადებას.

ჩამონათვალი 1 „ფუნქციების აღწერა“

ორმაგი s=0;

შეცვლა (წვერი) (

შემთხვევა 1: (

შესვენება; )

შემთხვევა 2: (

შესვენება; )

შემთხვევა 3: (

შესვენება; )

შემთხვევა 4: (

s = a*(b*x+c*y)/(e*f)*d;

შესვენება; )

ნაგულისხმევი:

(s =0;)

}

დაბრუნება s;

}

შემდეგ მოდის გამოთვლების პროცესში მონაწილე ცვლადების დეკლარაცია და ინიციალიზაცია: განტოლების კოეფიციენტები, სეგმენტის საზღვრები, ნაბიჯი, საწყისი მდგომარეობა.

როდესაც ყველა საჭირო მონაცემი იქნება მიღებული, ჩვენ პირდაპირ ვაგრძელებთ ODE-ს ამოხსნას მე-4 რიგის Runge-Kutta მეთოდით.

ჩამონათვალი 2 “ODE-ების ამოხსნის პროგრამული განხორციელება Runge-Kutta მეთოდით

მე-4 შეკვეთა"

ამისთვის (i=0;i<=n;i++) {

x=x[i]+სთ;

კოუტ<<"y"<

}

3. ტესტირება

პროგრამის გაშვების შემდეგ, ჩვენ ვნახავთ შერჩევისთვის შემოთავაზებულ განტოლებებს.

ბრინჯი. 1 "განტოლების შერჩევა"

თუ შეიყვანთ რიცხვს, რომელიც არ შეესაბამება წარმოდგენილ განტოლების ნომრებს, პროგრამა ამაზე რეაგირებს.

ბრინჯი. 2 "არასწორი პარამეტრის შეყვანა"

საჭირო განტოლების არჩევის შემდეგ, შეიყვანეთ კოეფიციენტები.

ბრინჯი. 3 "შესვლის კოეფიციენტები"

შემდეგი, ჩვენ შევდივართ სეგმენტის დასაწყისსა და დასასრულს, რომელზედაც განხორციელდება გაანგარიშება, ნაბიჯი და საწყისი მდგომარეობა. ბოლო პარამეტრი მომხმარებელმა დამოუკიდებლად უნდა შეარჩიოს.

ბრინჯი. 4 "საჭირო პარამეტრების შეყვანა"

გაანგარიშების დასრულების შემდეგ პროგრამა აჩვენებს გამოსავალს.

ბრინჯი. 5 "შედეგის გამომავალი"

3.1 მაგალითი

მოაგვარეთ კოშის პრობლემა:

სეგმენტზე. იპოვეთ გამოსავალი ერთგვაროვან ბადეზე 0,1 საფეხურით

გამოსავალი. ვინაიდან f(x,y) = x + y, მივიღებთ

= + ,

= ++ ,

= ++ ,

= +h+,

= +() ,

= +სთ,

i = 1, 2, 3, 4 მნიშვნელობებისთვის.

თუ დავუშვებთ =0, = 1, თანმიმდევრულად ვპოულობთ:

i = 1-ისთვის

= 0,1(0 +1) = 0,1 ,

= 0,1(0 + 0,05 +1 + 0,05) = 0,11 ,

= 0,1(0 + 0,05 +1 + 0,055) = 0,1105 ,

= 0,1(0 + 0,1 +1 + 0,1105) = 0,121050 ,

= 1 + *(0,1 + 2*0,11+2*0,1105 + 0,12105) = 1,110342 ,

= 0+0,1=0.1 ,

i = 2-ზე

= 0,1*(0 + 1,110342) = 0,121034 ,

= 0,1*(0,1 + 0,05 +1,110342 + 0,0605171) = 0,1320859 ,

= 0,1*(0,1 + 0,05+1,110342 + 0,06604295) = 0,1326385 ,

= 0,1*(0,1 + 0,1 + 1,110342 + 0,11326385)= 0,1442980 ,

= 1,110342 + *(0,121034 + 2*0,1320859+2*0,1326385 + 0,1442980) = 1,242805 ,

= 0,1+0,1 ,

შემდეგ ვიღებთ:

i = 3 = 0.3, = 1.399717,

i = 4 = 0.4, = 1.583648.

მიღებული ამოხსნის შეცდომა არ აღემატება მნიშვნელობას

|y 4 - q(x 4) | ? 0.000001.

სიცხადისთვის, ცხრილი 1 გვიჩვენებს იგივე კოშის ამოცანის რიცხვითი ამონახსნებს ეილერის, ეილერ-კოშის და რუნგ-კუტას მეთოდების გამოყენებით.

ცხრილი 1 კოშის ამოცანის რიცხვითი ამონახსნები სხვადასხვა მეთოდის გამოყენებით

მეთოდით ნაპოვნი ღირებულებები

ზუსტი გამოსავალი

c(x i)=2- x i -1

ეილერი - კოში

რუნგე - კუტა

ახლა შევადაროთ მიღებული შედეგები ჩვენი პროგრამის გამოთვლებს.

ბრინჯი. 6 "პროგრამის შედეგი"

როგორც მაგალითიდან ვხედავთ, გაანგარიშების სიზუსტე შენარჩუნებულია მეხუთე ათწილადამდე.

დასკვნა

საკურსო მუშაობის დროს განხორციელდა დაკისრებული დავალება, კერძოდ, შედგენილი იქნა პროგრამა, რომელიც საშუალებას იძლევა ამოხსნათ ჩვეულებრივი დიფერენციალური განტოლებები მე-4 რიგის რუნგე-კუტას მეთოდით.

პროგრამის ტესტირებისას მიღებული იქნა შედეგები, რომლებიც აჩვენებს, რომ მე-4 რიგის რუნგ-კუტას მეთოდით ამოხსნის შედეგები, საკმარისი სიზუსტით, ემთხვევა ანალიტიკურს.

გამოყენებული წყაროების სია

1. Berezin I.S., Zhidkov N.P., გამოთვლითი მეთოდები: T.2 - M.: GIFML, 1960. - 620გვ.

2. ბახვალოვი N. S., Zhidkov N. P., Kobelkov G. M. რიცხვითი მეთოდები. - M.: Binom, 2001 - გვ. 363-375 წწ.

3. კოპჩენოვა ნ.ვ., მარონი ი.ა., გამოთვლითი მათემატიკა მაგალითებსა და ამოცანებში - მ.: ნაუკა, 1972. - 368 გვ.

4. https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio

5. https://ru.wikipedia.org/wiki/C%2B%2B_Builder

დანართი 1

#შეიცავს

#შეიცავს

#შეიცავს

#შეიცავს

namespace std-ის გამოყენებით;

char* rus(const char* text) (

char *buffRus=ახალი char;

CharToOem (ტექსტი, buffRus);

დაბრუნება buffRus;

}

ორმაგი ფუნქცია (int tip,double x,double y,double a,double b,double c, double d, double e, double f) (

ორმაგი s=0;

შეცვლა (წვერი) (

შემთხვევა 1: (

s = a+b*(y*c*sin(d*x))-(e*y*f*y);

შესვენება; )

შემთხვევა 2: (

s =a*cos(b*x+c*y)+d*(e*x-f*y);

შესვენება; )

შემთხვევა 3: (

s=((a*cos(b*x)/(x+c))-(d*y*e*y)*f);

შესვენება; )

შემთხვევა 4: (

s = a*(b*x+c*y)/(e*f)*d;

შესვენება; )

ნაგულისხმევი:

(s =0;)

}

დაბრუნება s;

}

int main() (

int tip, i=0, n=0;

ორმაგი h=0.0, ot1=1.0, ot2=0.0, k1=0.0, k2=0.0, k3=0.0, k4=0.0, a=1.0, b=1.0, c=1.0, d=1.0, e=1.0, f =1.0, რეს=0.0;

bool flag=0;

კოუტ<

კოუტ<<" 1. y"=a+b*(y*c*sin(d*x))-(e*y*f*y)\n 2. y"=a*cos(b*x+c*y)+d*(e*x-f*y)\n 3. y"=((a*cos(b*x)/(x+c))-(d*y*e*y)*f)\n 4. y"=a*(b*x+c*y)/(e*f)*d\n";

ხოლო (! დროშა) (

კოუტ<

cin>>წვერი;

if((წვერი == 1) || (წვერი == 2) || (წვერი == 3) || (წვერი == 4))(

დროშა=1; )

სხვა (

კოუტ<

}

}

კოუტ<

კოუტ<<" a= ";cin>>ა;

კოუტ<<" b= ";cin>>ბ;

კოუტ<<" c= ";cin>>გ;

კოუტ<<" d= ";cin>>დ;

კოუტ<<" e= ";cin>>ე;

კოუტ<<" f= ";cin>>ვ;

კოუტ<

ხოლო (ot1>ot2) (

კოუტ<

დაბრუნება 0;

}

დანართი 2

გამოქვეყნებულია Allbest.ru-ზე

მსგავსი დოკუმენტები

    ობიექტზე ორიენტირებული პროგრამირების საგნობრივი სფეროს ანალიზი. ენები Delphi, Object Pascal - ობიექტზე ორიენტირებული პროგრამირების გარემო. ძირითადი ალგორითმული გადაწყვეტილებები. დიფერენციალური განტოლების ამოხსნა Excel-ში Runge-Kutta მეთოდით.

    კურსის სამუშაო, დამატებულია 04/02/2011

    პროგრამის შედგენა Turbo Pascal ალგორითმულ ენაზე. მისი ამოხსნის ალგორითმის ბლოკ-სქემის შემუშავება. პასკალის საწყისი პროგრამის შედგენა და გამოთვლების განხორციელება კომპილირებული პროგრამის გამოყენებით. რუნგ-კუტას და რუნგ-კუტა-მერსონის მეთოდების გამოყენება.

    კურსის სამუშაო, დამატებულია 17/09/2009

    რუნგ-კუტას მეთოდის არსი და მისი თვისებები. პირველი რიგის დიფერენციალური განტოლებების ამოხსნა. მოცემული/Odesolve გამოთვლითი ბლოკი. ჩამონტაჟებული ფუნქციები rkfixed, Rkadapt, Bulstoer. წრფივი ალგებრული განტოლებების ამონახსნები MathCad-ში და Microsoft Excel-ში.

    კურსის სამუშაო, დამატებულია 06/02/2014

    გადაწყვეტის მეთოდების მიმოხილვა Excel-ში. ეილერის მეთოდის რეკურსიული ფორმულები. მეოთხე რიგის რუნგ-კუტას მეთოდი პირველი რიგის განტოლების ამოხსნისთვის. ეილერის მეთოდი საფეხურით h/2. დიფერენციალური განტოლებების ამოხსნა Mathcad-ის გამოყენებით. შეცვლილი ეილერის მეთოდი.

    კურსის სამუშაო, დამატებულია 01/18/2011

    რიგითი დიფერენციალური განტოლების ამოხსნის პრობლემის მათემატიკური აღწერა რუნგ-კუტას მეთოდით, ალგორითმის დიაგრამის შემუშავება და პროგრამის დაწერა Microsoft Visual Studio 2010 პროგრამის ტესტირება.

    კურსის სამუშაო, დამატებულია 01/22/2014

    1-ლი და მე-2 რიგის ჩვეულებრივი დიფერენციალური განტოლებების ამოხსნის განხორციელება რუნგ-კუტას მეთოდით. კომპიუტერზე სისტემის აგება შედეგების ცხრილის და გრაფიკის სახით ჩვენების მიზნით. არქიტექტურა და მოთხოვნები შემუშავებული პროგრამული უზრუნველყოფის მიმართ.

    კურსის სამუშაო, დამატებულია 11/05/2011

    პირველი რიგის დიფერენციალური განტოლებების ამოხსნა. სხვადასხვა შეკვეთის რუნგ-კუტას მეთოდების ვარიანტები. კოშის ამოცანის რიცხვითი ამოხსნის ძირითადი მეთოდები. გამოთვლების სიზუსტის გაზრდა და განმეორებითი დახვეწის მეთოდი. დისკრეტული რიცხვების თანმიმდევრობა.

    ლაბორატორიული სამუშაო, დამატებულია 14.05.2012წ

    ჩვეულებრივი დიფერენციალური განტოლებისთვის კოშის ამოცანის ამოხსნის რიცხვითი მეთოდები: ეილერი, რუნგ-კუტა, ადამსი და რუნგი. ამ განტოლებების მიახლოებითი ამოხსნის ტექნიკა: სასრული განსხვავების მეთოდი, განსხვავებების გადაღება, კოლოკაცია; შედეგების ანალიზი.

    კურსის სამუშაო, დამატებულია 01/14/2014

    უმაღლესი რიგის დიფერენციალური განტოლებების ამოხსნის სხვადასხვა რიცხვითი მეთოდების დადებითი და უარყოფითი მხარეების ანალიზი. მეოთხე რიგის რუნგე-კუტას მეთოდის არჩევის დასაბუთება. პროგრამის შემუშავება, რომელიც მოდელირებს ქანქარის ფიზიკურ და მათემატიკურ ქცევას.

    კურსის სამუშაო, დამატებულია 07/11/2012

    დიფერენციალური განტოლებების ამოხსნა ეილერის და მე-4 რიგის რუნგ-კუტას რიცხვითი მეთოდების კლასიკური ალგორითმების გამოყენებით. ბრძანებები, რომლებიც გამოიყენება გამოთვლით სისტემაში ჩვეულებრივი დიფერენციალური განტოლებების ამოხსნისას. პროგრამის შედეგი.

მოდით, პირველი რიგის დიფერენციალური განტოლება იყოს მოცემული

საწყისი მდგომარეობით

y(x 0) = y 0.

მოდით ავირჩიოთ ნაბიჯი h და შემოვიტანოთ აღნიშვნა:

x i = x 0 + i. h და y i = y(x i) ,

სადაც i = 0, 1, 2,…

x i - ქსელის კვანძები,

y i - ინტეგრალური ფუნქციის მნიშვნელობა კვანძებში .

დიფერენციალური განტოლება წყდება ზემოთ აღწერილი მეთოდების მსგავსად. განსხვავება ისაა, რომ ნაბიჯი დაყოფილია 4 ნაწილად.

მეოთხე რიგის Runge–Kutta მეთოდის მიხედვით, თანმიმდევრული მნიშვნელობები მე სასურველი ფუნქცია განისაზღვრება ფორმულით:

, i = 0, 1, 2,…

და ნომრები k 1 (i) , k 2 (i) , k 3 (i) , k 4 (i)თითოეულ ეტაპზე გამოითვლება ფორმულების გამოყენებით:

ეს არის აშკარა ოთხსაფეხურიანი მეთოდი მეოთხე რიგის სიზუსტით.

Runge–Kutta მეთოდები მარტივია დაპროგრამებისთვის და აქვთ მნიშვნელოვანი სიზუსტე და სტაბილურობა პრობლემების ფართო სპექტრისთვის.

სურათი 6 გვიჩვენებს პროცედურის დიაგრამას RUNGE (X0, XK, Y0, N, Y)კოშის პრობლემის გადასაჭრელად ზემოთ აღწერილი რუნგ-კუტა მეთოდის გამოყენებით.


i = 0, …, N-1

K1 = h * F(x, Yi)

K2 = h * F(x + h/2, Yi + K1 / 2)

K3 = h * F(x + h/2, Yi + K2 / 2)

K4 = h * F(x + h, Yi + K3)

K = (K1 + 2 * K2 + 2 * K3 + K4) / 6

სურათი 6 - RUNGE პროცედურის ნაკადის სქემა

ნახაზი 7 გვიჩვენებს ძირითადი პროგრამის ალგორითმის ბლოკ დიაგრამას კოშის პრობლემის გადასაჭრელად და შედეგების მისაღებად დანაყოფის სეგმენტების ფიქსირებული რაოდენობით N. მთავარ პროგრამაში პროცედურა ე.წ. RUNGE (X0, XK, Y0, N, Y),სასურველი ფუნქციის მნიშვნელობის გამოთვლა y jწერტილებში x jრუნგ-კუტას მეთოდით.

საწყისი მონაცემებიამ პრობლემაში არიან:

X0, XK – დამოუკიდებელი ცვლადის საწყისი და საბოლოო მნიშვნელობები;

Y0 - მნიშვნელობა y 0საწყისი მდგომარეობიდან y(x 0) = y 0;

N - დანაყოფის სეგმენტების რაოდენობა.

პროგრამის შედეგებინაჩვენებია ორ სვეტად:

X – ქსელის კვანძის მნიშვნელობების მასივი;

Y - მოძიებული გადაწყვეტის მნიშვნელობების მასივი შესაბამის ბადის კვანძებში.


შეყვანა X0, XK, Y0, N


RUNGE (X0, XK, Y0, N, Y)


i=0…N


გამომავალი X, Y i


სურათი 7 - ძირითადი პროგრამის ალგორითმის ბლოკ-სქემა ქოშის პრობლემის გადასაჭრელად დანაყოფის სეგმენტების ფიქსირებული რაოდენობით N


დიფერენციალური განტოლებების ამოხსნა MathCad-ში

სურათი 8 - მეთოდის გამოყენებით დიფერენციალური განტოლების ამოხსნის მაგალითი

Runge-Kutta 4 შეკვეთები MathCad გარემოში.

გრაფიკული ფუნქციები Visual Basic-ის გარემოში

ფუნქციების ცხრილების შედგენა და მათი გრაფიკების აგება ერთ-ერთი მთავარი ამოცანაა ჩვეულებრივი დიფერენციალური განტოლებების ამოხსნის პროცესში. მოდით განვიხილოთ ეს ამოცანა უფრო დეტალურად.

დავალება.

ააგეთ y=sin(x) ფუნქციის გრაფიკი სეგმენტზე. გადადგით ტაბულური ნაბიჯი h-ის ტოლი.

გამოსავალი.

Visual Basic-ის გარემოში ფუნქციის გრაფიკის გამოსათვლელად მოსახერხებელია ზოგიერთი გრაფიკული კომპონენტის გამოყენება.

სურათი 9 - ძირითადი კომპონენტების მდებარეობა General ფანჯარაში



Picture Box() კომპონენტი გამოიყენება როგორც კონტეინერი შედგენისთვის. ეს არის წერტილების (პიქსელების) მატრიცა და შესაძლებელია თითოეული ცალკეული წერტილის ფერის კონტროლი. ნებისმიერი წერტილის კოორდინატები განისაზღვრება მთელი რიცხვების წყვილით - მისი სერიული ნომერი X მწკრივში და სერიული ნომერი Y ობიექტის შიგნით. ამრიგად, კომპონენტის ზედა მარცხენა კუთხის კოორდინატებია (0, 0). . წერტილების რაოდენობა ხაზზე და ხაზების რაოდენობა განისაზღვრება კომპონენტის ზომით.

სურათი 10 - PictureBox ობიექტის კოორდინატები

ნახ. სურათი 10 გვიჩვენებს ღერძების მდებარეობას და ობიექტის კუთხის წერტილების კოორდინატებს.

Line() კომპონენტი გამოიყენება ფუნქციის პოლიხაზოვანი გრაფიკის ღერძებისა და სეგმენტების გამოსათვლელად.

გრაფიკის აგების არსი იქამდე მიდის, რომ ფუნქცია უნდა იყოს წარმოდგენილი ცხრილის სახით (ტაბულური), შემდეგ კი მონიშნეთ წერტილები გრაფიკის შაბლონზე და დააკავშიროთ ისინი ერთმანეთთან.

ფუნქციის გრაფიკის აგების ალგორითმი ნაჩვენებია სურათზე 12. ალგორითმი შეიძლება შეიცვალოს. კერძოდ, ზოგიერთი პროცედურა შეიძლება კომბინირებული იყოს და პროცედურა შეიძლება შეიცვალოს ზოგიერთ შემთხვევაში.

მოდით განვიხილოთ ალგორითმი უფრო დეტალურად.

ალგორითმის დანერგვამდე აუცილებელია გრაფიკის დასახვის სუბრუტინა-ფუნქციის აღწერა. ეს აუცილებელია პროგრამის მოდიფიკაციის გასაადვილებლად. თუ სხვა ფუნქციის გრაფიკის დახატვა გჭირდებათ, საჭიროა მხოლოდ ქვეპროგრამის შეცვლა.

ასევე, გრაფიკის შედგენამდე, თქვენ უნდა შექმნათ და შეცვალოთ ფორმა. ფორმის შემუშავების მაგალითი ნაჩვენებია სურათზე 11. ფორმაზე თქვენ უნდა მოათავსოთ კომპონენტები საწყისი მონაცემების შესაყვანად, კომპონენტი ცხრილის დასაბეჭდად, ბრძანების ღილაკი და კონტეინერი გრაფიკის დასაყენებლად (PictureBox). PictureBox-ის შიგნით, თქვენ უნდა დახაზოთ საკოორდინატო ღერძები სწორი ხაზების გამოყენებით და მოათავსოთ ლეიბლები, რათა ჩაწეროთ ფუნქციის არგუმენტების მნიშვნელობების სეგმენტის საზღვრები და ფუნქციის ექსტრემები მოცემულ სეგმენტზე.

საწყისი მონაცემების შეყვანა ხდება მოცემულ პროგრამაში ბრძანების ღილაკის დაჭერით. ძალიან ხშირად, მონაცემთა შეყვანა ხორციელდება TextBox კომპონენტის გამოყენებით.

მოსახერხებელია ფუნქციის დათვლის პროცედურის ჩატარება მარყუჟში პარამეტრით, რადგან ცნობილია გამოსათვლელი გრაფის წერტილების რაოდენობა. პროცედურის შესრულებამდე უნდა დააყენოთ ცხრილის რიგების რაოდენობა.

ხაზების რაოდენობა გამოითვლება ფორმულით k=n+2, სადაც k არის ხაზების რაოდენობა, ხოლო n არის ტაბულური განყოფილებების რაოდენობა. სტრიქონების რაოდენობა უნდა აღემატებოდეს სეგმენტების რაოდენობას 2-ით, ვინაიდან აუცილებელია გავითვალისწინოთ საწყისი წერტილი (ნული) და გვერდის სვეტის სათაურის ჩაწერის ხაზი.

თავად ტაბულირების პროცედურაში შეგიძლიათ დააკავშიროთ ორი მოქმედება - ტაბულა და ექსტრემის გამოთვლა. ეს გამოსავალი ნაჩვენებია პროგრამის ჩამონათვალში სურათზე 13.

შედგენის მთავარი სირთულე არის ფუნქციისა და არგუმენტის მათემატიკური მნიშვნელობიდან გადასვლა ეკრანის კოორდინატებზე, რომლებიც გამოიყენება ნაკვეთის გამოსათვლელად. ამ პრობლემის გადაჭრისას აუცილებელია გავითვალისწინოთ მათემატიკური გრაფიკისა და PictureBox ობიექტზე ღერძების საპირისპირო მიმართულება და სურათის მასშტაბირების აუცილებლობა.

დიაგრამის სკალირების ფაქტორები გამოითვლება შემდეგი ფორმულების გამოყენებით:

სადაც kx არის მასშტაბის ფაქტორი OX ღერძის გასწვრივ,

NPX - PictureBox ობიექტის პიქსელების რაოდენობა, რომელიც გამოყოფილია ჰორიზონტალური გრაფის გამოსახვისთვის,

a – ფუნქციის არგუმენტის სეგმენტის საწყისი მნიშვნელობა,

b – ფუნქციის არგუმენტის სეგმენტის საბოლოო მნიშვნელობა.

,

სადაც Ky არის მასშტაბის ფაქტორი OY ღერძის გასწვრივ,

NPY - PictureBox ობიექტის პიქსელების რაოდენობა, რომელიც გამოყოფილია ვერტიკალური გრაფიკის ასაგებად,

min - ფუნქციის მინიმალური მნიშვნელობა,

max - ფუნქციის მაქსიმალური მნიშვნელობა.

მიმდინარე წერტილის მათემატიკური კოორდინატების თარგმნა ეკრანის კოორდინატებად ხორციელდება ფორმულების გამოყენებით:

zx = მრგვალი (ox + (x(i) - a) * kx),

zy = მრგვალი (oy - (y (i) - მინ) * ky),

სადაც zx, zy – მიმდინარე წერტილის ეკრანის კოორდინატები,

ox, oy - ღერძების გადაკვეთის წერტილის კოორდინატები pictureBox კომპონენტში,

x(i), y(i) – მიმდინარე წერტილის მათემატიკური კოორდინატები,

kx, ky – სკალირების ფაქტორები.

მიმდინარე წერტილის ეკრანის ორდინატის გამოთვლის ფორმულაში მინუს ნიშანი გამოიყენება ღერძების საპირისპირო მიმართულების გასათვალისწინებლად (ეკრანზე და გრაფიკზე).

ფუნქციის შედგენის პროგრამის ჩამონათვალი ნაჩვენებია სურათზე 13.

სხვადასხვა საწყისი მონაცემებისთვის პროგრამის შედეგების ფორმების მაგალითები ნაჩვენებია 14 და 15 სურათებში.

სურათი 11 - ფორმის განვითარების მაგალითი

ნახაზი 12 - ფუნქციის გრაფიკის გამოსახვის ალგორითმი

ცვლადების Rem აღწერა

Dim x() როგორც Single, y () As Single

პირადი როგორც მარტოხელა



რაიმე შეკითხვა?

შეატყობინეთ შეცდომას

ტექსტი, რომელიც გაეგზავნება ჩვენს რედაქტორებს: