- •Численные методы
- •Содержание
- •Введение
- •Тема №1. Решение уравнений
- •1. Основные сведения
- •1.1 Отделение корней уравнения
- •Решение
- •1.2 Нахождение корней уравнения
- •Решение
- •Решение
- •Метод касательных (метод Ньютона)
- •2. Лабораторная работа №1 «Решение уравнений».
- •3. Контрольные вопросы
- •Тема №2. Решение систем линейных уравнений
- •1. Основные сведения
- •1.1 Прямые методы
- •Решение
- •Решение
- •1.2 Итерационные методы Метод простой итерации
- •Решение
- •Метод Зейделя
- •2. Лабораторная работа №2 «Решение систем линейных уравнений»
- •3. Контрольные вопросы
- •Тема №3. Интерполяция и аппроксимация функций
- •Основные сведения
- •Интерполяция
- •1.1.1. Глобальная полиномиальная интерполяция
- •Интерполяционный полином Лагранжа
- •Решение
- •Интерполяционный многочлен Ньютона
- •Решение
- •Решение
- •Локальная (кусочно-полиномиальная) интерполяция
- •Решение
- •Решение
- •Интерполяция сплайнами
- •1.2. Аппроксимация. Метод наименьших квадратов
- •Решение
- •2. Лабораторная работа № 3 «Интерполяция и аппроксимация функций»
- •3. Контрольные вопросы
- •3.1. Интерполяция
- •Аппроксимация
- •Тема №4. Дифференцирование функций
- •Основные сведения
- •Вычисление первой производной
- •Вычисление второй производной
- •Дифференцирование с использованием интерполяционных формул Дифференцирование на основе интерполяционной формулы Ньютона
- •Решение
- •Дифференцирование на основе многочлена Лагранжа
- •Лабораторная работа №4 «Дифференцирование функций».
- •Контрольные вопросы.
- •Тема №5 Интегрирование функций
- •Основные сведения
- •1.1. Общие принципы численного интегрирования.
- •Простейшие квадратурные формулы прямоугольников, трапеций и Симпсона.
- •Формулы прямоугольников
- •Формула трапеций
- •Формула Симпсона (формула парабол)
- •Решение
- •1.3. Квадратурные формулы Ньютона – Котеса.
- •1.4. Квадратурные формулы Гаусса.
- •Решение
- •2. Лабораторная работа №5 «Интегрирование функций».
- •3. Контрольные вопросы.
- •Тема №6 Решение обыкновенных дифференциальных уравнений
- •1. Основные сведения.
- •1.1. Понятие о численном решении задачи Коши для дифференциального уравнения первого порядка.
- •1.2. Метод Эйлера. Модифицированный метод Эйлера.
- •Решение
- •1.3. Методы Рунге - Кутта.
- •Решение
- •Лабораторная работа №6 «Решение обыкновенных дифференциальных уравнений».
- •3. Контрольные вопросы. Метод Эйлера
- •Решение
- •Решение
3. Контрольные вопросы. Метод Эйлера
Что является решением дифференциального уравнения (далее – Д. У.)?
Что называется задачей Коши для Д. У. 1-го порядка?
В чем состоят условия существования и единственности решения задачи Коши для Д. У. 1 – го порядка?
Как оценивается погрешность численного метода решения задачи Коши? Что называется порядком (порядком точности) численного метода?
Изложите вычислительный алгоритм метода Эйлера. Необходим ли поиск начальных условий в методе Эйлера?
Какова геометрическая интерпретация метода Эйлера?
Почему метод Эйлера имеет первый порядок точности, модифицированный метод Эйлера – второй порядок?
Обязательно ли задание начальных условий при решении Д. У. методом Эйлера?
В чем заключается отличие явных и неявных вычислительных схем в модифицированном методе Эйлера?
В чем заключается правило Рунге оценки погрешности решения задачи Коши численным методом? Запишите правило Рунге для метода Эйлера и модифицированного метода Эйлера.
Методы Рунге – Кутта
В каком случае численный метод называется методом Рунге – Кутта порядка ?
Почему метод Эйлера можно называть методом Рунге – Кутта 1 – го порядка?
Как записывается вычислительный алгоритм метода Эйлера – Коши?
Как записывается вычислительный алгоритм метода Рунге – Кутта 4 – го порядка?
Сколько раз необходимо на каждом шаге вычислять правую часть уравнения при использовании метода Рунге – Кутта 4-го порядка?
Как можно оценить погрешность решения Д. У. при использовании классического метода Рунге – Кутта?
Какова геометрическая интерпретация численного решения задачи Коши? В чем заключается геометрический смысл увеличения порядка точности численного метода?
ПРИЛОЖЕНИЕ 1 Общие указания к выполнению лабораторных работ.
Результаты выполнения лабораторной работы оформляются в виде отчета, на листах формата А4.
Отчет имеет следующую структуру:
Титульный лист — образец оформления титульного листа - см. в приложении 2;
Содержание — включает следующие пункты:
Цель работы;
Постановка задачи и методы решения;
Выполнение работы (основная часть отчета, содержащая результаты вычислений, оформленные в соответствии с заданием);
Вывод.
Приложение — содержит текст (листинг) используемой в расчетах программы (либо соответствующий документ математических пакетов Mathcad, Mathlab – если это предусмотрено).
CD с используемой в расчетах программой - если это предусмотрено.
ПРИЛОЖЕНИЕ 2 Образец оформления титульного листа отчета по лабораторной работе
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«Калининградский государственный технический
университет»
Факультет фундаментальной подготовки
Кафедра высшей математики
Дисциплина «Численные методы»
ОТЧЕТ
по лабораторной работе №___
«
»
Вариант №____
Выполнил
студент
группа___________________
Проверил
Калининград 20__
ПРИЛОЖЕНИЕ 3
Некоторые программы на языках программирования QBasic и Pascal.
Программа №1: отделение корней уравнения (на языке QBasic)
10 REM ОТДЕЛЕНИЕ КОРНЕЙ
20 DEF FN F(X) =COS(X)-.1*X
30 INPUT A, B, H: K=0
40 X1=A: X2=X1+H: Y1=FNF(X1)
50 IF X2>B THEN 120
60 Y2=FNF (X2)
70 IF Y1*Y2>0 THEN 100
80 K=K+1
90 PRINT K; “-Й КОРЕНЬ” ; “[“; X1; ” ;” X2;”]”
100 X1=X2; X2=X1+H: Y1=Y2
110 GOTO 50
120 END
Программа №2.1: метод бисекции (на языке QBasic).
10 REM МЕТОД БИСЕКЦИИ
20 DEF FN F(X)=SIN(2X)- LOG(X)
30 INPUT A, B, E
40 C=(A+B)/2
50 IF FNF(A)*FNF(C)<0 THEN 70
60 A=C: GOTO 80
70 B=C
80 IF B-A>E THEN 40
90 X=(A+B)/2: D=(B-A)/2
100 PRINT “X=”; X,”D=”;D
110 END
Программа №2.2: метод бисекции (на языке Pascal).
Program Solve_equation_Div;
Uses Crt;
Var
a,b,d,e,x1,fa,f1 :real;
ch :char;
{*********************ПОДПРОГРАММЫ***************************}
{____________________Пауза______________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(Для продолжения нажмите любую клавишу…);
Repeat
ch:= readkey;
Until ch<>;
End;
{___________________Функция f(x) из уравнения f(x)=0_____________}
Function f(x:real):real;
Begin
f:=sin(2*x)-ln(x);
End;
{____________________Вывод результата на экран__________________}
Procedure Result_Output;
Begin
ClrScr;
Writeln(‘ x = ’,x1:16:8);
Writeln(‘Погрешность результата = ’, d:16:12);
Writeln;
Pausa;
End;
{____________ОСНОВНАЯ ПРОГРАММА________________________}
BEGIN
ClrScr;
Writeln(‘Введите координаты концов отрезка a,b и точность epsilon’);
Readln(a,b,e);
If ((f(a)*f(b))>0) then
Begin
Writeln(‘Уравнение не имеет решений’);
Halt;
End;
Repeat
x1:=(a+b)/2; f1:= f(x1);
If ((abs(f1)<0,0000000000001) then
Begin
d:=0.0;
Result_Output;
Halt;
End;
fa:= f(a);
If ((fa*f1)<0) then b:=x1 else a:=x1;
d:= b-a;
Result_Output;
Until (d<e);
END.
Программа №3.1: решение системы линейных уравнений методом итераций (на языке QBasic).
10 REM МЕТОД ИТЕРАЦИЙ
20 INPUT X,Y,Z,A,E
30 B=E*(1-A)/A
40 X1=-.64925*Y-.03358*Z-.80100
50 Y1=.51311*X-.26557*Z-5.73525
60 Z1=.20155*X-.36262*Y-1.24117
70 P=SQR(X1-X)^2+(Y1-Y)^2+(Z1-Z)^2)
80 X=X1:Y=Y1;Z=Z1
90 IF P<=B THEN PRINT “X=”;X; PRINT “Y=”;Y:PRINT
“Z=”;Z ELSE 40
100 END
Программа №3.2: решение системы линейных уравнений методом итераций (на языке Pascal).
Program Solve_system_Iteration;
Uses Crt;
Const L= 9;
Type
Matrix_A=array[1..L,1..L+1] of real;
Vector_x = array[1..L] of real;
Var
i,j, n :integer;
d,d1,d2,e,s :real;
a :Matrix_A;
x,x1 :Vector_x;
ch :char;
{*********************ПОДПРОГРАММЫ***************************}
{____________________Пауза______________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(Для продолжения нажмите любую клавишу…);
Repeat
ch:= readkey;
Until ch<>;
End;
{____________________Вывод матрицы на экран________________________}
Procedure Matrix_Output;
Begin
ClrScr;
For i:=1 to n do
Begin
For j:=1 to (n+1) do
Write(a[i,j]:16:8);
Writeln;
End;
Pausa;
End;
{_______Вычисление вектора неизвестных на каждом шаге итераций________}
Procedure Step_Of_Iteration;
Begin
For i:=1 to n do
Begin
x1[i]:=a[i,n+1];
For j:=1 to n do
If (j<>i) then x1[i]:= x1[i]+ a[i,j]*x[j];
End;
End;
{__________Вычисление нормы вектора неизвестных_____________________}
Function norm_x(x: Vector_x):real;
Var
y: real;
Begin
y:= abs(x[1]);
for i:= 1 to n do
if (abs(x[i])>y) then y:=abs(x[i]);
norm_x:=y;
End;
{________Вывод на экран вектора неизвестных_________________________}
Procedure Vector_x_Output;
Begin
ClrScr;
For i:=1 to n do Writeln(‘ x ‘,i,’ = ‘,x1[i]:16:8);
Writeln(‘Расстояние между итерациями по норме = ’d:10:8);
End;
{________Замена вектора неизвестных x на вычисленный вектор x1 _______}
Procedure X_X1;
Begin
For i:=1 to n do x[i]:=x1[i];
End;
{*******************ОСНОВНАЯ ПРОГРАММА***********************}
BEGIN
ClrScr;
Writeln(Введите число уравнений n и точность вычислений epsilon );
Read(n,e);
Writeln(Введите расширенную матрицу системы построчно);
For i:= 1 to n do
Begin
For j:=1 to (n+1) do
Read(a[i],y[i]);
Writeln;
End;
Matrix_Output;
{________Проверка условия: диагональные элементы отличны от нуля____}
For i:= 1 to n do
Begin
If (abs(a[i,j])<0.000000001) then
Begin
Writeln;
Writeln(‘Система уравнений не решается методом итераций’);
Pausa;
Goto finish;
End;
End;
{______Приведение матрицы к виду, удобному для итераций; вычисление
компонент вектора x1; вычисление норм приведенной матрицы__}
d2:=0;
For i:=1 to n do
Begin
s:= a[i,i]; a[i,i]:=0; x1[i]:=0;
a[i,n+1]:= a[i,n+1]/s ; x[i]:=a[i,n+1];
For j:=1 to n do
If (j<>i) then
Begin
a[i,j]:=-a[i,j]/s;
x1[i]:= x1[i]+abs(a[i,j]);
End;
End;
d2:= sqrt(d2);
Matrix_Output;
d:=norm_x(x1);
For i:=1 to n do
Begin
x1[i]:=0;
For j:=1 to n do
If (j<>i) then x1[i]:= x1[i]+abs(a[j,i]);
End;
d1:=norm_x(x1);
Writeln;
Writeln(‘Нормы = ‘, d:8:4,’ ; ‘,d1:8:4,’ ; ‘,d2:8:4);
{______________Нахождение наименьшей из трех норм______________}
If (d1<d) then d:=d1;
If (d2<d) then d:=d2;
Writeln(‘ Наименьшая норма = ’, d:8:4);
If (d>=1) then
Begin
Writeln(‘’);
Writeln(‘’);
Pausa;
Halt;
End;
Writeln(‘’);
Pausa;
s:=d/(1-d);
Repeat
Step_Of_Iteration;
For i:=1 to n do
x[i]:=x1[i] – x[i];
d:=norm_x(x);
Vector_x_Output; Pausa;
X_X1;
Until ((d*s)<e);
END.
Программа №4.1: построение многочлена Лагранжа (на языке QBasic).
10 REM МНОГОЧЛЕН ЛАГРАНЖА
20 DIM X(30), Y(30)
30 INPUT «ВВЕДИТЕ ПОРЯДОК МНОГОЧЛЕНА ЛАГРАНЖА»;N
40 PRINT «ВВЕДИТЕ ПАРАМИ ЗНАЧЕНИЯ X И Y»
50 FOR I=0 TO N
60 INPUT X(I),Y(I)
70 NEXT I
80 INPUT «ВВЕДИТЕ ЗАДАННОЕ ЗНАЧЕНИЕ
АРГУМЕНТА»; A:F=0
90 FOR I=0 TO N
100 L=1
110 FOR J=0 TO N
120 IF I=J THEN 140
130 L=L*(A-X(J))/(X(I)-X(J))
140 NEXT J
150 L=L*Y(I):F=F+L
160 NEXT I
170 PRINT «ПРИ X=»;A, «F(»;A;«)=»; F
180 INPUT «ЕСЛИ ХОТИТЕ ПРОДОЛЖИТЬ ВЫЧИСЛЕНИЯ-
ВВЕДИТЕ 1, ЕСЛИ –НЕТ – 0»;M
190 IF M=1 THEN 80
200 END
Программа №4.2: построение многочлена Лагранжа (на языке Pascal).
Program Polinom_Lagrange;
{***************************************************************}
{***Вычисление значения многочлена Лагранжа n-го порядка
для функции, определенной в (n+1) узлах интерполяции***}
Uses Crt;
Const m = 30;
Type
Vector_x = array[0..m] of real;
Var
i,j, n :integer;
p,L,x1 :real;
x, y :vector_x;
ch :char;
{*********************ПОДПРОГРАММA***************************}
{____________________Пауза______________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(Для продолжения нажмите любую клавишу…);
Repeat
ch:= readkey;
Until ch<>;
End;
{*******************ОСНОВНАЯ ПРОГРАММА***********************}
BEGIN
ClrScr;
Writeln(Введите n - порядок многочлена Лагранжа);
Read(n);
Writeln(Введите пары значений x[i], y[i] (i=0,1,2…n) :);
For i:= 0 to n do
Begin
Read(x[i],y[i]);
Writeln;
End;
Writeln(‘Введите x, в котором вычисляется значение мн-на Лагранжа:’);
Read(x1);
L:=0;
For i:= 0 to n do
Begin
p:=1:
For j:=0 to n do
If (j<>i) then p:=p*(x1 – x[j])/(x[i]-x[j]);
L:=L+p*y[i];
End;
Writeln( ‘ x = ’,x1:10:4, ‘ L(x) = ’, L:10:4);
Pausa;
END.
Программа №5: вычисление производной с помощью многочлена Ньютона (на языке QBasic).
Rem вычисление производной полиномом Ньютона
INPUT “ введите значение x в начальной (нулевой) точке”;X0
INPUT “введите шаг таблицы h=”;h
INPUT “введите номер последней точки n=”;n
DIM y(30)
FOR i=0 TO n
INPUT “y(i)=”;y(i)
NEXT i
INPUT “ введите значении аргумента arg=”;arg
REM дифференцирование произведений вида (t-k)
DEF fndifpol (t,n)
d=0
FOR s=0 TO n
IF s=t THEN GOTO 1
d=d+1/(t-s)
NEXT s
pol=1
FOR s=0 TO n
pol=pol*(t-s)
NEXT s
GOTO 3
1 c=1
FOR k=0 TO n
IF k=t THEN GOTO 2
c=c*(t-k)
2 NEXT k
fndifpol=c
GOTO 4
3 fndifpol=pol*d
4 END DEF
REM вычисление производной полинома
DEF fndifnew (x,h,y,n,arg)
REM преобразование массива значений функции в
массив конечных разностей
FOR i=0 TO n-1
a=y(i)
FOR k=i TO n-1
b=y(k+1)-y(k)
y(k)=a
a=b
NEXT k
y(n)=b
NEXT i
REM деление конечных разностей на значение факториала
f=1
FOR i=2 TO n
f=f*i
y(i)=y(i)/f
NEXT i
t=(arg-x0)/h
REM вычисление значения производной
dif=y(1)
FOR i=1 TO n-1
dif=dif+fndifpol(t,i)*y(i+1)
NEXT i
fndifnew=dif/h
END DEF
pr=fndifnew(x0,h,y,n,arg)
PRINT “df/dx=”;pr,” при x=”;arg
END
Программа №6: вычисление определенного интеграла по квадратурным формулам прямоугольников, трапеций и Симпсона (на языке Pascal).
Program Integration;
Uses Crt;
Var
i, n :integer;
a,b,h :real;
s1, s2, s3, x, x1, x2 :real;
ch :char;
{*********************ПОДПРОГРАММЫ***************************}
{____________________Подынтегральная функция_____________________}
Function f (x:real):real;
Begin
f:= exp(x*x);
End;
{____________________Пауза______________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(Для продолжения нажмите любую клавишу…);
Repeat
ch:= readkey;
Until ch<>;
End;
{*******************ОСНОВНАЯ ПРОГРАММА***********************}
BEGIN
ClrScr;
Writeln(Введите значения концов отрезка [a, b] );
Read(a,b);
Writeln(Введите число разбиений отрезка n );
Read(n);
h:= (b-a)/n ; x1:= a+h/2; x2:= a;
s1:= f(x1); s2:= ((f(x2)+f(b))/2;
for i:= 1 to n-1 do
begin
x1:= x1+h; x2:= x2 + h;
s1:= s1+f(x1); s2:= s2+f(x2);
end;
s1:= h*s1; s2:= h*s2; s3:= (2*s1+s2)/3;
Writeln (Значение интеграла по формуле прямоугольников = , s1: 9 :6);
Writeln (Значение интеграла по формуле трапеций = , s2: 9 :6);
Writeln (Значение интеграла по формуле Симпсона = , s3: 9 :6);
Pausa;
END.
Программа №7. Программа вычисления определенного интеграла с заданной точностью epsilon методом двойного пересчета по квадратурной формуле Симпсона (на языке Pascal).
Program Integr_Sympson;
Uses Crt;
Var
i, n :integer;
a,b,h :real;
s, s1, s2, x, x1, x2 :real;
f0, f1, d, eps :real;
ch :char;
{*********************ПОДПРОГРАММЫ***************************}
{____________________Подынтегральная функция_____________________}
Function f (x:real):real;
Begin
f:= exp(x*x);
End;
{____________________Пауза______________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(Для продолжения нажмите любую клавишу…);
Repeat
ch:= readkey;
Until ch<>;
End;
{*******************ОСНОВНАЯ ПРОГРАММА*********************}
BEGIN
ClrScr;
Writeln(Введите значения концов отрезка [a, b] );
Read(a,b);
Writeln(Введите точность вычислений epsilon );
Read(eps);
f0:= f(a); f1:= f(b); s:= f0 – f1;
s1:= (b – a)*( f0 + f1 + 4*f(( a + b )/2 ) ) / 6;
n:= 2;
REPEAT
h:= ( b – a ) /n ; x1:= a + h/2 ; x2:= a + h ; s2:= s ;
for i:= 1 to n do
begin
s2:= s2 + 4*f(x1) + 2*f(x2);
x1:= x1+h; x2:= x2 + h;
end;
s2:= s2*h/6; d:= abs( s1 – s2 )/15;
s1:= s2; n:= 2*n;
UNTIL (d < eps);
Writeln (Значение интеграла = , s2: 9 :6);
Writeln (Погрешность = , d: 9 :6);
Pausa;
END.
Программа №8. Программа вычисления определенного интеграла с заданной точностью epsilon методом двойного пересчета по квадратурной формуле Гаусса с тремя узлами (на языке Pascal).
Program Integr_Sympson;
Uses Crt;
Var
i, n :integer;
a, b, h, h1, c, c1 :real;
s, s1, s2, x1, x2, x3 :real;
f0, f1, d, eps :real;
ch :char;
{*********************ПОДПРОГРАММЫ***************************}
{____________________Подынтегральная функция_____________________}
Function f (x:real):real;
Begin
f:= exp(x*x);
End;
{____________________Пауза______________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(Для продолжения нажмите любую клавишу…);
Repeat
ch:= readkey;
Until ch<>;
End;
{*******************ОСНОВНАЯ ПРОГРАММА***********************}
BEGIN
ClrScr;
Writeln(Введите значения концов отрезка [a, b] );
Read(a,b);
Writeln(Введите точность вычислений epsilon );
Read(eps);
c:= sqrt ( 3 / 5 ); h1 := ( b – a ) / 2 ; c1 := c*h1;
x2 := ( b + a ) / 2 ; f1 := f( x2 – c1 ) ; f3 := f( x2 + c1 );
s1 := h1*( 5* f1 + 8*f( x2 ) + 5*f3 ) / 9;
n := 2;
REPEAT
h := ( b – a ) /n ; h1 := h / 2 ; c1 := c * h1 ;
x2 := a + h1 ; x1:= x2 – c1 ; x3 := x2 + c1 ; s2 := 0 ;
for i:= 1 to n do
begin
s2:= s2 + 5*f(x1) + 8*f(x2) + 5*f(x3);
x1:= x1 + h; x2:= x2 + h; x3 := x3 + h ;
end;
s2 := s2*h1 / 9; d := abs( s1 – s2 )/63;
s1 := s2; n := 2*n;
UNTIL (d < eps);
Writeln (Значение интеграла = , s2: 9 :6);
Writeln (Погрешность = , d: 9 :6);
Pausa;
END.
Программа №9: Численное решение задачи Коши для дифференциального уравнения 1-го порядка методами Эйлера, Эйлера – Коши и Рунге – Кутта (на языке Pascal).
Program Dif_equations_solver;
{*****************РЕШЕНИЕ ЗАДАЧИ КОШИ***********************}
{***ДЛЯ ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ 1-ГО ПОРЯДКА ***}
Uses CRT;
Const c: array[1..4] of real = (0,0.5,0.5,0);
Type
Koefts = array[0..4] of real;
Var
i, j, n : longint;
a, b, d, h, x, y, y1, y2, y3 : real;
k0, k : Koefts;
ch : char;
{********************ПОДПРОГРАММЫ***************************}
{
_________ Правая часть уравнения –
функция
_____________
}
Function f(x, y :real): real;
Begin
f:= x+y;
End;
{___________Пауза________________________________________________}
Procedure Pausa;
Begin
Writeln;
Writeln(‘ Для продолжения нажмите любую клавишу…..’);
Repeat
ch:= readkey;
Until ch<>’’;
End;
{*******************ОСНОВНАЯ ПРОГРАММА********************}
BEGIN
Clrscr;
Write (‘ Введите значения концов отрезка [a,b] : ’);
Readln(a,b); d:=b-a;
Write(‘ Введите начальное значение y0 функции при x=x0 : ‘);
Readln(y);
Repeat
Writeln(‘ Введите шаг интегрирования h>0, h< ’, d:5:2,’ : ‘);
Readln(h);
Until ((h>0) and (h<d));
x:= a; n:= round((b-a)/h); y1:= y; y2:= y; y3:= y;
Writeln(‘******* Метод Эйлера **Метод Эйлера – Коши **Метод Рунге – Кутта’);
Writeln(‘ x= ‘,x:6:2, ‘ y1 = ‘, y1:12:6, ‘ y2 = ‘, y2:12:6; ‘ y3 = ‘,y3:12:6);
For i:=1 to n do
Begin
{****Метод Эйлера****}
y1:=y1+h*f(x,y1);
{****Метод Эйлера – Коши **** }
k0[0]:=0.0;
for j:=1 to 2 do k0[j]:=h*f(x+2*c[j]*h, y2+2*c[j]*k0[j-1]);
y2:=y2 + (k0[1]+k0[2])/2 ;
{****Метод Рунге – Кутта*****}
k[0]:=0.0;
for j:=1 to 4 do k[j]:=h*f(x+c[j]*h, y3+2*c[j]*k[j-1]);
y3:=y3 + (k[1]+2*k[2]+2*k[3]+k[4])/6 ;
x:=x+h;
Writeln(‘ x= ‘,x:6:2, ‘ y1 = ‘, y1:12:6, ‘ y2 = ‘, y2:12:6; ‘ y3 = ‘,y3:12:6);
End;
Pausa;
END.
ПРИЛОЖЕНИЕ 4 Примеры выполнения расчетов в вычислительном пакете Mathcad.
Пример №1.
Лабораторная работа № 3 «Интерполяция и аппроксимация функций»
Задание
Функция задана таблицей:
Таблица 1
x |
0,5 |
2,5 |
4,5 |
6,5 |
8,5 |
10,5 |
12,5 |
14,5 |
f(x) |
3,0 |
8,3 |
15,6 |
28,0 |
39,0 |
51,2 |
78,4 |
116,0 |
Определить, каким аналитическим выражением можно представить указанную функцию на отрезке и вычислить значения функции в заданных точках x1 = 1,3 и x2=7,8.
