- •3Правила округления. Погрешность машинной арифметики.
- •5 Задача отделения корней.
- •2 Теорема
- •6 Метод деления отрезка пополам.
- •22.Определение параметров эмпирической формулы методом наименьших квадратов
- •8 Итерационные методы решения уравнений с одной переменной (метод хорд).
- •9 Итерационные методы решения уравнений с одной переменной (метод касательных)
- •10 Метод Фридмена
- •12 Метод исключений Гаусса с выбором главного элемента.
- •25. Численное интегрирование. Формулы трапеций Оценка точности
- •13 Метод lu-разложения для систем уравнений.
- •17. Интерполяционный многочлен Ньютона.
- •15 Итерационные методы (метод Зейделя).
- •20. Понятие о сплайн-интерполировании.
- •4. Структура полной погрешности решения задач.
- •18. Интерполяционный многочлен Ньютона.
- •19. Оценки погрешности интерполирования.
18. Интерполяционный многочлен Ньютона.
Часто интерполирование ведется для функций, заданных таблицами с равноотстоящими значениями аргумента. В этом случае шаг таблицы (i=0,1,2,…) является величиной постоянной. Для таких таблиц построение интерполяционных формул заметно упрощается.
Первая интерполяционная формула Ньютона
Пусть для функции, заданной таблицей с постоянным шагом, составлена таблица конечных разностей: Будем искать интерполяционный многочлен в виде: (1)
Это многочлен n-й степени. Значения коэффициентов найдём из условия совпадения значений исходной функции и многочлена в узлах. Полагая , из (1) находим , откуда . Далее, придавая x значения и , последовательно получаем: откуда т. е. или откуда . Далее, проведя аналогичные выкладки, можно получить: ; в общем случае выражение для будет иметь вид: . (2) Подставим теперь (2) в выражение для многочлена (1): (3) Практически эта формула применяется в несколько ином виде. Положим , т.е. . Тогда: , и т. д. Окончательно имеем: . (4) Формула (4) называется первой интерполяционной формулой Ньютона. Эта формула применяется для интерполирования в начале отрезка интерполяции, когда t мало по абсолютной величине.
Вторая интерполяционная формула Ньютона
Когда значение аргумента находится ближе к концу отрезка интерполяции, применять первую интерполяционную формулу становится невыгодно. В этом случае применяется формула для интерполирования назад – вторая интерполяционная формула Ньютона, которая отыскивается в виде: (5) Как и для первой формулы Ньютона, коэффициенты находятся из условия совпадения значений функции и интерполяционного многочлена в узлах: . (6) Подставляя (6) в (5) и переходя к переменной , получим окончательный вид второй интерполяционной формулы Ньютона: . (7)
19. Оценки погрешности интерполирования.
Если известно аналитическое выражение интерполируемой функции f, можно применять формулы для оценки погрешности интерполирования (погрешности метода). Остаточный член интерполяционного многочлена имеет вид: . В силу единственности интерполяционного многочлена для фиксированного отрезка интерполирования изложение вопроса о погрешности метода одинаково годится как для многочлена Лагранжа, так и для многочлена Ньютона.
Предположим, что имеет все производные до (n+1)-го порядка включительно. Введём вспомогательную функцию (1) где k – постоянный множитель. Как видно, функция u(x) имеет n+1 корень (узлы интерполяции ). Подберём коэффициент k так, чтобы u(x) имела (n+2)-й корень в любой точке (i=0,1,…n). Действительно, чтобы было , т.е. достаточно принять . (2) При этом значении k функция u(x) будет иметь n+2 корня на отрезке интерполирования и будет обращаться в нуль на концах каждого из (n+1)-го отрезков: Применяя теорему Роля к каждому из отрезков, убеждаемся в том, что имеет не менее (n+1)-го корня; имеет не менее n корней; ………, имеет не менее одного корня. Пусть - та самая точка, в которой . Продифференцируем (1) n+1 раз: , откуда , а при . (3) Сравнивая (2) и (3), имеем: . Но точка - произвольная (правда, от зависит!), поэтому можно написать: . Если принять , то . (4) Оценочная формула (4) непосредственно применима для подсчёта погрешности метода интерполирования по формуле Лагранжа. Используя подстановки и и заменяя соответствующим образом выражение для , можно получить из (4) формулы оценки погрешностей интерполирования по формулам Ньютона: ,(5) и , (6)
Метод Эйлера
Program Eiler; Uses Crt;
Var k:integer; x0,y0,xn,h,y,x:real;
Function f(x,y:real):real;
Begin f:=y; End; Begin ClrScr; Writeln(‘Введите x0:’); Readln(x0);
Writeln('Введите y0:');
Readln(y0);Writeln
('Введите xn:');
Readln(xn);Writeln('Введите k:');Readln(k);h:=(xn-x0)/k;ClrScr;Writeln(' xk ',' yk '); x:=x0;y:=y0;
While x<=xn doBegin Writeln(' ',x:1:2,' ',y:1:5); y:=y+h*f(x,y); x:=x+h; End; Readln; End.
Метод Рунге-Кутта
Program Runge_Kutta;
Uses Crt; Var q,z,q1,q2,
w1,w2,w3,x,y,x0,xn,y0,h,k1,k2,k3,k4,dy:real;
k,i:integer;
Function f(x,y:real):real;
Begin f:=x+y; End;
Begin ClrScr;
Writeln('Введите x0:');
Readln(x0);
Writeln(' Введите y0:');
Readln(y0);
Writeln(' Введите xn:');
Readln(xn);
Writeln(' Введите k:');
Readln(k);h:=(xn-x0)/k;
ClrScr; Writeln(' xk ',' yk ');x:=x0;y:=y0;
Writeln(' ',x:1:2,' ',y:1:6);
For i:=1 to k do Begin
q:=x0; z:=y0; 1:=h*f(x,y);
x:=x+h/2; y:=y+k1/2; k2:=h*f(x,y);
y:=z+k2/2; k3:=h*f(x,y);
x:=q+h; y:=z+k3; k4:=h*f(x,y);
dy:=1/6*(k1+2*k2+2*k3+k4);y:=z+dy; y0:=y; x0:=x;
Writeln(' ',x:1:2,' ',y:1:6);
x:=q+h;End;Readln;End.
Многочлен Лагранжа
Program Lagrange_Interpolation;
Uses Crt; Type mas=array[1..50] of real;
Var N,i,j:integer; A,B,C,
D:mas; i,yi,Z,K,S,x:real;
Begin ClrScr;
Writeln('Введите коли-
чество элементов N:');
Readln(N);
Writeln(' Введите значения xi:');For i:=1 to N do Readln(A[i]);
Writeln(' Введите зна-чения yi:'); For j:=1 to N do Readln(B[j]);ClrScr;
j:=1;Writeln(' xi ',' yi ');
For i:=1 to N do
Begin Write(A[i]:1:3,' ');
Writeln(B[j]:1:3); j:=j+1;
End;Writeln;Z:=1;For i:=1 to N do Begin For j:=1 to N do Begin If i<>j then
Z:=(A[i]-A[j])*Z End;
C[i]:=B[i]/Z;Writeln('A',i,'=',C[i]:6:3); Z:=1;End;
Writeln('Введите произ-вольное значение x:');
Readln(x);K:=1; For i:=1 to N do Begin For j:=1 to N do Begin If i<>j then
K:=(x-A[j])*K End;
D[i]:=C[i]*K; K:=1; End;
S:=0; For i:=1 to N do
S:=S+D[i];Write('Pn(',x:2:3,')=',S:2:3);Readln;End.
Многочлен Ньютона
Program Newton_Interpolation;
Uses Crt; Type mas=array[1..10] of real;
Var i,j,k,m,q,N,s:integer;
Pn,x,hh:real; A,B,C,D,
E:mas;Function Fact(f:integer):integer;
Var i,k:integer; Begin
s:=1; For i:=1 to f do
s:=s*i; Fact:=s; End;
Begin ClrScr; N:=8;
Writeln('Введите значения xi:'); For i:=1
to N do Begin Read(A[i]);
End; Writeln(' Введите значения yi:'); For j:=1
to N do Begin Read(B[j]);
End; ClrScr; j:=1;
Writeln(' xi ',' yi '); For i:=1 to N do Begin
Write(A[i]:2:3,' ');
Writeln(B[j]:2:3); j:=j+1;
End;E[1]:=B[1]; j:=1;
q:=1; For k:=N-1 downto 1 do Begin For i:=1 to N-1 do Begin C[i]:=B[j+1]-B[j]; j:=j+1; End; D[q]:=C[1];
Writeln('D',q,'=',D[q]:2:3);
For m:=1 to N-1 do
B[m]:=C[m];j:=1;q:=q+1;
End;ClrScr;hh:=A[2]-A[1];
Writeln(' Введите значения x:'); Readln(x);
Pn:=E[1]+D[1]*(x-A[1])/(Fact(1)*hh)+D[2]*(x-A[1])*(x-A[2])/(Fact(2)*
exp(2*ln(hh)))+D[3]*(x-A[1])*(x-A[2])*(x-A[3])/(Fact(3)*exp(3*ln(hh)))+D[4]*(x-A[1])*(x-A[2])*(x-A[3])*(x-A[4])/(Fact(4)*exp(4*ln(hh)))+D[5]*(x-A[1])*(x-A[2])*(x-A[3])*(x-A[4])*(x-A[5])/(Fact(5)*
exp(5*ln(hh)))+D[6]*(x-A[1])*(x-A[2])*(x-A[3])*(x-A[4])*(x-A[5])*
(x-A[6])/(Fact(6)*exp(6*ln(hh)))+D[7]*(x-A[1])*(x-A[2])*(x-A[3])*(x-A[4])*(x-A[5])*(x-A[6])*(x-A[7])/(Fact(7)*exp(7*ln(hh)))+D[8]*(x-A[1])*(x-A[2])*(x-A[3])*(x-A[4])*(x-A[5])*(x-A[6])*
(x-A[7])*(x-A[8])/(Fact(8)*exp(8*ln(hh)));Write('P(',x:2:4,')=',Pn:2:4); Readln; End.
Метод Симпсона
Program Simpson;
Uses Crt;Var n,a,b,k:integer;
x,x0,xn,h,y,y0,s1,s2,yn,Int,R,M:real;
Function f(x:real):real; Begin
f:=1/(1+sqr(x)); End;
Begin ClrScr; Writeln('Введите количество разбиений n:'); Readln(n);
Writeln('Введите пределы интегрирования a и b:');
Readln(a,b);h:=(b-a)/n;x0:=a; y0:=f(x0);xn:=a+n*h; yn:=f(xn);For k:=1 to n-1 do Begin x:=a+k*h; y:=f(x);
If k mod 2<>0 then s1:=s1+y else s2:=s2+y;
End; Int:=h/3*(y0+4*s1+2*s2+yn); Write('Int=',Int:2:6); Readln; End.
Метод трапеций
Program Trapetsia;
Uses Crt; Var n,k,a,b:integer;
x,x0,xn,h,y,y0,yn,Int,R,M:real;
Function f(x:real):real; Begin
f:=1/(1+sqr(x)); End;Begin
ClrScr; Writeln('Введите количество разбиений n:');
Readln(n);
Writeln('Введите пределы интегрирования a и b:');
Readln(a,b); h:=(b-a)/n; y:=0; For k:=1 to n-1 do
Begin x:=a+k*h; y:=y+f(x); End; x0:=a; y0:=f(x0);
xn:=a+n*h; yn:=f(xn); Int:=h*(y0/2+y+yn/2);
Write('Int=',Int:2:6); M:=abs(f(2)); Readln; End.
Моделирование движения тела в вязкой среде
Program XXX; Uses Graph,Crt;
Var k,m,a,b,t,dt,v,x,x0:Real; gd,gm,i:Integer;
Begin ClrScr; m:=20; k:=100/3e-2; x0:=5e-2;
a:=1e2; b:=1e4; dt:=1e-4; gd:=0;
Initgraph (gd,gm,'E:\pascal\bgi');
v:=0; x:=0.1;SetColor(15);Line(0,225,600,225);
Line(0,305,0,115);Repeat
v:=v-(k*x+a*v+b*v*v*v)*dt/m; x:=x+v*dt;
t:=t+dt;
PutPixel(Round(t*300),225-Round(x*1e3),15);
Until t>=2; Readln; CloseGraph; End.