Информатика. Практикум
.pdfми: массив значений корней системы XK, флаг существования решения системы – переменная B (равна false, если матрица коэффициентов невырожденная и система имеет решение).
Символ 1. Начало алгоритма.
Символы 2–3. Присвоение первоначальных значений коэффици-
ентам T0, T1, T2, T3, T4, C0, C1, C2.
Символы 4–8. В цикле с параметром I = 1; 10 производится ввод значений элементов массивов X[I] и Y[I] и вычисление коэффициентов T0, T1, T2, T3, T4, C0, C1, C2 с использованием суммирования.
Символы 9–11. Формирование массива коэффициентов А, содержащего коэффициенты системы уравнений (передаются в качестве входного параметра в процедуру Gauss).
Символ 12. Вызов процедуры Gauss, реализующей решение системы линейных уравнений методом Гаусса.
Символ 13. Проверка условия существования решения системы уравнений (B = false).
Символ 14. Вывод на экран сообщения «Система не имеет решения». Символ 15. Вывод значений корней системы уравнений производится в цикле (табл. П 1.13), на схеме для упрощения вывод пред-
ставлен в одном символе. Символ 16. Конец алгоритма.
151
1 |
Начало |
|
|
|
|
2 |
T0=10 |
|
|
|
|
|
T1=0 |
|
|
T2=0 |
|
3 |
T3=0 |
|
T4=0 |
|
|
|
|
|
|
C0=0 |
|
|
C1=0 |
|
|
C2=0 |
|
4 |
|
|
|
A |
|
|
I=1, 10 |
|
5 |
|
|
|
Ввод |
Ввод исходных |
|
X[I], Y[I] |
значений |
6 |
T1=T1+X[I] |
|
|
|
|
|
T2=T2+X[I]2 |
|
|
T3=T3+X[I]3 |
|
7 |
T4=T4+X[I]4 |
|
C0=C0+Y[I] |
|
|
|
|
|
C1=C1+X[I]·Y[I] |
|
|
C2=C2+X[I]2·Y[I] |
|
|
8 |
|
|
|
A |
|
93 |
A[1,1]=T0 |
|
|
A[1, 2]=T1 |
|
|
A[1,3]=T2 |
|
|
A[1,4]=C0 |
|
10 |
A[2,1]=T1 |
|
|
|
|
|
A[2,2]=T2 |
|
|
A[2,3]=T3 |
|
11 |
A[2,4]=C1 |
|
|
|
|
|
A[3,1]=T2 |
|
|
A[3,2]=T3 |
|
|
A[3,3]=T4 |
|
|
A[3,4]=C2 |
|
12 |
|
|
Gauss(A,
3, XK, B)
|
13 |
Условие да |
|
нет |
|
|
|
верно? |
14 |
Вывод |
15 |
|
||
|
«Система |
Вывод |
|
не имеет |
XK |
|
решения» |
|
16 |
Конец |
|
Задание начальных значений коэффициентов
T1, T2, T3, T4 и С0, С1, 2
Вычисление
коэффициентов
T1, T2, T3, T4 и С0, С1, 2
Формирование массива коэффициентов системы линейных уравнений A
Решение системы линейных уравнений методом Гаусса
Проверка условия существования решения системы (матрица коэффициентов невырожденная)
Вывод коэффициентов аппроксимационного полинома
Рис. 3.7
152
3.4. Дифференцирование и интегрирование табулированных функций
Задача 3.8. Разработать схему алгоритма и программу вычисле-
x1
ния и вывода на экран значения интеграла (12x2 e x )dx с помо-
x0
щью метода прямоугольников с шагом интегрирования h. Значения h, x0, x1 задаются с клавиатуры. Вычисление значения функции
12x2 ex оформить в виде подпрограммы (function).
Решение задачи
Схема алгоритма решения задачи представлена на рис. 3.8.
1Начало
2 |
|
|
|
|
|
|
|
|
|
|
Ввод |
|
|
|
|
||||
|
|
|
|
|
|
|
|||
|
|
|
X0, X1, |
|
|
|
|
||
|
|
|
h |
|
|
|
|
||
3 |
|
|
|
|
|
|
|
|
|
D=(X1-X0)/h |
|
Вычисление числа узлов |
|||||||
|
|
|
|||||||
|
|
|
на отрезке |
||||||
|
|
|
Int=0 |
|
|||||
|
|
|
|
интегрирования [X0; X1] |
|||||
|
|
|
|
|
|
|
|||
4 |
|
|
|
|
|
|
|
|
|
|
A |
|
|
|
|
||||
|
|
|
|
|
|
|
|||
|
|
|
I=1, D |
|
|
|
|
||
5 |
|
|
|
|
|
|
|
|
|
|
|
Int=Int+ |
|
|
F - вызов функции |
||||
|
|
|
|
|
|||||
|
|
|
+F(X0+ |
|
|
вычисления значения |
|||
6 |
|
|
+I·h/2) |
|
|
функции 12x2 ex |
|||
|
|
A |
|
|
|
|
|||
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|||
7 Вывод
Int
8
Конец
Рис. 3.8
153
Пояснения к схеме алгоритма
Обозначения:
Int – значение интеграла, вычисленное методом прямоугольников;
F – функция для вычисления значения функции 12x2 ex ; D – число узлов на отрезке интегрирования.
Символ 1. Начало алгоритма. Символ 2. Ввод начальных данных.
Символ 3. Вычисление числа разбиений на прямоугольники (D) – числа узлов на отрезке интегрирования.
Символы 4–6. Вычисление в цикле с параметром I = 1; D суммы Int с помощью функции F для вычисления исходной функции.
Символ 7. Вывод на экран значения интеграла. Символ 8. Конец алгоритма.
Программа
Program Intgr;
Var
X0, X1, h, Int : Real; D, I : Integer;
Function F(X : Real) : real;
Begin {начало раздела операторов функции F}
F := 12*X*X + Exp(X);
end; {конец функции F}
Begin {начало раздела операторов основной программы} {ввод пределов интегрирования X0, X1}
Write('Введите пределы интегрирования '); Readln(X0, X1); Write('Введите шаг h '); Readln(h); {ввод шага h}
D:=Round((X1-X0)/h); {вычисление числа узлов отрезка} Int := 0; {первонач. значение значения интеграла} For I:=1 to D do {цикл – по узлам отрезка интегрирования}
Int := Int + F(X0 + I*h/2)*h; {вычисление интеграла}
Writeln('Значение интеграла = ', Int:6:2); {вывод результата}
End. {конец основной программы}
Результаты работы программы
Введите пределы интегрирования 1 5 Введите шаг h 0.1
Значение интеграла = 248.43
154
Задача 3.9. Разработать |
алгоритм и программу вычисления |
|
1 |
3 |
4x3 y3 )dy с помощью метода прямо- |
двойного интеграла |
dx (xy |
|
0 |
2 |
|
угольников с шагом интегрирования h1 по переменной х и с шагом
интегрирования h2 |
по переменной y. Шаги интегрирования h1 и h2 |
|||
задаются |
с |
клавиатуры. |
Вычисление |
выражения |
f (x, y) |
xy 4x3 y3 |
оформить в виде функции. Полученный ре- |
||
зультат вывести на экран. Решить аналитически заданный интеграл и сравнить полученные результаты.
Решение задачи
Суть аналитического вычисления двойного интеграла сводится к последовательному вычислению двух определенных интегралов (внутреннего и внешнего). Во внутреннем интеграле (по переменной y) переменная х принимается при интегрировании за постоянную.
Для численного вычисления двойного интеграла необходимо использовать следующий алгоритм.
Шаг 1. Организация цикла для перебора значений переменной x с шагом h1 (шаг интегрирования внешнего интеграла).
Шаг 2. Для каждого значения x определение значения внутреннего интеграла методом прямоугольников (используется технология
предыдущей задачи). |
|
|
||
|
Шаг 3. Суммирование произведений значений внутренних инте- |
|||
гралов и шага h2. |
|
|
|
|
|
Результат |
аналитического |
решения |
задачи: |
1 |
3 |
|
|
|
|
dx (xy 4x3 y3 )dy |
15 . Схема алгоритма численного |
решения |
|
0 |
2 |
|
|
|
задачи представлена на рис. 3.9.
1 |
Начало |
|
|
|
|
|
|
|
|
||
2 |
Ввод |
|
|
|
|
|
|
|
|
||
|
h1, h2 |
|
|
|
|
3 |
a1=0 |
|
|
|
|
|
|
|
|
||
|
b1=1 |
|
|
|
|
4 |
a2=2 a3=3 |
|
|
|
|
Int1=0 |
|
|
|
||
|
|
|
|
||
|
X=a1+h1/2 |
|
|
|
|
5 |
X<b1 |
нет |
|
|
|
|
|
|
|
||
6 |
да |
|
|
|
|
|
|
|
|
||
|
D=(b2-a2)/h2 |
|
|
|
|
|
Int2=0 |
|
|
|
|
7 |
A |
|
|
Вычисление |
|
|
|
|
внутреннего |
||
|
I=1, D |
|
|
||
|
|
|
интеграла для |
||
8 |
|
F - вызов функции |
|||
Int2=Int2+ |
заданного Х |
||||
|
вычисления |
|
|||
|
+h2·F(X, |
|
|||
|
значения функции |
|
|||
|
a2+I·h2) |
Вычисление |
|||
9 |
f (x,y ) xy |
4x 3 y 3 |
|||
|
|||||
|
|
|
|
двойного |
|
|
A |
|
|
интеграла |
|
10 |
Int1=Int1+ |
|
|
|
|
|
+h1·Int2 |
|
|
|
|
11 |
|
|
|
|
|
|
X=X+h1 |
|
|
|
|
12 |
Вывод |
|
|
|
|
|
|
|
|
||
|
Int1 |
|
|
|
|
13 |
Конец |
|
|
|
|
|
|
|
|
||
|
|
Рис. 3.9 |
|
||
156
Пояснения к схеме алгоритма
Обозначения:
a1, b1 – нижний и верхний пределы для внешнего интеграла; a2, b2 – нижний и верхний пределы для внутреннего интеграла; Int1 – значение двойного интеграла;
Int2 – значение внутреннего интеграла, вычисленное методом прямоугольников;
D – число узлов интегрирования по переменной х. Символ 1. Начало алгоритма.
Символ 2. Ввод значений шагов интегрирования h1, h2.
Символ 3. Присвоение значений для пределов интегрирования внутреннего и внешнего интегралов.
Символ 4. Обнуление переменной суммы Int1 и вычисление начального значения переменной Х.
Символ 5. Проверка условия X ≤ b1. Если условие верно, то выполняется символ 6, иначе – символ 12.
Символ 6. Вычисление числа интервалов для внутреннего интеграла. Обнуление переменной суммы внутреннего интеграла Int2.
Символ 7. Открытие цикла с параметром I = 1; D.
Символ 8. Вычисление переменной суммы двойного интеграла Int2 с использованием функции F.
Символ 9. Закрытие цикла с параметром I.
Символ 10. Вычисление переменной суммы двойного интеграла
Int1.
Символ 11. Увеличение значение параметра Х на h1. Символ 12. Вывод на экран значения Int1.
Символ 13. Конец алгоритма.
Программа
Program Intgr2;
Var
h1, h2, a1, a2, b1, b2, X, Int1, Int2 : Real;
D, I : Integer;
Function F(X, Y : Real) : Real;
Begin |
{начало раздела операторов функции F} |
F := X*Y – 4*X*X*X*Y*Y*Y; |
|
end; |
{конец функции F} |
157
Begin {начало раздела операторов основной программы}
Write('Введите значения шагов интегрирования: '); Readln(h1, h2); {чтение значений шагов}
Int1 := 0;
a1 := 0; b1 := 1;{пределы интегрирования внешнего интеграла} a2 := 2; b2 := 3; {пределы интегрирования внутреннего интеграла}
X := a1 + h1/2;
While X <= b1 do begin
D := Round((b2 - a2)/h2); {число узлов интегрирования} {вычисление внутреннего интеграла}
Int2 := 0;
for I := 1 to D do Int2 := Int2 + F(X, a2+I*h2)*h2; Int1 := Int1+Int2*h1; {суммирование для двойного интеграла}
X := X + h1; end;
{вывод результата}
Writeln('Значение двойного интеграла = ', Int1:6:2);
End. {конец основной программы}
Результаты работы программы
Введите значения шагов интегрирования: 0.1 0.1 Значение двойного интеграла = -15.85
Введите значения шагов интегрирования: 0.001 0.001 Значение двойного интеграла = -15.01
Задача 3.10. Разработать схему алгоритма и программу вычисления первой и второй производной функции f (x) 12x2 ex по
двум узлам для точек х0 и х1. Значение первой производной вычислить, используя формулу центральных разностей (П 2.11), и оформить в виде функции. Значение второй производной вычислить с использованием конечно-разностной аппроксимации первой производной (П 2.15). Шаг сетки дифференцирования hp, значения х0 и х1 задаются с клавиатуры.
Решение задачи
Схема алгоритма решения задачи представлена на рис. 3.10.
158
1
Начало
2 Ввод
X0, X1, hp
3
P0=P(X0,hp)
P1=P(X1,hp)
4
PP0=…
PP1=...
5Вывод
P0,P1,
PP0,PP1
6
Конец
Вычисление значений первой производной
P - вызов функции вычисления производной
Вычисление значений второй производной по формулам
PP0 |
|
P(X0 |
hp, hp) |
P(X0 |
hp, hp) |
|
|
|
2 hp |
|
|
PP1 |
|
P(X1 |
hp,hp) |
P(X1 |
hp, hp) |
|
|
|
2 hp |
|
|
|
Рис. 3.10 |
|
|
|
|
Пояснения к схеме алгоритма
Обозначения:
P – функция для вычисления первой производной функции f(x); P0, P1 – значения первой производной для точек x0 и х1;
PP0, PP1 – значения второй производной для точек x0 и х1; hp – шаг сетки дифференцирования.
Символ 1. Начало алгоритма. Символ 2. Ввод начальных данных.
Символ 3. Вычисление значений первой производной P0 в точке Х0 и P1 в точке Х1 с помощью вызова функции Р.
Символ 4. Вычисление значений второй производной PP0 в точке Х0 и PP1 в точке Х1 с помощью вызова функции Р.
Символ 5. Вывод на экран значений производных. Символ 6. Конец алгоритма.
159
Программа
Program Proizv;
Var
X0, X1, hp, P0, P1, PP0, PP1 : Real;
Function F(X : Real) : Real;
Begin |
{начало раздела операторов функции F} |
F := 12*X*X + Exp(X); |
|
end; |
{конец функции F} |
Function P(X, hp : Real) : Real; |
|
Begin |
{начало раздела операторов функции P} |
P := (F(X + hp) - F(X - hp))/(2*hp); |
|
end; |
{конец функции P} |
Begin |
{начало раздела операторов основной программы} |
{ввод значения узлов}
Write('Введите значения узлов); Readln(X0, X1); Write('Введите шаг hp '); Readln(hp); {ввод шага hp}
{вычисление значений первых производны в точках Х0 и Х1}
P0:=P(X0, hp); P1:=P(X1, hp);
{вычисление значения второй производной в точке Х0}
PP0 := (P(X0+hp,hp) - P(X0-hp,hp))/(2*hp);
{вычисление значения второй производной в точке Х1}
PP1 := (P(X1+hp, hp) - P(X1-hp, hp))/(2*hp);
{вывод результатов на экран}
Writeln('Первая производная в точке Х0 = ', P0:6:2, ' в
точке Х1 = ', P1:6:2);
Writeln('Вторая производная в точке Х0 = ', PP0:6:2, ' в
точке Х1 = ', PP1:6:2)
End. {конец основной программы}
Результаты работы программы
Введите значения узлов 1 5 Введите шаг hp 0.001
Первая производная в точке Х0 = 26.72 в точке Х1 = 268.41 Вторая производная в точке Х0 = 26.72 в точке Х1 = 172.42
3.5. Решение дифференциальных уравнений
3.5.1. Задача с использованием метода Эйлера
Задача 3.11. Разработать схему алгоритма и программу решения дифференциального уравнения y
2 y ex на отрезке [0, 2] мето-
160
