968
Определение с точностью площади криволинейной трапеции
Курсовая
Информатика, кибернетика и программирование
Для поиска константы C будем пользоваться методом золотого сечения. Для определения площади криволинейной трапеции воспользуемся методом Симпсона. Для решения поставленного уравнения используем метод половинного деления.
Русский
2013-01-06
585 KB
54 чел.
Постановка задачи:
Определить с точностью E площадь криволинейной трапеции, ограниченной осью OX, прямыми и
и кривой
C - абсцисса точки минимума функции
Решить уравнение:
Формализация задачи:
Для выполнения поставленного задания воспользуемся следующими методами для каждой конкретной задачи:
1. Для поиска константы C будем пользоваться методом золотого сечения, минимизируя функцию
2. Для определения площади криволинейной трапеции воспользуемся методом Симпсона
3. Для решения поставленного уравнения используем метод половинного деления
Упрощенный алгоритм решения задачи:
Обоснование методов решения:
1. Найдём точку минимума функции одним из методов одномерной оптимизации - методом золотого сечения.
Т.к. на каждой итерации, кроме первой, требуется вычисление одного значения функции (в методе дихотомии вычисляются два значения функции), поскольку точка есть вторая точка золотого сечения отрезка
, а точка
- первая точка золотого сечения отрезка
Полученное значение в результате оптимизирования методом золотого сечения, будет являться значением константы C, которое будет определённо с погрешностью . Это значение C подставим в функцию
.
2. Для нахождения площади криволинейной трапеции воспользуемся методом Симпсона
Метод Симпсона, является самым точным методом численного интегрирования, также функция содержит экспоненту и квадратный корень, поэтому воспользуемся им.
3. Для получения нелинейного уравнения, нужно взять определённый интеграл от функции по пределам интегрирования a и x:
Воспользуемся общим правилом решения нелинейных уравнений, включающих в себя два этапа:
Уточним корень методом половинного деления на выбранном отрезке, полученном на этапе отделения. Выбранным методом отыщем корень с заданной погрешностью. Выберем этот метод так как он всегда сходится.
Краткое описание методов решения:
Одномерная оптимизация по методу золотого сечения:
В основу метода положено разбиение отрезка неопределенности [a;b] в соотношении золотого сечения, такого, что отношение длины его большей части ко всей длине отрезка равно отношению длины его меньшей части к длине его большей части.
В методе золотого сечения каждая точка (х1 и х2)осуществляет золотое сечение отрезка:
\
Нетрудно проверить, что точка х1 осуществляет золотое сечение не только отрезка [a;b], но и отрезка [a;х2]. Точно так же точка х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
А также другие работы, которые могут Вас заинтересовать | |||
29003. | Логический уровень базовой ИТ: назначение, структура и состав | 40 KB | |
Описание в виде моделей: Модель предметной области общая модель управления модель решаемых задач модель организации информационных процессов кот. разделяется на модель обработки модель обмена модель накопления и модель представлении знаний. Модель обработки включает: формализацию описание процедур: организации вычислительных процессов преобразование данных отражение данных. Модель обмена включает в себя формальное описание процедур выполняемых в компьютерной сети. | |||
29004. | Физический уровень базовой ИТ: назначение, структура, состав | 33.5 KB | |
Каждая подсистема содержит аппаратные и программные компоненты. Аппаратные компоненты ЭВМ различных классов. Программные компоненты производят обработку данных представляет собой алгоритм реализующий преобразование и отображение данных прикладное программное обеспечение. Аппаратные компоненты устройства и узлы для реализации компьютерной сети модемы коммутаторы маршрутизаторы. | |||
29005. | ИТ обработки данных: назначение, структура, функционирование | 30 KB | |
ИТ обработки данных предназначен для решения хорошо структурированных задач задачи кот. Сбор данных. Обработка данных. | |||
29006. | ИТ управления: назначение, структура, функционирование | 30 KB | |
Здесь входные данные преобразуются к формату и виду пригодного для анализа. БД содержит 2 части: данные по операциям накапливаются в процессе функционирования организации. Виды отчётов: суммирующий отчёт данные объединены в отдельные группы и представляют собой вид суммирующих итогов сравнительные отчёты содержат данные из различных источников классифицированные по признакам для сравнения чрезвычайные отчёты формируются по запросу менеджера по его согласию. | |||
29007. | Расчёт фундаментов по второй группе предельных состояний. Определение границ условного фундамента при расчёте осадок свайных фундаментов | 34 KB | |
Определение границ условного фундамента при расчёте осадок свайных фундаментов. Расчёт оснований свайных фундаментов по второй группе предельных состояний по деформациям производится исходя из условия: s≤su 1 где s конечная стабилизированная осадка свайного фундамента определённая расчётом; su предельное значение осадки устанавливаемое соответствующими нормативными документами или требованиями проекта. В настоящее время в большинстве случаев свайный фундамент при расчёте его осадки s рассматривается как условный массивный... | |||
29008. | Определение осадки свайного фундамента методом послойного суммирования. Порядок расчёта | 31.5 KB | |
Определение осадки свайного фундамента методом послойного суммирования.1 а нагрузка передаваемая на грунт основания принимается равномерно распределённой интенсивностью: 1 где N0II расчётная нагрузка от веса здания или сооружения на уровне верхнего обреза фундамента; NcII NpII NгII вес соответственно свай ростверка и грунта в объёме уловного фундамента авсd; Ау=by·ly площадь подошвы условно гофундамента. Найденное значение pII не должнопревышать расчётное сопротивление грунта основания R на уровне нижних концов свай... | |||
29009. | Опускные колодцы. Условия применения, конструктивная схема и последовательность устройства. Классификация опускных колодцев по материалу, по форме в плане и по способу устройства стен | 41.5 KB | |
Опускные колодцы. Опускные колодцы могут быть выполнены из дерева каменной или кирпичной кладки бетона железобетона металла. Наибольшее распространение в современной практике строительства получили железобетонные колодцы. По форме в плане опускные колодцы могут быть круглыми квадратными прямоугольной или смешанной формы с внутренними перегородками и без них рис. | |||
29010. | Кессоны. Условия применения, конструктивная схема, последовательность производства работ | 35 KB | |
При залегании прочных грунтов на значительной глубине когда устройство фундаментов в открытых котлованах становится трудновыполнимым и экономически невыгодным а применение свай не обеспечивает необходимой несущей способности прибегают к устройству фундаментов глубокого заложения. Необходимость устройства фундаментов глубокого заложения может быть вызвана и особенностями самого сооружения например когда оно должно быть опущено на большую глубину заглубленные и подземные сооружения. Одним из видов фундаментов глубокого заложения наряду с... | |||
29011. | Возведение заглубленных и подземных сооружений методом "стена в грунте". Технология устройства. Монолитный и сборный варианты | 66.5 KB | |
Возведение заглубленных и подземных сооружений методом стена в грунте . Способ стена в грунте предназначен для устройства фундаментов и заглубленных в грунт сооружений различного назначения. Способ заключается в том что сначала по контуру будущего сооружения в грунте отрывается узкая глубокая траншея которая затем заполняется бетонной смесью или сборными железобетонными элементами. Способ стена в грунте используется при возведении фундаментов под тяжёлые здания и. | |||