- •1. Приближенное решение нелинейных уравнений 5
- •Введение
- •1. Приближенное решение нелинейных уравнений
- •1.1. Графический способ отделения корней.
- •1.2. Аналитический способ отделения корней.
- •1.4.2. Блок-схема.
- •1.4.3. Программа.
- •1.3. Метод половинного деления.
- •1.3.1. Расчётная схема.
- •1.4. Метод хорд.
- •1.4.1. Расчетная схема метода.
- •1.5. Метод касательных.
- •1.5.1. Расчётная схема.
- •1.5.2. Блок-схема.
- •1.5.3. Программа.
- •1.6. Комбинированный метод.
- •1.6.1. Расчётная схема.
- •1.7. Метод итераций.
- •1.7.1. Расчётная схема.
- •1.7.2. Блок-схема.
- •1.7.3. Программа.
- •1.8. Дополнения к разделу.
- •1.8.1. Комментарии.
- •1.8.2. Алгоритмы и программы.
- •1.8.3. Пример работы программ.
- •2. Приближенное вычисление определенных интегралов.
- •2.1. Геометрическая интерпретация.
- •2.2. Метод прямоугольников.
- •2.2.1. Расчётная схема.
- •2.3. Метод трапеций.
- •2.3.1. Расчётная схема.
- •2.4. Метод Симпсона.
- •2.4.1. Расчётная схема.
- •2.5. Дополнения к разделу.
- •2.5.1. Комментарии.
- •2.5.2. Пример работы программ.
- •3. Решение систем линейных уравнений.
- •3.1. Метод простых итераций.
- •3.1.1. Расчётная схема.
- •3.1.2. Блок-схема.
- •3.1.3. Программа.
- •3.2. Метод Зейделя.
- •3.2.1. Расчётная схема.
- •3.2.2. Блок-схема.
- •3.2.3. Программа.
- •3.4. Метод Гаусса.
- •3.4.1. Расчётная схема.
- •3.4.2. Блок-схема.
- •3.4.3. Программа.
- •3.5. Дополнения к разделу.
- •3.5.1. Комментарии.
- •3.5.2. Алгоритмы и программы.
- •3.5.3. Пример работы программ.
- •4.3. Метод Рунге-Кутта (четвертого порядка).
- •4.3.1. Расчётная схема.
- •4.4. Дополнения к разделу.
- •4.4.1. Комментарии.
- •4.4.2. Пример работы программ.
- •5. Математическая обработка данных.
- •5.1. Интерполяция.
- •5.1.2. Квадратичная интерполяция.
- •5.1.2.1. Блок-схема.
- •5.1.2.2. Программа.
- •5.1.3. Интерполяция Лагранжа.
- •5.1.3.1. Расчётная схема.
- •5.2.1. Линейное приближение методом наименьших квадратов.
- •5.3. Дополнения к разделу.
- •5.3.1. Комментарии.
- •5.3.2. Алгоритмы и программы.
- •5.3.3. Пример работы программ.
- •6. Задания по численным методам.
5. Математическая обработка данных.
На практике часто
приходится иметь дело с данными,
полученными в результате измерений,
наблюдений. Они, обычно, представлены
в виде табличных зависимостей
,
где
-
значения результатов опыта, полученные
для заданных величин
.
В этих случаях, обычно, требуется найти
аналитическую функцию
,
которая наиболее точно отражает
зависимость результатов измерений, и,
с ее помощью, можно найти значение для
любой точки
.
Существует два
подхода к решению поставленной задачи:
а) функция должна точно проходить через
узлы (
)
- интерполяция
и б) функция проходит с наименьшим
отклонением от узлов и наиболее проста
- аппроксимация.
5.1. Интерполяция.
Задача интерполяции
математически формулируется так: пусть
на отрезке
заданы точки
со своими значениями
.
Требуется найти функцию
,
которая в узлах интерполяции
принимает значения
т.е.
.
Решение этой задачи может быть выполнено
двумя способами: локальной или полной
интерполяцией.
5.1.1. Локальная интерполяция заключается в том, чтобы использовать только близлежащие точки. Например, если значение лежит между и то значение функции может быть найдено с помощью линейной интерполяции по формуле:
5.1.1.1. Блок-схема.
|
5.1.1.2. Программа. procedure inlocal(v: real); var j: integer; begin for j:=1 to n-1 do begin if (v>x[j])and(v<x[j+1]) then break; end; writeln('X=',v,' Y=',y[j]+(y[j+1]-y[j])*(v-x[j])/(x[j+1]-x[j])); end;
|
5.1.2. Квадратичная интерполяция.
Более точный
результат можно получить, если
использовать информацию о трех
близлежащих точках (квадратичная
интерполяция).
В этом случае можно однозначно определить
коэффициенты параболы
для любого отрезка
,
которому принадлежит
.
Решение системы линейных уравнений
вида:
позволяет
определить неизвестные коэффициенты
,
,
и значение
.
5.1.2.1. Блок-схема.
5.1.2.2. Программа.
procedure square(v: real);
var
a: array[1..3,1..3] of real;
b: array[1..3] of real;
i,j,kk: integer;
aa,d,c,p,r,t,m1,m2,m3,m4: real;
tmp: string;
bool: boolean;
begin
i:=1;
bool:=true;
while (i<n+1)and(bool=true) do
begin
if v<x[i] then
begin
kk:=i-2;
bool:=false;
end;
i:=i+1;
end;
if bool=false then
begin
for j:=1 to 3 do
begin
a[j,1]:=sqr(x[kk]); a[j,2]:=x[kk];
a[j,3]:=1; b[j]:=y[kk];
kk:=kk+1;
end;
m1:=a[2,1]*a[1,3]-a[1,1]*a[2,3];
m2:=a[1,2]*a[3,1]-a[3,2]*a[1,1];
m3:=a[2,1]*a[1,2]-a[1,1]*a[2,2];
m4:=a[1,3]*a[3,1]-a[3,3]*a[1,1];
p:=m3*m4-m1*m2;
r:=a[3,1]*b[1]-a[1,1]*b[3];
t:=a[2,1]*b[1]-a[1,1]*b[2];
c:=(r*m3-t*m2)/p;
d:=(t*m4-r*m1)/p;
aa:=(b[1]-a[1,2]*d-a[1,3]*c)/a[1,1];
str(aa*v*v+d*v+c,tmp);
end
else
tmp:='Chislo ne prin. posledovatelnoti..';
writeln('X=',v,' Y=',tmp);
end;
