Мегаобучалка Главная | О нас | Обратная связь


Кафедра вычислительной математики и программирования



2016-01-05 346 Обсуждений (0)
Кафедра вычислительной математики и программирования 0.00 из 5.00 0 оценок




 



Курсовая работа по дисциплине
Вычислительная математика

 

Выполнил: студент группы ИТ0951 ЗОТФ М.Г. Рымар
Проверила: А.П. Гловацкая

(Вариант №22)

 

Москва 2012

1. МЕТОДЫ РЕШЕНИЯ НЕЛИНЕЙНЫХ УРАВНЕНИЙ

Задание
Решить уравнение методами итерации, Ньютона, хорд. Составить схему алгоритма уточнения корня. Получить решение по программе на языке Quick Basic. Провести оценку погрешности результата.

Исследование задания
1) Отделение корней можно провести аналитическим и графическим способами.
При графическом способе отделения корней следует построить графики функций и , затем определить отрезок, содержащий точку пересечения графиков (Рис. 1)

– отрезок изоляции.


Рис.1

 

Обратимся к аналитическому способу отделения корней. Определим знаки функции

 

 

На отрезке функция меняет знак, следовательно, на отрезке существует хотя бы один корень уравнения. Убедимся, что корень единственный.



Так как , то на отрезке существует, по меньшей мере, один корень уравнения. Убедимся, что корень единственный.


Для любого из отрезка , .

 

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

 

2) При уточнении корня методом итерации приводят уравнение к виду . Для сходимости процесса итерации необходимо, чтобы , . Укажем приём получения функции , если условие сходимости не выполнено.
Построим функцию , – некоторый параметр. Если
, то , если , то , . Такой выбор параметра позволяет обеспечить выполнение условий сходимости. Начальное значение в методе итерации – произвольное значение на отрезке .
Рекуррентная формула метода итерации .
Погрешность результата, вычисленного методом итерации, оценивается по формуле:
, , .
Воспользуемся указанным правилом выбора параметра .
, следовательно, , . Полагаем .
Пусть - начальное значение. Рекуррентная формула .
Таким образом, ( )+ , .
Выполним три итерации.
Воспользуемся программными средствами для решения уравнения методом итерации.


Скриншот работы программы

Исходный код программы

  Imports System.Math Public Class Form1 Function f(ByVal x As Single) f = Sqrt(x + 1) - (1 / x) End Function Function fi(ByVal x As Single) fi = -0.21 * (Sqrt(x + 1) - (1 / x)) + x End Function Function vvod(ByVal T As TextBox) Return CSng(Val(T.Text)) End Function     Sub iterac(ByVal x As Single, ByRef eps As Single, ByRef L As ListBox) Dim t, f1, f2 As Single Dim z As String = "" Dim n As Integer n = 0 t = x   Do x = t z = CStr(n) + Space(6) z = z + Format(x, "0.000000") _ + Space(3) + Format(f(x), "0.0000000") L.Items.Add(z)   t = fi(x)   f1 = f(x) f2 = f(t) n = n + 1 Loop Until Abs(x - t) < eps And Abs(f1 - f2) < eps   End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x, eps As Single   x = vvod(TextBox1) eps = vvod(TextBox2) iterac(x, eps, ListBox1)   End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Close() End Sub   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ListBox1.Items.Clear() TextBox1.Clear() TextBox2.Clear()   End Sub End Class  

 

Оценим погрешность результата, вычисленного методом итерации.
, , .

При , .

 

3) Рекуррентная формула уточнения корня методом Ньютона-Рафсона
, .

Достаточные условия сходимости метода:
a) , б) и непрерывны, знакопостоянны и отличны от нуля на отрезке .

Начальное значение для метода Ньютона-Рафсона выбирается из условия

.
Оценка погрешности метода Ньютона-Рафсона:
, – наибольшее значение ,

– наименьшее значение на отрезке .

Проверим выполнение достаточных условий сходимости метода для рассматриваемого уравнения.
Выше был определён отрезок , где выполнены условия
а) , б) и знакопостоянны и отличны от нуля.
Из условия выбирается начальное значение .

Рекуррентная расчётная формула:
,
Воспользуемся программными средствами для решения уравнения методом Ньютона-Рафсона.

 


Скриншот работы программы

 

Исходный код программы

  Imports System.Math Public Class Form1 Function f(ByVal x As Single) f = Sqrt(x + 1) - (1 / x) End Function Function fp(ByVal x As Single) fp = (1 / x ^ 2) + (1 / (2 * Sqrt(x + 1))) 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 newt(ByRef x As Single, ByVal eps As Single, _ ByRef n As Integer, ByRef m1 As Single, ByRef L As ListBox) Dim t, f1, f2 As Single Dim z As String = "" Do z = CStr(n) + Space(10) + Format(x, "0.000000") + Space(6) + Format(f(x), "0.00000") L.Items.Add(z)   n = n + 1 t = f(x) / fp(x) f1 = f(x) x = x - t f2 = f(x)   Loop Until Abs(f2) / m1 < eps   z = CStr(n) + Space(10) + Format(x, "0.000000") + Space(6) + Format(f(x), "0.00000") L.Items.Add(z) End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x, eps, m1 As Single Dim n As Integer x = vvod(TextBox1) eps = vvod(TextBox2) m1 = vvod(TextBox3) n = 0 newt(x, eps, n, m1, ListBox1) End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ListBox1.Items.Clear() TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() End Sub End Class


Оценим погрешность второго приближения.
. .

, .

 

4) Уточнение корня методом хорд. Рекуррентные формулы имеют вид:
- в случае, если неподвижна точка : ,

, .

- в случае, если неподвижна точка : ,
, .

Неподвижен тот конец отрезка , для которого знак функции совпадает со знаком её второй производной. Для сходимости метода необходимо знакопостоянство на отрезке .


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

и - наименьшее и наибольшее значения на отрезке.
Выше было показано, что на отрезке . Неподвижной точкой является , так как . Таким образом, полагая , получим сходящуюся последовательность приближений к корню по формуле:
. Результаты решения методом хорд, выполненные с помощью программных средств .

Скриншот работы программы

 

Исходный код программы

Imports System.Math Public Class Form1 Function f(ByVal x As Single) f = Sqrt(x + 1) - (1 / x) End Function   Function vvod(ByVal T As TextBox) Return CSng(Val(T.Text)) End Function   Sub hord(ByVal x0 As Single, ByVal m1 As Single, ByVal a As Single, ByVal b As Single, ByVal eps As Single, ByRef L As ListBox) Dim x, c, Fc As Single Dim n As Integer Dim z As String = "" x = x0 'x = 0.5 n = 0 If x0 = a Then c = b ' c = 1.5 Else c = a End If   Fc = f(c) ' Fc=F(1.5)   z = CStr(n) + Space(6) z = z + Format(c, "0.000000") _ + Space(3) + Format(Fc, "0.0000000") L.Items.Add(z) x = c ' x = 1.5 Do n = n + 1 ' n = 1 x = x - (f(x) / (f(x) - f(a))) * (x - a)   z = CStr(n) + Space(6) z = z + Format(x, "0.000000") _ + Space(3) + Format(f(x), "0.0000000") L.Items.Add(z)   Loop Until Abs(f(x) / m1) < eps   End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x0, a, b, m1, eps As Single x0 = vvod(TextBox1) a = vvod(TextBox2) b = vvod(TextBox4) m1 = vvod(TextBox3) eps = vvod(TextBox5) hord(x0, m1, a, b, eps, ListBox1) End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click End End Sub   Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click ListBox1.Items.Clear() TextBox1.Clear() TextBox2.Clear() TextBox3.Clear() TextBox4.Clear() TextBox5.Clear() End Sub End Class  

 

Погрешность для третьей итерации: , .
Погрешность для четвёртой итерации: , .

ИНТЕРПОЛЯЦИЯ ФУНКЦИЙ

Задание
Выполнить линейную и квадратичную интерполяцию таблично заданной функции .


Вычислить значение интерполирующей функции в точках и . Оценить погрешность интерполяции.

Исследование задания
Шаг таблицы постоянный, поэтому можно построить интерполяционный многочлен Ньютона
, .

Ближайший к точке узел справа – , поэтому полагаем . Для линейной интерполяции следует взять узлы , . Для квадратичной интерполяции последовательность узлов , , (число узлов равно , где – порядок интерполирующего многочлена).

Погрешность можно оценить по формуле: .


Получим таблицу конечных разностей .


1. Построим и вычислим .

, . При и

.

Построим и вычислим .

.

.


Воспользуемся программными средствами для вычисления значений полинома первой и второй степени в точке .

Скриншот работы программы


Исходный код программы

  Imports System.Math Public Class Form1   'Процедура вывода одномерного массива Public Sub PrintL(ByRef x() As Double, ByVal k As Integer, ByRef LB As ListBox) Dim i As Integer Dim y As String = "" For i = 1 To k y = Space(5) + CStr(i) + Space(20) + CStr(x(i)) LB.Items.Add(y) Next i End Sub 'Процедура формирования матрицы конечных разностей Sub KONRAZN(ByVal F() As Double, ByRef DY(,) As Double, ByVal n As Integer) Dim i, j As Integer For i = 0 To n DY(i, 0) = F(i) For j = 1 To n DY(i, j) = 0 Next j Next i For j = 1 To n For i = 0 To n - j DY(i, j) = DY(i + 1, j - 1) - DY(i, j - 1) Next i Next j End Sub   'Процедура родсчета значений полинома степени М Sub NEWTON2(ByVal q As Double, ByVal M As Integer, ByVal DY(,) As Double, _ ByRef p As Double, ByRef R As Double) Dim qq, fact As Double Dim k, j As Integer k = DY.GetLength(0) - 1 p = DY(k, 0) qq = 1 fact = 1 For j = 1 To M fact = fact * j qq = qq * (q + j - 1) R = qq * DY(k - j, j) / fact p = p + R Next j End Sub   Sub ReadUzlY(ByRef y() As Double, ByVal n As Integer) Dim i As Integer For i = 0 To n y(i) = CDbl(Val(RichTextBox3.Lines(i))) Next End Sub   Sub inter_po_newton2(ByVal x As Double, ByVal DY(,) As Double, ByVal xn As Double, _ ByVal h As Double, ByVal n As Integer, ByRef P() As Double, ByRef m As Integer) Dim i As Integer, eps As Double Dim q As Double, R As Double eps = CDbl(Val(TextBox1.Text)) 'точность q = (x - xn) / h i = 1 NEWTON2(q, i, DY, P(i), R) Do While Abs(R) > eps And i < n i = i + 1 NEWTON2(q, i, DY, P(i), R) Loop m = i End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click   Dim xx, xn, h As Double Dim nn, m As Integer xx = CDbl(Val(TextBox5.Text)) 'точка интерполяции nn = CInt(Val(TextBox6.Text)) 'кол-во узлов в таблице nn = nn - 1 xn = CDbl(Val(TextBox3.Text)) 'ближ. узел справа(снизу) h = CDbl(Val(TextBox4.Text)) 'шаг таблицы Dim yu(nn) As Double 'массив значений функции Dim DY(nn, nn) As Double 'матрица конечных разностей Dim P(nn) As Double 'получ. массив значений полинома ReadUzlY(yu, nn) KONRAZN(yu, DY, nn) inter_po_newton2(xx, DY, xn, h, nn, P, m) PrintL(P, m, ListBox2) End Sub   Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click ListBox2.Items.Clear()   End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click End End Sub     End Class  

Теперь, используя программу Mathcad, вычислим значение полинома второй степени во всех узлах интерполяции, а результаты запишем в таблицу ниже.

Mathcad

Таблица результатов


Как мы видим, значение полинома второй степени в узлах интерполяции полностью совпадает с начальными условиями. Следовательно, можно сделать вывод о том, что интерполяционный полином второй степени был построен правильно.

2. Оценим погрешность интерполяции по формулам практической оценки погрешности.

.

.

 

3. Для данной таблицы можно построить и интерполяционный многочлен Лагранжа, т.к. формула Лагранжа универсальна.

.

Оценку погрешности определяют по формуле: .

Для обеспечения большей точности интерполяции перенумеруем узлы интерполяции:
( ближайший к точке )

Многочлен Лагранжа при .
При


 

Многочлен Лагранжа при

.

Воспользуемся программными средствами для построения интерполяционного многочлена второй степени в явном виде.

 

Скриншот работы программы

Исходный код программы

 

Imports System.Math Public Class Form1 Function Lag(ByVal x As Double, ByVal a As Double, ByVal b As Double, ByVal c As Double) As Double Lag = a * x * x - b * x + c End Function   Sub REadUzl(ByVal n As Integer, ByRef x() As Double, ByRef y() As Double) Dim i As Integer For i = 0 To n x(i) = CDbl(Val(RichTextBox1.Lines(i))) y(i) = CDbl(Val(RichTextBox2.Lines(i))) Next End Sub   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim xx, l2 As Double Dim nn, i As Integer xx = CDbl(Val(TextBox1.Text)) 'точка интерполяции nn = CInt(Val(TextBox2.Text)) 'число узлов+1(номер последнего узла) Dim xu(nn), yu(nn), L(nn), E1(nn), a, b, c As Double REadUzl(nn, xu, yu) a = yu(0) / ((xu(0) - xu(1)) * (xu(0) - xu(2))) + yu(1) / ((xu(1) - xu(0)) * (xu(1) - xu(2))) + yu(2) / ((xu(2) - xu(0)) * (xu(2) - xu(1))) b = (xu(1) + xu(2)) * yu(0) / ((xu(0) - xu(1)) * (xu(0) - xu(2))) + (xu(0) + xu(2)) * yu(1) / ((xu(1) - xu(0)) * (xu(1) - xu(2))) + (xu(0) + xu(1)) * yu(2) / ((xu(2) - xu(0)) * (xu(2) - xu(1))) c = xu(1) * xu(2) * yu(0) / ((xu(0) - xu(1)) * (xu(0) - xu(2))) + xu(0) * xu(2) * yu(1) / ((xu(1) - xu(0)) * (xu(1) - xu(2))) + xu(0) * xu(1) * yu(2) / ((xu(2) - xu(0)) * (xu(2) - xu(1))) TextBox4.Text = CStr(a) TextBox5.Text = CStr(-b) TextBox6.Text = CStr(c) l2 = Lag(xx, a, b, c) ListBox1.Items.Add("Знач. в точке интерпол " + Format(l2, "0.00000")) ListBox1.Items.Add("Знач. в узлах интерпол ") For i = 0 To nn l2 = Lag(xu(i), a, b, c) ListBox1.Items.Add(Format(l2, "0.0000")) Next End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() End Sub     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub   End Class


Воспользуемся программными средствами для вычисления , а также в целях проверки предыдущих вычислений.

 

 

Скриншот работы программы


Исходный код программы

 

Imports System.Math Public Class Form1   Function Lagr(ByVal x As Double, ByVal xu() As Double, ByVal yu() As Double, ByVal k As Integer) As Double Dim s, p As Double Dim i, j As Integer s = 0 For i = 0 To k p = 1 For j = 0 To k If i <> j Then p = p * (x - xu(j)) / (xu(i) - xu(j)) End If Next j s = s + p * yu(i) Next i Lagr = s End Function Sub Inter_po_Lagr(ByVal x As Double, ByVal xu() As Double, ByVal yu() As Double, _ ByVal n As Integer, ByVal eps As Double, ByRef L() As Double, ByRef k As Integer) Dim E1 As Double k = 1 L(k) = Lagr(x, xu, yu, k) Do k = k + 1 L(k) = Lagr(x, xu, yu, k) E1 = Abs(L(k) - L(k - 1)) Loop Until E1 <= eps Or k = n End Sub     Sub REadUzl(ByVal n As Integer, ByRef x() As Double, ByRef y() As Double) Dim i As Integer For i = 0 To n x(i) = CDbl(Val(RichTextBox1.Lines(i))) y(i) = CDbl(Val(RichTextBox2.Lines(i))) Next End Sub 'Процедура вывода одномерного массива Public Sub PrintL(ByRef x() As Double, ByVal k As Integer, ByRef LB As ListBox) Dim i As Integer Dim y As String = "" For i = 1 To k y = Space(5) + CStr(i) + Space(20) + CStr(x(i)) LB.Items.Add(y) Next i   End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim eps, xx As Double Dim nn, k As Integer eps = CDbl(Val(TextBox3.Text)) 'точность xx = CDbl(Val(TextBox1.Text)) 'точка интерполяции nn = CInt(Val(TextBox2.Text)) 'число узлов+1(номер последнего узла) Dim xu(nn), yu(nn), L(nn) As Double REadUzl(nn, xu, yu) Inter_po_Lagr(xx, xu, yu, nn, eps, L, k) PrintL(L, k, ListBox1) '   End Sub   Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click ListBox1.Items.Clear() End Sub     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click End End Sub     End Class  



4. Проведём оценку погрешности.

 

Таблица 2

5
. Результаты интерполяции сведены в таблицу 2.

 

Число узлов Оценка погрешности
Метод Ньютона Метод Лагранжа
 

 



2016-01-05 346 Обсуждений (0)
Кафедра вычислительной математики и программирования 0.00 из 5.00 0 оценок









Обсуждение в статье: Кафедра вычислительной математики и программирования

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (346)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)