968

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

Курсовая

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

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

Русский

2013-01-06

585 KB

47 чел.

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

Определить с точностью 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


 

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

83450. Функції основних принципів міжнародного права 32.08 KB
  Лукашуком основними функціями принципів міжнародного права є: 1 . Сприяння становленню і розвитку системи міжнародного права як безпосередньо так і шляхом об’єднання норм інститутів і галузей навколо власних загальнообов’язкових правил. Закріплення основних прав обов’язків і законних інтересів суб’єктів міжнародного права визначення основ їх взаємодії шляхом встановлення правових статусів.
83451. Перелік основних принципів міжнародного права. Нормативний зміст основних принципів міжнародного права 38.27 KB
  Нормативний зміст основних принципів міжнародного права Відповідно до принципу незастосування сили або погрози силою всі держави зобовязані утримуватися від погрози силою або її застосування проти територіальної недоторканості та політичної незалежності інших держав або будьяким іншим чином несумісним з цілями ООН. До нормативного змісту принципу також включається: заборона окупації території іншої держави у порушення норм міжнародного права; заборона актів репресалій пов\'язаних із застосуванням сили; надання державою своєї території...
83452. Поняття та види субєктів міжнародного права 36.75 KB
  У міжнародному праві немає норми яка б містила вичерпний перелік субєктів міжнародного права. Єдиним джерелом в якому згадуються субєкти міжнародного права є стаття 3 Віденської конвенції про право міжнародних договорів 1969 р. Конвенція не застосовується до міжнародних угод укладених між державами та іншими субєктами міжнародного права або між такими іншими суб\'єктами міжнародного права.
83453. Поняття та зміст міжнародної правосубєктності 33.66 KB
  Зміст міжнародної правосубєктності залежить від виду субєкта міжнародного права. Найширший він у держав, міжнародна правосубєктність якихєуніверсальною (повною) тавключаєздатністьдо:
83454. Обмеження міжнародної правосубєктності 37.78 KB
  Ці території характеризувалися обмеженням або відсутністю суверенітету а звідси міжнародної правосуб\'єктності. Колонії це залежні території що знаходяться під владою іноземної держави метрополії без самостійної політичної та економічної влади управління якими здійснюється в особливому порядку. В залежності від ступеню самоврядування колонії поділялися на: самоврядні колонії домініони які пройшли розвиток від повної відсутності міжнародної правосуб\'єктності до часткової правосуб\'єктності а згодом й до повної правосуб\'єктності;...
83455. Міжнародна правосуб’єктність держав. Зміст правосуб’єктності держав. Основні права та обов’язки держав 37.61 KB
  Слід підкреслити що всі держави мають статус суб\'єкта міжнародного права. Саме держави можуть створювати інші суб\'єкти міжнародного права. Єдиним міжнародним договором в якому надано дефініцію держави є Конвенція про права та обов\'язки держав 1933 р. Не дивлячись на регіональний характер цієї Конвенції в доктрині міжнародного права стаття 1 Конвенції використовується для визначення держави як суб\'єкта міжнародного права.
83456. Унітарні та складні держави 37.87 KB
  Федерація це союзна держава суб’єкти якої володіють значною самостійністю у внутріїпніх справах а зовнішні зносини віднесені до компетенції центральної влади. Суб’єкти федерації не мають права на зовнішньополітичні зносини але можуть підтримувати економічні культурні наукові стосунки з іншими державами. Суб’єктом міжнародного права виступає федерація в цілому. За принципом виділення суб’єктів федерації поділяються на: національні побудовані за національним принципом виділення суб’єктів федерації наприклад Індія; територіальні ...
83457. Правосубєктність націй і народів, що борються за національне визволення 33.91 KB
  Нації і народи, що борються за національне визволення, як субєкт міжнародного права набули актуальності в 60-ті роках XX століття в період розпаду колоніальної системи. Народ, який в процесі визвольної боротьби набуває елементи державності, створює органи.
83458. Міжнародна правосуб’єктність міжнародних організацій 37.25 KB
  Міжнародна міжурядова організація може бути визначена як формальна структура створена в рамках міжнародного договору укладеного між державамичленами організації яка має конкретну ціль що проявляється у спільному інтересі державчленів. В деяких випадках членами міжнародних організацій крім держав можуть бути також інші міжнародні організації та певні автономні утворення. На відміну від міжнародних організацій членами яких виключно або головним чином є держави і які зазвичай іменуються міжнародними міжурядовими організаціями...