968

Определение с точностью площади криволинейной трапеции

Курсовая

Информатика, кибернетика и программирование

Для поиска константы C будем пользоваться методом золотого сечения. Для определения площади криволинейной трапеции воспользуемся методом Симпсона. Для решения поставленного уравнения используем метод половинного деления.

Русский

2013-01-06

585 KB

53 чел.

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

Определить с точностью E площадь криволинейной трапеции, ограниченной осью OX, прямыми и и кривой C - абсцисса точки минимума функции

Решить уравнение:

Формализация задачи:

Для выполнения поставленного задания воспользуемся следующими методами для каждой конкретной задачи:

1. Для поиска константы C будем пользоваться методом золотого сечения, минимизируя функцию  

2. Для определения площади криволинейной трапеции  воспользуемся методом Симпсона

3. Для решения поставленного уравнения используем метод половинного деления

Упрощенный алгоритм решения задачи:

Обоснование методов решения:

1. Найдём точку минимума функции одним из методов одномерной оптимизации - методом золотого сечения.

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

Полученное значение в результате оптимизирования методом золотого сечения, будет являться значением константы C, которое будет определённо с погрешностью . Это значение C подставим в функцию .

2. Для нахождения площади криволинейной трапеции воспользуемся методом Симпсона

Метод Симпсона, является самым точным методом численного интегрирования, также функция содержит экспоненту и квадратный корень, поэтому воспользуемся им.

3. Для получения нелинейного уравнения, нужно взять определённый интеграл от функции по пределам интегрирования a и x:

Воспользуемся общим правилом решения нелинейных уравнений, включающих в себя два этапа:

  1.  Отделение корня;
  2.  Уточнение корня.

Уточним корень  методом половинного деления на выбранном отрезке, полученном на этапе отделения. Выбранным методом отыщем корень с заданной погрешностью. Выберем этот метод так как он всегда сходится.  

Краткое описание методов решения:

Одномерная оптимизация по методу золотого сечения:

В основу метода положено разбиение отрезка неопределенности [a;b]  в соотношении золотого сечения, такого, что отношение длины его большей части ко всей длине отрезка равно отношению длины его меньшей части к длине его большей части.

В методе золотого сечения каждая точка 1 и х2)осуществляет золотое сечение отрезка:

\

Нетрудно проверить, что точка х1 осуществляет золотое сечение не только отрезка [a;b], но и отрезка [a2]. Точно так же точка х2 осуществляет  золотое сечение не только отрезка [a;b], но и отрезка 1;b]. Это приводит к тому, что значение целевой функции на каждой итерации (кроме первой) вычисляется один раз.

После каждой итерации длина отрезка неопределенности сокращается в 1.618 раза. Длина конечного отрезка неопределенности Dn = 0.618nD0, где    D0= (b-a) – начальная длина отрезка.

Условие окончания процесса итераций   Dn  e. Отсюда можно найти количество итераций, необходимое для достижения точки минимума:

отсюда  логарифмируя, получим 

Метод Симпсона:

Для интервала интегрирования [a;b] формула Симпсона выглядит следующим образом:                          

, где , n – количество отрезков разбиения

Метод половинного деления:

Пусть корень уравнения f(x)=0 отделен на отрезке [a;b], то есть на этом отрезке имеется единственный корень, а функция на данном  отрезке непрерывна.

Метод половинного деления  позволяет получить последовательность вложенных друг в друга отрезков   [a1;b1], [a2;b2], …,[ai;bi],…, [an;bn],   таких что f(ai).f(bi) < 0,                                   где i=1,2,…,n, а длина каждого последующего отрезка вдвое меньше длины предыдущего:

 

В методе половинного деления от итерации к итерации происходит последовательное уменьшение  длины первоначального отрезка [a0;b0]  в два раза            (рис. 6.2.3-1). Поэтому на n-м шаге справедлива следующая оценка погрешности результата:

                                                          

где  - точное значение корня, хnÎ [an;bn] – приближенное значение корня на n-м шаге.                                             

Сравнивая полученную оценку погрешности с заданной точностью , можно оценить требуемое число шагов:

           

Тестирование метода золотого сечения:

Проверка на Mathcad 14

Схема алгоритма метода золотого сечения:

Программный код:

Imports System.Math

Public Class Form1

   Function f(ByVal x As Single)

       f = sqrt(x ^ 3) – x – 2 * cos(x)

   End Function

   Function vvod(ByVal T As TextBox)

       Return CSng(Val(T.Text))

   End Function

   Sub vivod(ByVal x As Single, ByVal T As TextBox)

       T.Text = CStr(x)

   End Sub

   Sub vivodint(ByVal x As Integer, ByVal T As TextBox)

       T.Text = CStr(x)

   End Sub

   Sub gold(ByVal a As Single, ByVal b As Single, ByVal eps As Single, _

               ByRef x As Single, ByRef n As Integer, ByRef L As ListBox)

       Dim k1, k2, x1, x2, f1, f2 As Single, z As String

       k1 = (3 - Sqrt(5)) / 2

       k2 = 1 - k1

       x1 = a + k1 * (b - a)

       x2 = a + k2 * (b - a)

       f1 = f(x1)

       f2 = f(x2)

       n = 0

       Do Until (b - a) < eps

           n = n + 1

           If n > 100 Then

               z = CStr(n) + Space(2)

           ElseIf n >= 10 Then

               z = CStr(n) + Space(4)

           Else

               z = CStr(n) + Space(6)

           End If

           z = z + Format(a, "0.00000") + Space(3) + Format(b, "0.00000") + Space(3) + Format(x1, "0.00000") + Space(3)

           z = z + Format(x2, "0.00000") + Space(5) + Format(f1, "0.00000") + Space(5) + Format(f2, "0.00000") + Space(5) + Format(b - a, "0.00000")

           L.Items.Add(z)

           If f1 < f2 Then

               b = x2 : x2 = x1

               x1 = a + k1 * (b - a)

               f2 = f1 : f1 = f(x1)

           Else

               a = x1 : x1 = x2 : f1 = f2

               x2 = a + k2 * (b - a)

               f2 = f(x2)

           End If

       Loop

       x = (a + b) / 2

   End Sub

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

       Dim a, b, x, eps As Single

       Dim n As Integer

       a = vvod(TextBox1)

       b = vvod(TextBox2)

       eps = vvod(TextBox3)

       gold(a, b, eps, x, n, ListBox1)

       vivodint(n, TextBox4)

       vivod(x, TextBox5)

       vivod(f(x), TextBox6)

   End Sub

End Class

Решение метода:

Тестирование метода Симпсона:

Проверка на MathCad:

Схема алгоритма метода Симпсона:

Программный код:

Imports System.Math

Public Class Form1

   Function f(ByVal x As Single) As Single

   f = 0.181704 * exp(-x) + (x ^ 2) * sin(x)

   End Function

   Function vvod(ByVal T As TextBox)

       Return CSng(Val(T.Text))

   End Function

   Sub vivod(ByVal x As Single, ByVal T As TextBox)

       T.Text = CStr(x)

   End Sub

   Sub vivodint(ByVal x As Integer, ByVal T As TextBox)

       T.Text = CStr(x)

   End Sub

   

   Sub simpson(ByVal a As Single, ByVal b As Single, ByVal eps As Single, ByRef s As Single, _

            ByRef n As Integer, ByRef h As Single, ByRef L As ListBox)

       Dim i, c As Integer

       Dim s1, x As Single, z As String

       n = 2

       h = (b - a) / n

       s = (f(a) + 4 * f((a + b) / 2) + f(b)) * h / 3

       Do

           h = h / 2

           n = 2 * n : s1 = s : c = 4 : x = a

           s = f(a) + f(b)

           For i = 1 To n - 1

               x = x + h

               s = s + c * f(x)

               c = 6 - c

           Next

           s = s * h / 3

           If n > 100 Then

               z = CStr(n) + Space(2)

           ElseIf n > 10 Then

               z = CStr(n) + Space(4)

           Else

               z = CStr(n) + Space(6)

           End If

           z = z + Format(h, "0.00000") + Space(3) + Format(s, "0.00000")

           L.Items.Add(z)

       Loop Until Abs(s - s1) / 15 < eps

   End Sub

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

       Dim a, b, c, h As Single

       Dim n As Integer

       a = vvod(TextBox1)

       b = vvod(TextBox11)

       simpson(a, b, 0.001, c, n, h, ListBox1)

       vivodint(n, TextBox2)

       vivod(h, TextBox3)

       vivod(c, TextBox4)

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

       End

   End Sub

End Class

Решение метода:

Тестирование метода половинного деления:

Проверка на MathCad:

Схема алгоритма метода половинного деления

Программный код:

Imports System.Math

Public Class Form1

   Function f(ByVal x As Single)

       f = -0.181704 * Exp(-x) + 0.181704 - (x ^ 2) * Cos(x) - 2 * x * Sin(x) + 2 * Cos(x)

   End Function

   Function vvod(ByVal T As TextBox)

       Return CSng(Val(T.Text))

   End Function

   Sub vivod(ByVal x As Single, ByVal T As TextBox)

       T.Text = CStr(x)

   End Sub

   Sub vivodint(ByVal x As Integer, ByVal T As TextBox)

       T.Text = CStr(x)

   End Sub

   Function formint(ByVal n As Integer) As String

       Dim z As String = ""

       z = CStr(n)

       If n < 10 Then z = "  " + z

       Return z

   End Function

   Function form(ByVal x As Single) As String

       Dim z As String = ""

       z = Format(x, "0.00000")

       If x > 0 Then z = " " + z

       Return z

   End Function

   Sub mpd(ByVal a As Single, ByVal b As Single, ByVal eps As Single, ByRef c As Single, _

            ByRef n As Integer, ByRef L As ListBox)

       Dim z As String

       n = 0

       Do

           c = (a + b) / 2

           n = n + 1

           If f(c) * f(b) < 0 Then a = c Else b = c

           z = formint(n) + Space(2) + form(a) + Space(2) + form(b) + Space(2) + _

               form(c) + Space(2) + form(f(a)) + Space(2) + form(f(b)) + _

               Space(2) + form(f(c)) + Space(2) + form(b - a)

           L.Items.Add(z)

       Loop Until Abs(b - a) < eps

       c = (a + b) / 2

   End Sub

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

       Dim a, b, c As Single

       Dim n As Integer

       a = vvod(TextBox1)

       b = vvod(TextBox2)

       mpd(a, b, 0.01, c, n, ListBox1)

       vivodint(n, TextBox3)

       vivod(c, TextBox4)

       vivod(f(c), TextBox5)

   End Sub

   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

       End

   End Sub

End Class

Решение метода:

Полный программный код проекта:

Первая форма:

Public Class Form1

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       TextBox1.Text = "0"

       Textbox2.Text = "5"

      

   End Sub

   Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

       Form2.Show()

   End Sub

   Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click

       End

   End Sub

End Class

Вторая форма:

Public Class Form2

   Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       TextBox1.Text = Form1.TextBox1.Text

       TextBox2.Text = Form1.TextBox2.Text

       TextBox3.Text = "0.00001"

       Textbox4.Text = "0"

       TextBox5.Text = "0"

       TextBox6.Text = "0"

       listbox1.Text = ""

   End Sub

   Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

       Dim a, b, eps, x As Single

       a = vvod(TextBox1)

       b = vvod(TextBox2)

       eps = vvod(TextBox3)

       gold(a, b, eps, x)

       vivod(x, textbox5)

       vivod(f(x), textbox6)

   End Sub

   Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click

       Form3.Show()

   End Sub

End Class

Третья форма:

Public Class Form3

   Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       Textbox1.Text = Form1.TextBox1.Text

       Textbox2.Text = Form1.TextBox2.Text

       Textbox3.Text = "0"

       Listbox1.Text = ""

   End Sub

   Private Sub button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button1.Click

       Dim a, b, s, h, eps As Single

       Dim n As Integer

       eps = vvod(TextBox4)

       a = vvod(TextBox1)

       b = vvod(TextBox2)

       simpson(a, b, eps, s, n, h)

       vivod(s, TextBox3)

   End Sub

   Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles button2.Click

       Form4.Show()

   End Sub

End Class

Четвёртая форма:

Public Class Form4

   Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       Textbox1.Text = Form1.TextBox1.Text

       Textbox2.Text = Form1.TextBox2.Text

       Textbox3.Text = "0"

       Textbox4.Text = "0"

       Listbox1.Text = ""

   End Sub

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

       Dim a, b, c, eps As Single

       Dim n As Integer

       a = vvod(Textbox1)

       b = vvod(TextBox2)

       eps = vvod(TextBox5)

       mpd(a, b, 0.001, c, n)

       vivod(c, TextBox3)

       vivod(H(c), TextBox4)

   End Sub

   Private Sub button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

       End

   End Sub

End Class

Модуль:

Imports System.Math

Module Module1

   Dim XY_arr As Single(,)

   Dim Num As Integer

   Dim Ac As Single()

   Public Function vvod(ByVal t As TextBox) As Single

       Return CSng(Val(t.Text))

   End Function

   Public Sub vivod(ByVal s As String, ByRef t As TextBox)

       t.Text = s

   End Sub

   Public Sub vivod(ByVal s As String, ByRef t As TextBox, ByVal add As Boolean)

       If add = True Then

           t.Text += s

       Else

           t.Text = s

       End If

   End Sub

   Public Sub vivod(ByVal s As String, ByRef t As Label)

       t.Text = s

   End Sub

   Public Function F(ByVal x As Single) As Single

       Return (Sqrt(x ^ 3) - x - 2 * Cos(x))

   End Function

   Public Function G(ByVal x As Single) As Single

       Dim xx As Single

       xx = gold(0, 5, 0.001, x)

       Return (xx * Exp(-x) + (x ^ 2) * Sin(x))

   End Function

   Public Function H(ByVal x As Single) As Single

       Return (gold(0, 5, 0.001, x) * Exp(-x) + gold(0, 5, 0.001, x) - (x ^ 2) * Cos(x) - 2 * x * Sin(x) + 2 * Cos(x))

   End Function

   Public Function gold(ByVal a As Single, ByVal b As Single, ByVal eps As Single, _

               ByRef x As Single) As Single

       Dim k1, k2, x1, x2, f1, f2 As Single, z As String

       Dim n As Integer

       k1 = (3 - Sqrt(5)) / 2

       k2 = 1 - k1

       x1 = a + k1 * (b - a)

       x2 = a + k2 * (b - a)

       f1 = F(x1)

       f2 = F(x2)

       n = 0

       Form2.ListBox1.Items.Clear()

       Do Until (b - a) < eps

           n = n + 1

           If n > 100 Then

               z = CStr(n) + Space(2)

           ElseIf n >= 10 Then

               z = CStr(n) + Space(4)

           Else

               z = CStr(n) + Space(6)

           End If

           z = z + Format(a, "0.00000") + Space(3) + Format(b, "0.00000") + Space(3) + Format(x1, "0.00000") + Space(3)

           z = z + Format(x2, "0.00000") + Space(5) + Format(f1, "0.00000") + Space(5) + Format(f2, "0.00000") + Space(5) + Format(b - a, "0.00000")

           Form2.ListBox1.Items.Add(z)

           If f1 < f2 Then

               b = x2 : x2 = x1

               x1 = a + k1 * (b - a)

               f2 = f1 : f1 = F(x1)

           Else

               a = x1 : x1 = x2 : f1 = f2

               x2 = a + k2 * (b - a)

               f2 = F(x2)

           End If

       Loop

       x = (a + b) / 2

       Return x

   End Function

   Sub simpson(ByVal a As Single, ByVal b As Single, ByVal eps As Single, ByRef s As Single, _

                ByRef n As Integer, ByRef h As Single)

       Dim i, c As Integer

       Dim s1, x As Single, z As String

       n = 2

       h = (b - a) / n

       s = (G(a) + 4 * G((a + b) / 2) + G(b)) * h / 3

       Form3.ListBox1.Items.Clear()

       Do

           h = h / 2

           n = 2 * n : s1 = s : c = 4 : x = a

           s = G(a) + G(b)

           For i = 1 To n - 1

               x = x + h

               s = s + c * F(x)

               c = 6 - c

           Next

           s = s * h / 3

           If n > 100 Then

               z = CStr(n) + Space(2)

           ElseIf n > 10 Then

               z = CStr(n) + Space(4)

           Else

               z = CStr(n) + Space(6)

           End If

           z = z + Format(h, "0.00000") + Space(3) + Format(Abs(s), "0.00000")

           Form3.ListBox1.Items.Add(z)

       Loop Until Abs(s - s1) / 15 < eps

   End Sub

   Function formint(ByVal n As Integer) As String

       Dim z As String = ""

       z = CStr(n)

       If n < 10 Then z = "  " + z

       Return z

   End Function

   Function form(ByVal x As Single) As String

       Dim z As String = ""

       z = Format(x, "0.00000")

       If x > 0 Then z = " " + z

       Return z

   End Function

   Sub mpd(ByVal a As Single, ByVal b As Single, ByVal eps As Single, ByRef c As Single, _

            ByRef n As Integer)

       Dim z As String

       n = 0

       Form4.ListBox1.Items.Clear()

       Do

           c = (a + b) / 2

           n = n + 1

           If F(c) * F(b) < 0 Then a = c Else b = c

           z = formint(n) + Space(2) + form(a) + Space(2) + form(b) + Space(2) + _

               form(c) + Space(2) + form(F(a)) + Space(2) + form(F(b)) + _

               Space(2) + form(F(c)) + Space(2) + form(b - a)

           Form4.ListBox1.Items.Add(z)

       Loop Until Abs(b - a) < eps

       c = (a + b) / 2

   End Sub

End Module


 

А также другие работы, которые могут Вас заинтересовать

32313. Азиатский способ производства и возникновение государств на Др.Востоке (восточно-деспотических государств) 34.5 KB
  Постепенно по мере роста масштабов кооперации коллективной трудовой деятельности зародившиеся еще в родоплеменных коллективах зачатки государственной власти превращаются в органы управления и господства над суммами общин которые в зависимости от широты экономических целей складываются в микро и макрогосударства объединяемые силой централизованной власти. Общинники считаются свободными однако фактически все стало государственной собственностью включая личность и жизнь всех подданных которые оказались в безраздельной власти...
32314. Возникновение государственности в Европе (Афины, Рим, германцы, славяне). Общие закономерности и особенности 50 KB
  В отличие от азиатского государства ведущим государствообразующим фактором на территории Европы было классовое разделение общества. Следовательно для генезиса Афинского государства характерно то что оно возникает непосредственно и прежде всего из классовых антагонизмов развивающихся в недрах родоплеменного общества. В длившейся 200 лет борьбе между двумя группами свободных членов римского родоплеменного общества плебеи вырывали у патрициев одну уступку за другой. Если само положение Греции и Рима способствовало...
32315. Теории возникновения государства и права 43 KB
  Одни государства подчас могут распадаться СССР Югославия Чехословакия; другие объединяются в более крупные такой процесс возможно начался в рамках Европейского Союза. Могут зародиться новые причины и формы такого возникновения что бесспорно только обогатит теорию государства. Основные теории происхождения государства теологическая патриархальная договорная насилия органическая материалистическая психологическая патримониальная и ирригационная ставят во главу угла какойлибо один конкретный доминирующий способ...
32316. Государственная власть: понятие и общие черты 33 KB
  В юридической литературе одни авторы рассматривают власть как определенную функцию присущую любому коллективу обществу; другие исследователи как волевое отношение властеотношение властвующего и подвластного субъектов; третьи как способность властвующего управляющего навязывать свою волю другим лицам; четвертые как организованную силу способную подчинять воле определенной социальной общности других людей. Власть понимается также как управление связанное с принуждением. И наконец зачастую под властью понимается государство или его...
32317. Сущность государства. Признаки и определение понятия государства. Различные подходы к определению понятия государства 45 KB
  Сущность государства. Признаки и определение понятия государства. Различные подходы к определению понятия государства. Его определяют и как общественный союз свободных людей с принудительно установленным мирным порядком посредством предоставления исключительного права принуждения только органам государства Н.
32318. больших группах классах тех или иных объектов обладающих набором общих характерных для каждого типа приз 27.5 KB
  В его основе лежит учение об общественноэкономической формации которая включает в себя тип производственных отношений базис и соответствующий ему тип надстройки государство право и т. Ленина и других решающим фактором общественного развития который детерминирует и соответствующий тип надстроечных элементов: государство и право. Рабовладельческое государство есть орудие поддержания власти рабовладельцев над рабами которые были собственностью свободных граждан. Феодальное государство это диктатура класса феодалов земельных...
32319. Внутренние функции государства. Их виды и характеристика в различных типах государства 43.5 KB
  Внутренние функции государства. Внутренние функции государства представляют собой основные направления разнообразной внутренней деятельности государства обусловленные необходимостью решения стоящих перед ним внутренних задач. Таковой была например позиция ряда авторов классифицировавших функции государства еще в 70е годы на функции политической охраны строя политическая функция а также на экономическую социальную и идеологическую функции. Правда при этом оговаривалась возможность и более дробной полностью не совпадающей с различными...
32320. Цивилизационный подход к типологии государств. Понятие цивилизаций. Виды цивилизаций и соответствующих типов государств при различных разновидностях цивилизационного подхода (Тойнби, Ростоу, Сорокин) 45 KB
  Цивилизационный подход это исследование состояния и развития общества закономерностей смены исторических типов государств с точки зрения качественных изменений в социокультурной среде общества в духовной культуре народа его религии и нравах. Цивилизационный подход выделяет три принципа соотношения государства и духовнокультурной жизни общества: Природа государства определяется не только реальным соотношением сил но и накопленными в ходе исторического процесса представлениями о мире ценностями образцами поведения. Цивилизация есть...
32321. Внешние функции государства. Их виды и характеристика в различных типах государства 45 KB
  Внешние функции государства. Их виды и характеристика в различных типах государства. Внешние функции государства представляют собой основные направления деятельности государства непосредственно связанные с решением стоящих перед ним на международной арене целей и задач. Они зависят от характера существующего в стране политического режима и типов государств от этапов развития одного и того же государства от складывающейся в мире международной обстановки от характера взаимоотношений сосуществующих друг с другом государств.