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

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


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

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

(Вариант №22)

Москва 2012

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

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

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

Кафедра вычислительной математики и программирования - student2.ru – отрезок изоляции.

Кафедра вычислительной математики и программирования - student2.ru
Рис.1

Обратимся к аналитическому способу отделения корней. Определим знаки функции Кафедра вычислительной математики и программирования - student2.ru

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

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

Кафедра вычислительной математики и программирования - student2.ru
Кафедра вычислительной математики и программирования - student2.ru
Так как Кафедра вычислительной математики и программирования - student2.ru , то на отрезке Кафедра вычислительной математики и программирования - student2.ru существует, по меньшей мере, один корень уравнения. Убедимся, что корень единственный.
Кафедра вычислительной математики и программирования - student2.ru


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

Для любого Кафедра вычислительной математики и программирования - student2.ru из отрезка Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .

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

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


Скриншот работы программы
Кафедра вычислительной математики и программирования - student2.ru

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

  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  

Оценим погрешность результата, вычисленного методом итерации.
Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .

При Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .

3) Рекуррентная формула уточнения корня методом Ньютона-Рафсона
Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .

Достаточные условия сходимости метода:
a) Кафедра вычислительной математики и программирования - student2.ru , б) Кафедра вычислительной математики и программирования - student2.ru и Кафедра вычислительной математики и программирования - student2.ru непрерывны, знакопостоянны и отличны от нуля на отрезке Кафедра вычислительной математики и программирования - student2.ru .

Начальное значение Кафедра вычислительной математики и программирования - student2.ru для метода Ньютона-Рафсона выбирается из условия

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

Кафедра вычислительной математики и программирования - student2.ru – наименьшее значение Кафедра вычислительной математики и программирования - student2.ru на отрезке Кафедра вычислительной математики и программирования - student2.ru .

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

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


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

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

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

  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


Оценим погрешность второго приближения.
Кафедра вычислительной математики и программирования - student2.ru . Кафедра вычислительной математики и программирования - student2.ru .

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

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

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

- в случае, если неподвижна точка Кафедра вычислительной математики и программирования - student2.ru : Кафедра вычислительной математики и программирования - student2.ru ,
Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .

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


Оценку погрешности можно проводить по любой из формул:
Кафедра вычислительной математики и программирования - student2.ru или Кафедра вычислительной математики и программирования - student2.ru ,

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

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

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

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

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  

Погрешность для третьей итерации: Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .
Погрешность для четвёртой итерации: Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru .

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

Задание
Выполнить линейную и квадратичную интерполяцию таблично заданной функции Кафедра вычислительной математики и программирования - student2.ru .

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


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

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

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

Погрешность можно оценить по формуле: Кафедра вычислительной математики и программирования - student2.ru .


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

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


1. Построим Кафедра вычислительной математики и программирования - student2.ru и вычислим Кафедра вычислительной математики и программирования - student2.ru .

Кафедра вычислительной математики и программирования - student2.ru , Кафедра вычислительной математики и программирования - student2.ru . При Кафедра вычислительной математики и программирования - student2.ru и Кафедра вычислительной математики и программирования - student2.ru

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

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

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

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

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

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


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

Скриншот работы программы
Кафедра вычислительной математики и программирования - student2.ru


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

  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

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

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


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

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

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

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

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

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

Оценку погрешности определяют по формуле: Кафедра вычислительной математики и программирования - student2.ru .

Для обеспечения большей точности интерполяции перенумеруем узлы интерполяции:
Кафедра вычислительной математики и программирования - student2.ru ( ближайший к точке Кафедра вычислительной математики и программирования - student2.ru )
Кафедра вычислительной математики и программирования - student2.ru
Кафедра вычислительной математики и программирования - student2.ru

Многочлен Лагранжа при Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru .
При Кафедра вычислительной математики и программирования - student2.ru


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

Многочлен Лагранжа при Кафедра вычислительной математики и программирования - student2.ru

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

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

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

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

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

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

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


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

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

Скриншот работы программы
Кафедра вычислительной математики и программирования - student2.ru


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

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  


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


4. Проведём оценку погрешности. Кафедра вычислительной математики и программирования - student2.ru

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

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

Таблица 2

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

Число узлов Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru Оценка погрешности
Метод Ньютона Метод Лагранжа
Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru
Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru Кафедра вычислительной математики и программирования - student2.ru   Кафедра вычислительной математики и программирования - student2.ru

Наши рекомендации