968

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

Курсовая

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

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

Русский

2013-01-06

585 KB

50 чел.

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

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


 

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

34363. Применение лазерной технологии для обработки резины, сборки металлов и интенсификации химических реакций 41 KB
  Применение лазерной технологии для обработки резины сборки металлов и интенсификации химических реакций. Основы технологии лазерной обработки В настоящее время разработаны следующие технологические процессы с использованием мощных лазеров: лазерная поверхностная термоообработка; лазерная сварка; лазерная размерная обработка; измерительная лазерная технология; лазерная интенсификация химических реакций. Технология лазерной термообработки Лазерная термообработка включает в себя процессы лазерной...
34364. Основы биотехнологии 27 KB
  Микроорганизмы характеризуются разнообразными физиологическими и биохимическими свойствами. Микроорганизмы широко распространены в природе в грамме почвы их может содержаться до 3 млрд. Существуют микроорганизмы способные усваивать азот синтезировать белок и др. Микроорганизмы играют важную роль в круговороте веществ в природе.
34365. Основные сведения о технологии и ее отраслях 26.5 KB
  в связи с развитием крупной машинной промышленности. Задача курса технологии состоит в изучении и выборе оптимальных видов технологических процессов сырья энергии топлива в определении эффективных направлений научнотехнического прогресса в промышленности. Современное развитие промышленности идет по пути увеличения масштабов производства совершенствования технического оснащения существующих предприятий возникновения новых технологических процессов. Для развития промышленности сегодняшнего дня характерны тенденции: Быстрый рост числа...
34366. Анализ разновидностей технологий и их характеристика 23.5 KB
  Наиболее распространенная классификация технологии по видам потребительских стоимостей. Машины выполняют функции посредников размещенного между человеком исполнителем технологии и предметом труда. В рамках производственного процесса выделяют базовые или основные технологии совокупность которых традиционно называют технологией производства и вспомогательные которые традиционно называют экономикой производства. Вспомогательные технологии призваны обслуживать базовые.
34367. Взаимосвязь технологии с экономикой и другими науками 24.5 KB
  Все факторы влияющие на рост производительных сил человека: искусность и квалификация эффективность и оснащенность производства прогресс науки как производительной силы все это прямо или косвенно находит свое воплощение в технических средствах труда. По мере исторического развития процесса труда происходит обогащение производительных сил новыми моментами и новыми производительными силами носящими общественный характер. Технологические отношения охватывают отношения между человеком средствами труда и предметом труда в производственном...
34368. Производственные системы и производственные процессы 25 KB
  Производственные системы и производственные процессы. Так даже для получения сельскохозяйственных продуктов основа природные процессы произрастания необходимо создавать производственные системы. Производственные системы включают все необходимое для производства продукции: 1. Примером производственной системы в материальном производстве являются: завод фабрика организация колхоз и т.
34369. Критерии оценки экономической эффективности пр-ва 23.5 KB
  Показатель экономической эффективности технго процесса должен учитывать все виды затрат. Себестоимость это совокупность материальных и трудовых затрат предприятия на изготовление и реализацию продукции выраженных в денежной форе. Различают основные затраты непосредственно связанные с процессом прва расходы на основные материалы технологическое топливо энергию покупные полуфабрикаты зарплату основных рабочих и расходы связанные с обслуживанием процесса и управлением. В зависимости от доли отдельных элементов затрат в себестоимости...
34370. Оптимизация и экономическая оценка технологических процессов 23 KB
  Другими словами можно определить что расходные коэффициенты – это затраты на единицу продукции с учетом качества потребляемого сырья и стоимости. Эти затраты связаны с увеличением степени чистоты используемого сырья. характеризует сколько может получится целевого продукта с единицы сырья. К= m сырья m целевого продукта C1 C2 = Пц Пп В технологических процессах используется несколько видов сырья.
34371. Понятие технологического процесса, основные его параметры и характеристики 30 KB
  Производственный процесс это совокупность всех действий людей и орудий труда необходимых для изготовления или ремонта продукции. Технологический процесс это основная часть производственного процесса направленная на получения из сырья готовой продукции. Экономические: производительность выпускаемой продукции П = Q t кГ ч т ч; где Q количество произведенной продукции кГ т шт. 100 где Qф фактическое количество произведенной продукции кГ т шт.