Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Тема 1. Решение задач вычислительными методами.



Содержание

 

Введение

Тема 1. Решение задач вычислительными методами. Основные понятия

1.1 Погрешность

1.2 Корректность

1.3 Вычислительные методы

Тема 2. Решение нелинейных уравнений

2.1 Постановка задачи

2.2 Основные этапы отыскания решения

2.3 Метод деления отрезка пополам (метод дихотомии, метод бисекции)

2.4 Метод простых итераций

2.5 Метод Ньютона (метод касательных)

2.6 Метод секущих (метод хорд)

2.7 Метод ложного положения

Тема 3. Решение систем линейных алгебраических уравнений

3.1 Постановка задачи

3.2 Метод исключения Гаусса. Схема единственного деления

3.3 Метод исключения Гаусса с выбором главного элемента по столбцу

3.4 Вычисление определителя методом исключения Гаусса

3.5 Вычисление обратной матрицы методом исключения Гаусса

3.6 Метод простой итерации Якоби

3.7 Метод Зейделя

Тема 4. Приближение функций

4.1 Постановка задачи

4.2 Приближение функции многочленами Тейлора

4.3 Интерполяция функции многочленами Лагранжа

4.4 Аппроксимация функций. Метод наименьших квадратов

Тема 5. Численное интегрирование функций одной переменной

5.1 Постановка задачи численного интегрирования

5.2 Метод средних прямоугольников

5.3 Метод трапеций

5.4 Метод Симпсона (метод парабол)

5.5 Правило Рунге практической оценки погрешности

Тема 6. Численное решение дифференциальных уравнений

6.1 Постановка задачи Коши

6.2 Метод Эйлера

6.3 Модифицированные методы Эйлера

6.4 Метод Рунге – Кутты

Контрольные задания по курсу “Вычислительные методы”

Указания к выполнению лабораторных работ

Указания к выполнению курсовых работ

Краткие сведения о математиках

Список литературы

 


Введение

 

Исследование различных явлений или процессов математическими методами осуществляется с помощью математической модели. Математическая модель представляет собой формализованное описание на языке математики исследуемого объекта. Таким формализованным описанием может быть система линейных, нелинейных или дифференциальных уравнений, система неравенств, определенный интеграл, многочлен с неизвестными коэффициентами и т. д. Математическая модель должна охватывать важнейшие характеристики исследуемого объекта и отражать связи между ними.

После того, как математическая модель составлена, переходят к постановке вычислительной задачи. При этом устанавливают, какие характеристики математической модели являются исходными (входными) данными, какие – параметрами модели, а какие – выходными данными. Проводится анализ полученной задачи с точки зрения существования и единственности решения.

На следующем этапе выбирается метод решения задачи. Во многих конкретных случаях найти решение задачи в явном виде не представляется возможным, так как оно не выражается через элементарные функции. Такие задачи можно решить лишь приближенно. Под вычислительными (численными) методами подразумеваются приближенные процедуры, позволяющие получать решение в виде конкретных числовых значений. Вычислительные методы, как правило, реализуются на ЭВМ. Для решения одной и той же задачи могут быть использованы различные вычислительные методы, поэтому нужно уметь оценивать качество различных методов и эффективность их применения для данной задачи.

Затем для реализации выбранного вычислительного метода составляется алгоритм и программа для ЭВМ. Современному инженеру важно уметь преобразовать задачу к виду, удобному для реализации на ЭВМ и построить алгоритм решения такой задачи.

В настоящее время на рынке программного обеспечения широко представлены как пакеты, реализующие наиболее общие методы решения широкого круга задач (например, Maple, Mathcad, MatLAB), так и пакеты, реализующие методы решения специальных задач (например, задач газовой динамики).

Результаты расчета анализируются и интерпретируются. При необходимости корректируются параметры метода, а иногда математическая модель, и начинается новый цикл решения задачи.


Тема 1. Решение задач вычислительными методами.

Основные понятия

Погрешность

 

Существуют четыре источника погрешностей, возникающих в результате численного решения задачи.

1. Математическая модель. Погрешность математической модели связана с ее приближенным описанием реального объекта. Например, если при моделировании экономической системы не учитывать инфляции, а считать цены постоянными, трудно рассчитывать на достоверность результатов. Погрешность математической модели называется неустранимой. Будем в дальнейшем предполагать, что математическая модель фиксирована и ее погрешность учитывать не будем.

2. Исходные данные. Исходные данные, как правило, содержат погрешности, так как они либо неточно измерены, либо являются результатом решения некоторых вспомогательных задач. Например, масса снаряда, производительность оборудования, предполагаемая цена товара и др. Во многих физических и технических задачах погрешность измерений составляет 1 – 10%. Погрешность исходных данных так же, как и погрешность математической модели, считается неустранимой и в дальнейшем учитываться не будет.

3. Метод вычислений. Применяемые для решения задачи методы как правило являются приближенными. Например, заменяют интеграл суммой, функцию – многочленом, производную – разностью и т. д. Погрешность метода необходимо определять для конкретного метода. Обычно ее можно оценить и проконтролировать. Следует выбирать погрешность метода так, чтобы она была не более, чем на порядок меньше неустранимой погрешности. Большая погрешность снижает точность решения, а меньшая требует значительного увеличения объема вычислений.

4. Округление в вычислениях. Погрешность округления возникает из-за того, что вычисления производятся с конечным числом значащих цифр (для ЭВМ это 10 – 12 знаков). Округление производят по следующему правилу: если в старшем из отбрасываемых разрядов стоит цифра меньше пяти, то содержимое сохраняемых разрядов не изменяется; в противном случае в младший сохраняемый разряд добавляется единица с тем же знаком, что и у самого числа. При решении больших задач производятся миллиарды вычислений, но так как погрешности имеют разные знаки, то они частично взаимокомпенсируются.

Различают абсолютную и относительную погрешности. Пусть а – точное, вообще говоря неизвестное числовое значение некоторой величины, а а* - известное приближенное значение этой величины, тогда величину

D(а*) = | а – а*|

 

называют абсолютной погрешностью числа а*, а величину

d(а*) =

 

– его относительной погрешностью.

При сложении и вычитании складываются абсолютные погрешности, а при делении и умножении – относительные погрешности.

Корректность

 

Определим вначале понятие устойчивости решения.

Решение задачи y* называется устойчивым по исходным данным x*, если оно зависит от исходных данных непрерывным образом. Это означает, что малому изменению исходных данных соответствует малое изменение решения. Строго говоря, для любого e > 0 существует d = d(e) > 0 такое, что всякому исходному данному x*, удовлетворяющему условию |x - x*| < d, соответствует приближенное решение y*, для которого  |y – y*| < e.

Говорят, что задача поставлена корректно, если выполнены следующие три условия:

1. Решение существует при любых допустимых исходных данных.

2. Это решение единственно.

3. Это решение устойчиво по отношению к малым изменениям исходных данных.

Если хотя бы одно из этих условий не выполнено, задача называется некорректной.

Пример 1.1.

Покажем, что задача вычисления определенного интеграла I = корректна. Пусть f*(x) – приближенно заданная функция и I* = . Очевидно, приближенное решение I* существует и единственно. Определим абсолютную погрешность f* с помощью равенства D(f*) = |f(x) – f*(x)|. Так как

 

D(I) = |I – I*| = | | £ (b – a)D(f*),

 

то для любого e > 0 неравенство D(I) < e  будет выполнено, если будет выполнено условие D(f*) < d, где d = e /(b – a).

Таким образом, решение I* устойчиво. Все три условия корректности задачи выполнены.


Пример 1.2.

Покажем, что задача вычисления производной u(x) = f '(x) приближенно заданной функции некорректна.

Пусть f*(x) – приближенно заданная на отрезке [a, b] непрерывно дифференцируемая функция и u*(x) = (f*(x))'. Определим абсолютные погрешности следующим образом: D(f*) = |f(x) – f*(x)|, D(u*) = |u(x) – u*(x)|.

Возьмем, например, f*(x) = f(x) + a sin(x/ a2), где 0 < a < 1. Тогда, u*(x) = u(x) + a -1cos(x/ a2), D(u*) = a -1, т. е. погрешность задания функции равна a, а погрешность производной равна a -1. Таким образом, сколь угодно малой погрешности задания функции f может отвечать сколь угодно большая погрешность производной f '.

Вычислительные методы

 

Под вычислительными методами будем понимать методы, которые используются в вычислительной математике для преобразования задач к виду, удобному для реализации на ЭВМ. Подробнее с различными классами вычислительных методов можно познакомиться, например, в [1]. Мы же рассмотрим два класса методов, используемых в нашем курсе.

1. Прямые методы. Метод решения задачи называется прямым, если он позволяет получить решение после выполнения конечного числа элементарных операций. Наименование элементарной операции здесь условно. Это может быть, например, вычисление интеграла, решение системы уравнений, вычисление значений функции и т. д. Важно то, что ее сложность существенно меньше, чем сложность основной задачи. Иногда прямые методы называют точными, имея в виду, что при отсутствии ошибок в исходных данных и при выполнении элементарных операций результат будет точным. Однако, при реализации метода на ЭВМ неизбежны ошибки округления и, как следствие, наличие вычислительной погрешности.

2. Итерационные методы. Суть итерационных методов состоит в построении последовательных приближений к решению задачи. Вначале выбирают одно или несколько начальных приближений, а затем последовательно, используя найденные ранее приближения и однотипную процедуру расчета, строят новые приближения. В результате такого итерационного процесса можно теоретически построить бесконечную последовательность приближений к решению. Если эта последовательность сходится (что бывает не всегда), то говорят, что итерационный метод сходится. Отдельный шаг итерационного процесса называется итерацией.

Практически вычисления не могут продолжаться бесконечно долго. Поэтому необходимо выбрать критерий окончания итерационного процесса. Критерий окончания связан с требуемой точностью вычислений, а именно: вычисления заканчиваются, когда погрешность приближения не превышает заданной величины.

Оценки погрешности приближения, полученные до вычислений, называют априорными оценками (от лат. a'priori – " до опыта" ), а соответствующие оценки, полученные в ходе вычислений называют апостериорными оценками (от лат. a'posteriori – " после опыта" ).

Важной характеристикой итерационных методов является скорость сходимости метода. Говорят, что метод имеет p-ый порядок сходимости если

 

|xn+1 - x*| = C|xn - x*|p,

 

где xn и xn+1 – последовательные приближения, полученные в ходе итерационного процесса вычислений, x* – точное решение, C – константа, не зависящая от n. Говорят, что метод сходится со скоростью геометрической прогрессии со знаменателем q < 1, если для всех n справедлива оценка:

|xn - x*| £ Cqn.

 

Итерационный процесс называется одношаговым, если для вычисления очередного приближения xn+1 используется только одно предыдущее приближение xn и k –шаговым, если для вычисления xn+1 используются k предыдущих приближений xn-k+1, xn-k+2, …, xn.


Постановка задачи

 

Пусть дана некоторая функция f(x) и требуется найти все или некоторые значения x, для которых

f(x) = 0.                                                                            (2.1)

 

Значение x*, при котором f(x*) = 0, называется корнем (или решением) уравнения (2.1).

Относительно функции f(x) часто предполагается, что f(x) дважды непрерывно дифференцируема в окрестности корня.

Корень x* уравнения (2.1) называется простым, если первая производная функции f(x) в точке x* не равна нулю, т. е. f '(x*)  0. Если же f '(x*) = 0, то корень x* называется кратным корнем.

Геометрически корень уравнения (2.1) есть точка пересечения графика функции y = f(x) с осью абсцисс. На рис. 2.1 изображен график функции y = f(x), имеющей четыре корня: два простых (x и x ) и два кратных (x и x ).

 

Рис. 2.1.

 

Большинство методов решения уравнения (2.1) ориентировано на отыскание простых корней уравнения (2.1).


Метод простых итераций

 

Пусть уравнение (2.1) можно заменить эквивалентным ему уравнением

x = j(x).                                                                                      (2.4)

 

Например, уравнение   – 0.5 = 0 можно заменить эквивалентным ему уравнением x = 0.5sinx.

Выберем каким-либо образом начальное приближение x0. Вычислим значение функции j(x) при x = x0 и найдем уточненное значение x1 = j(x0). Подставим теперь x1 в уравнение (2.4) и получим новое приближение x2 = j(x1) и т. д. Продолжая этот процесс неограниченно, получим последовательность приближений к корню:

 

xn+1 = j(xn).                                                                                   (2.5)

 

Формула (2.5) является расчетной формулой метода простых итераций.

Если последовательность {xn} сходится при n® , т. е. существует

x* =  xn,                                                                                    (2.6)


и функция j(x) непрерывна, то, переходя к пределу в (2.5) и учитывая (2.6), получим:

x * = xn = j(x n -1) = j( xn -1) = j(x *).

 

Таким образом, x* = j(x*), следовательно, x* – корень уравнения (2.4).

Сходимость метода. Сходимость метода простых итераций устанавливает следующая теорема.

Теорема 2.2. Если в интервале, содержащем корень x*  уравнения (2.4), а также его последовательные приближения x0, x1, …, xn, …, вычисляемые по формуле (2.5), выполнено условие:

 

|j '(x)| £ q < 1,                                                                          (2.7)

то x* =  xn.

 

т. е. итерационный процесс сходится и справедлива следующая оценка погрешности:

 

|xn – x*| £ qn|x0 – x*|                                                                     (2.8)

 

Оценка (2.8) является априорной. Она показывает, что метод простой итерации сходится со скоростью геометрической прогрессии с знаменателем q. Чем меньше q, тем выше скорость сходимости.

Как следует из теоремы 2.2, условие (2.7) является достаточным для сходимости метода простых итераций. Его выполнение гарантирует сходимость процесса (2.5), но невыполнение условия (2.7), вообще говоря, не означает, что итерационный процесс будет расходиться.

На рис. 2.3 – 2.6 показаны четыре случая взаимного расположения линий y = x и y = j(x) и соответствующие итерационные процессы.

Рис. 2.3 и 2.4 соответствуют случаю |j '(x)| < 1, и итерационный процесс сходится. При этом, если j '(x) > 0 (рис. 2.3), сходимость носит односторонний характер, а если j '(x)< 0 (рис. 2.4), сходимость носит двусторонний, колебательный характер. Рис. 2.5 и 2.6 соответствуют случаю |j '(x)| > 1 – итерационный процесс расходится. При этом может быть односторонняя (рис. 2.5) и двусторонняя (рис 2.6) расходимость.

Рис. 2.3                    Рис. 2.4              Рис. 2.5

 

Рис. 2.6

Погрешность метода. Если известна величина q в условии (2.7), то применима следующая апостериорная оценка погрешности:

 

|xn – x*| £ |xn – xn – 1|, n > 1.                                                 (2.9)


Критерий окончания. Из оценки (2.9) вытекает следующий критерий окончания итерационного процесса. Вычисления следует продолжать до выполнения неравенства

 

|xn – xn – 1| < e.

 

Если это условие выполнено, то можно считать, что xn является приближением к x* с точностью e.

Если q £ 0.5, то можно пользоваться более простым критерием окончания:

 

|xn – xn – 1| < e.                                                                             (2.10)

 

Пример 2.2.

Используем метод простой итерации для решения уравнения f(x) = sin x – x2 = 0с точностью e = 0.001.

Преобразуем уравнение к виду (2.4):

x = , т. е. j(x)= .

 

Нетрудно убедиться, что корень уравнения находится на отрезке [p /6, p /3]. Например, вычислив значения f(x)на концах отрезка, получим: f(p/6)> 0, а f(p/3)< 0, т. е. функция на концах отрезка имеет разные знаки, что в соответствии с теоремой 2.1 указывает на то, что внутри отрезка есть корень. Расположение корня наглядно иллюстрирует рис.2.7.


Рис. 2.7

 

Подсчитаем, первую и вторую производные функции j(x):

j '(x) = , j" (x) = .

 

Так как j" (x) > 0 на отрезке [p /6, p /3], то производная j '(x) монотонно возрастает на этом отрезке и принимает максимальное значение на правом конце отрезка, т. е. в точке p /3. Поэтому, справедлива оценка:

 

|j '(x)| £ |j '(p /3)| » 0.312.

 

Таким образом, условие (2.7) выполнено, q < 0.5, и можно воспользоваться критерием окончания вычислений в виде (2.10). В табл. 2.2 приведены приближения, полученные по расчетной формуле (2.5). В качестве начального приближения выбрано значение x0 = 1.

 

Таблица 2.2

n xn
0 1 2 3 4 5 1 0.8415 0.8861 0.8742 0.8774 0.8765

Критерий окончания выполняется при n = 5, |x5 – x4| < 0.001. Сходимость двусторонняя, качественный характер такой сходимости представлен на рис. 2.4. Приближенное значение корня с требуемой точностью x* 0.8765.

Метод ложного положения

 

Рассмотрим еще одну модификацию метода Ньютона.

Пусть известно, что простой корень  x*  уравнения  f(x) = 0 находится на отрезке [a, b] и на одном из концов отрезка выполняется условие f(x)f" (x) ³ 0. Возьмем эту точку в качестве начального приближения. Пусть для определенности это будет b. Положим x0 = a. Будем проводить из точки B = (b, f(b)) прямые через расположенные на графике функции точки Bn с координатами (xn, f(xn), n = 0, 1, … . Абсцисса точки пересечения такой прямой с осью OX есть очередное приближение xn+1.

Геометрическая иллюстрация метода приведена на рис. 2.10.

 

Рис. 2.10


Прямые на этом рисунке заменяют касательные в методе Ньютона (рис. 2.8). Эта замена основана на приближенном равенстве

 

f '(xn) » .                                                                   (2.23)

 

Заменим в расчетной формуле Ньютона (2.13) производную f '(xn) правой частью приближенного равенства (2.23). В результате получим расчетную формулу метода ложного положения:

 

xn +1 = xn –. .                                                              (2.24)

 

Метод ложного положения обладает только линейной сходимостью. Сходимость тем выше, чем меньше отрезок [a, b].

Критерий окончания. Критерий окончания итераций метода ложного положения такой же, как и для метода Ньютона. При заданной точности e > 0 вычисления нужно вести до тех пор, пока не будет выполнено неравенство

 

|xn – xn – 1| < e.                                                                                (2.25)

Пример 2.5.

Применим метод ложного положения для вычисления корня уравнения x3 + 2x – 11 = 0 с точностью e = 10-3.

Корень этого уравнения находится на отрезке [1, 2], так как f (1) = –8 < 0, а f (2) = 1 > 0. Для ускорения сходимости возьмем более узкий отрезок [1.9, 2], поскольку f (1.9) < 0, а f (2) > 0. Вторая производная функции f (x) = x3 + 2x – 11 равна 6x. Условие f(x)f" (x) ³ 0 выполняется для точки b = 2. В качестве начального приближения возьмем x0 = a = 1.9. По формуле (2.24) имеем

x1 = x0 –.  = 1.9 +  » 1.9254.

 

Продолжая итерационный процесс, получим результаты, приведенные в табл. 2.5.

 

Таблица 2.5

n xn
0 1 2 3   1.9 1.9254 1.9263 1.9263

Постановка задачи

 

Требуется найти решение системы линейных уравнений:

 

a11x1 + a12x2 + a13x3 + … + a1nxn = b1

a21x1 + a22x2 + a23x3 + … + a2nxn = b2

a31x1 + a32x2 + a33x3 + … + a3nxn = b3                                         (3.1)

.

an1x1 + an2x2 + an3x3 + … + annxn = bn

 

или в матричной форме:

 

Ax = b,                                                                                           (3.2)

 

где

a11 a12 a13 …              a1n                   x1          b1

a21 a22a23 …              a2n                    x2                     b2

A = a31 a32 a33 …               a3n         x = x3, b = b3

an1   an2   an3                   ann                   xn                      bn

 

По правилу Крамера система n линейных уравнений имеет единственное решение, если определитель системы отличен от нуля (det A 0) и значение каждого из неизвестных определяется следующим образом:

xj = , j = 1, …, n,                                                                       (3.3)


где det A j – определитель матрицы, получаемой заменой j-го столбца матрицы A столбцом правых частей b .

Непосредственный расчет определителей для больших n является очень трудоемким по сравнению с вычислительными методами.

Известные в настоящее время многочисленные приближенные методы решения систем линейных алгебраических уравнений распадаются на две большие группы: прямые методы и методы итераций.

Прямые методы всегда гарантируют получение решения, если оно существуют, однако, для больших n требуется большое количество операций, и возникает опасность накопления погрешностей.

Этого недостатка лишены итерационные методы, но зато они не всегда сходятся и могут применяться лишь для систем определенных классов.

Среди прямых методов наиболее распространенным является метод исключения Гаусса и его модификации, Наиболее распространенными итерационными методами является метод простых итераций Якоби и метод Зейделя.

Эти методы будут рассмотрены в следующих разделах.

Метод Зейделя

 

Модификацией метода простых итераций Якоби можно считать метод Зейделя.

В методе Якоби на (k+1)-ой итерации значения x , i = 1, 2, …, n. вычисляются подстановкой в правую часть (3.27) вычисленных на предыдущей итерации значений x . В методе Зейделя при вычислении x используются значения x , x , x , уже найденные на (k+1)-ой итерации, а не  x , x , …, x , как в методе Якоби, т.е. (k + 1)-е приближение строится следующим образом:


 x =                   b12x     + b13 x + … + b1, n-1 x + b1n x + c1

x  = b21x                                   + b23 x + … + b2, n-1 x + b2n x  + c2

x = b31x  + b32 x                    + … + b3, n-1 x   + b3n x    + c3(3.36)

x = bn1 x  + bn2x x + bn3 x x + … + bn, n-1 x                         + c.n

 

Формулы (3.36) являются расчетными формулами метода Зейделя.

Введем нижнюю и верхнюю треугольные матрицы:

 

      0 0 0 … 0                                0 b12   b13 … b1n

     b210      0 … 0                                 0  0      b23 … b2n

B 1= b31 b32    0 … 0    и   B 2= 0  0     0 … b3n.

     bn1 bn2 bn30                                 0  0  0 … 0

 

Матричная запись расчетных формул (3.36) имеет вид:

 

x k+1 = B 1 x k+1 + B 2 x k + c.                                                                     (3.37)

 

Так как B = B 1 + B 2, точное решение x * исходной системы удовлетворяет равенству:

x * = B 1 x * + B 2 x * + c.                                                                         (3.38)

Сходимость метода Зейделя. Достаточным условием сходимости метода Зейделя является выполнение неравенства:

b = max |bij|, < 1,  i, j = 1, 2, …, n.                                                (3.39)

 

Неравенство (3.39) означает, что для сходимости метода Зейделя достаточно, чтобы максимальный по модулю элемент матрицы B был меньше единицы.

Если выполнено условие (3.39), то справедлива следующая апостериорная оценка погрешности:

 

max|x  - x | £ max|x – x | i = 1, 2, …, n,                       (3.40)

где b – максимальный элемент матрицы B, b2 максимальный элемент матрицы B 2.

Правую часть оценки (3.40) легко вычислить после нахождения очередного приближения.

Критерий окончания. Если требуется найти решение с точностью e, то в силу (3.37) итерационный процесс следует закончить как только на (k+1)-ом шаге выполнится неравенство:

 

max|x – x | < e,  i = 1, 2, …, n.                                      (3.41)

 

Поэтому в качестве критерия окончания итерационного процесса можно использовать неравенство

 

max|x – x | < e1,  i = 1, 2, …, n.                                             (3.42)

где e1 = e .

 

Если выполняется условие b £ , то можно пользоваться более простым критерием окончания:

 

max|x – x | < e,  i = 1, 2, …, n.                                                 (3.43)

 

Метод Зейделя как правило сходится быстрее, чем метод Якоби. Однако возможны ситуации, когда метод Якоби сходится, а метод Зейделя сходится медленнее или вообще расходится.

Пример 3.6.

Применим метод Зейделя для решения системы уравнений (3.33) из примера 3.5. Первые шаги полностью совпадают с процедурой решения по методу Якоби, а именно: система приводится к виду (3.34), затем в качестве начального приближения выбираются элементы столбца свободных членов (3.35). Проведем теперь итерации методом Зейделя.

 

При k = 1

x    =0.0574x   – 0.1005x 0.0431x  + 1.0383 = 0.7512

 

При вычислении x используем уже полученное значение x :

x   = 0.0566 x    – 0.0708x  –  0.1179x  + 1.2953 = 0.9674

 

При вычислении x  используем уже полученные значения x  и x :

 

x   = 0.1061 x  – 0.0758 x  –  0.0657x  + 1.4525 = 1.1977

При вычислении x  используем уже полученные значения x , x , x :

 

x  = –0.0280 x  – 0.0779 x   – 0.0405x x   + 1.5489 = 1.4037


Поделиться:



Последнее изменение этой страницы: 2019-10-03; Просмотров: 180; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.182 с.)
Главная | Случайная страница | Обратная связь