- •Постановка задачи
- •Выбор и обоснование используемых методов Метод Эйлера
- •Метод Трапеций
- •Решение задачи
- •Решение задачи с помощью математического пакета Scilab
- •Интерполяционная формула Лагранжа второго порядка в явном виде
- •Численное интегрирование
- •Основные результаты и выводы по работе
- •Список использованной литературы
- •Приложение а. Краткое описание используемых методов a.1. Метод Эйлера
- •A.2. Интерполяционная формула Лагранжа второго порядка в явном виде
- •A.3. Метод Трапеций
- •Приложение b. Тестирование функций, реализующих выбранные численные методы
- •B.1.Метод Эйлера с автоматическим выбором шага
- •B.2. Интерполяционная формула Лагранжа второго порядка в явном виде
- •B.3.Метод Трапеций с использованием двойного просчета
- •Приложение с. Детализированная схема алгоритма решение задачи
- •Приложение d. Код проекта
B.2. Интерполяционная формула Лагранжа второго порядка в явном виде
Для определенного интеграла от многочлена Лагранжа второй степени в явном виде от выбранных узлов: = a, = (a+b)/2. = b . Узлы берем из теста решения ОДУ методом Эйлера.
Аналитическое решение:
Табл.
5
Коэффициенты многочлена Лагранжа |
Аналитическое решение |
Решение, полученное программой |
Решение, полученное Scilab |
a |
|
|
1.7494121 |
b |
|
|
0.8617858 |
c |
1 |
1 |
1. |
Исходя из результатов, представленных на таблице 5, можно сделать вывод, что процедура работают правильно.
Вычисление многочлена Лагранжа 2 степени в явном виде, полученное при помощи тестируемых функций, представлено на рисунке 12 .
Рисунок 12 – Нахождение многочлена Лагранжа в явном виде (тест)
Нахождение тестового полинома Лагранжа 2 степени при помощи математического пакета Scilab 6.0.2 представлено ниже:
--> xx=[0 0.25 0.5];
--> yy=[1 1.3247847 1.8682459];
--> xyd=[xx;yy];
--> a=[0;0;0];
--> //Функция для вычисления коэффициентов квадратичного полинома Лагранжа
--> function [z]=R2(a,xyd)
> z=xyd(2)-a(1)-a(2)*xyd(1)-a(3)*xyd(1)^2
> endfunction
--> //Получение коэффициентов квадратичного полинома Лагранжа
--> [a]=datafit(R2,xyd,a)
a =
1.
0.8617858
1.7494121
--> //Запись в явном виде
--> function [r]=ip2(x)
> r=1.7494121*x^2+0.8617858*x+1
> endfunction
--> //Проверка правильности нахождения полинома Лагранжа 2 степени
--> // должно быть, полное совпадение в узлах интерполяции
--> ip2(0)
ans =
1.
--> ip2(0.25)
ans =
1.3247847
--> ip2(0.5)
ans =
1.8682459
Схема алгоритма процедуры, реализующей формулу Лагранжа в явном виде, представлена на рисунках 13
Рисунок 13 – Схема алгоритма процедуры Lagrange_polynom
Код тестируемого модуля.
Option Strict On
Option Explicit On
Imports System.Math
Module Module3
' Процедура получения полинома Лагранжа в явном виде
Sub Lagrange_polynom(ByRef xm() As Double, ByRef ym() As Double, ByRef a As Double, ByRef b As Double, ByRef c As Double)
Dim t As String
a = ym(0) / ((xm(0) - xm(5)) * (xm(0) - xm(10))) + ym(5) / ((xm(5) - xm(0)) * (xm(5) - xm(10))) + ym(10) / ((xm(10) - xm(0)) * (xm(10) - xm(5)))
b = (ym(0) * (-1) * (xm(5) + xm(10))) / (xm(0) - xm(5) * (xm(0) - xm(10))) - (ym(5) * (xm(0) + xm(10))) / ((xm(5) - xm(0)) * (xm(5) - xm(10))) - (ym(10) * (xm(0) + xm(5))) / ((xm(10) - xm(0)) * (xm(10) - xm(5)))
c = (ym(0) * xm(5) * xm(10)) / (xm(0) - xm(5) * (xm(0) - xm(10))) + (ym(5) * xm(0) * xm(10)) / ((xm(5) - xm(0)) * (xm(5) - xm(10))) + (ym(10) * xm(0) * xm(5)) / ((xm(10) - xm(0)) * (xm(10) - xm(5)))
t = Format(a, "0.00000") + "*" + "x^2" + "+" + Format(b, "0.00000") + "*" + "x" + "+" + CStr(c)
Form2.ListBox3.Items.Add(t)
End Sub
End Module