ALL_
.DOC. .
-
8.
; ;
; ;
; ;
. .
-
10.
; ;
; ;
; ;
. .
-
12.
; ;
; ;
; ;
. .
13. 14.
; ;
; ;
; ;
. .
15. 16.
; ;
; ;
; ;
. .
17. 18.
; ;
; ;
; ;
. .
-
20.
; ;
; ;
; ;
. .
21. 22.
; ;
; ;
; ;
. .
23. 24.
; ;
; ;
; ;
. .
25. 26.
; ;
; ;
; ;
. .
27. 28.
; ;
; ;
; ;
. .
29. 30.
; ;
; ;
; ;
. .
Задание № 5.
Тема: Стационарное уравнение.
Постановка задачи.
Алгоритм.
-
Определяем исследуюмую область.
-
Накладываем квадратную сетку с шагом h. И определяем число точек по осям x и y:
; ;
; ;
-
Создаем динамический массив - значения искомой функции:
double * * U;
U = new doble * [nx];
for ( int i = 0; i < nx; i++ ) U[i] = new doble [ny];
Освобождение памяти:
for ( i = 0; i < nx; i++ ) delete [] a[i]; delete [] a;
-
Определяем значения искомой функции в точках, лежащих на границах.
Например:
// со стороны AB и CD:
y = 0;
for (j=0; j<ny; j++)
{
U[0][j]= 30*y; // AB
U[nx-1][j]= 0; //CD
y+=h;
}
// Со стороны BC и AD:
x=0;
for (i=0; i<nx; i++)
{
U[i][0]= 0; // AD
U[i][ny-1]=30(1-x*x); //BC
x+=h;
}
-
В точках внутри исследуемой значения искомой функции равны нулю.
for (i=1; i<nx-1; i++) for (j=1; j<ny-1; j++) U[i][j]=0;
Замечание.
Значения искомой функции внутри исследуемой области можно определить с помощью интерполяции, что позволяет существенно сократить число итераций.
Например, Линейная интерполяция по оси x:
for ( j=1 ; j<ny-1;j++ )
{
delta=(U[nx-1][j]-U[0][j])/(nx-1);
for ( i=1 ; i<nx-1 ; i++ ) U[i][j]=U[0][j]+delta * i ;
}
// Для U[nx-1][j] должно выполнятся равенство: U[nx-1][j]=U[0][j]+delta * (nx+1);
-
Организуем итерационный процесс. Устанавливаем некоторый признак : pr=1; pr=true. На каждой итерации выполняем следующее:
6.1. Организуем циклы по всем внутренним точкам исследуемой области и вычисляем значения искомой функции по формуле Либмана. Проверяем условие:
|-| < E, (*)
где E – заданная точность. E=0,01.
Если это условие не выполнятся, то признаку присваивается значение 0: pr=false;
Например:
const double eps=0.01;
double uprom;
int pr;
do {
pr=1;
for ( i=1 ; i<nx-1 ; i++ ) for ( j=1 ; j<ny-1 ; j++ )
{
uprom=U[i][j];
U[i][j]=0.25*(U[i-1][j]+U[i+1][j]+U[i][j-1]+U[i][j+1]);
if ( fabs( uprom -U[i][j]) >=eps ) pr=0'
}
Условие (*) должно выполнятся во всех внутренних точках исследуемой области. Если хотя бы в одной внутренней точке условие (*) не выполнятся, признак будет равен нулю.
// Отрисовка;
} while (pr==0);
6.2. Рисуем график полученных значений искомой функции , график будет трехмерным.
Если если трехмерная графика вызывает проблемы, то можно фиксировать одну координату и рисовать график зависимости U(x,y*), где y* - фиксированное значение координаты.
6.3 Если признак равен нулю – pr=false, переходим к пункту 6.1. Иначе :
7. Остановка программы.
Задание(1):
Используя метод сеток, составить приближенное решение задачи Дирихле для уравнения Лапласа в квадрате ABCD с вершинами А(0,0), В(0,1), С(1,1), D(1,0); шаг h=0.2. При решении задачи использовать итерационный процесс усреднения Либмана до получения ответа с точностью до 0,01.
Варианты указывают формулы, задающие искомую функцию на сторонах квадрата ABCD.
Варианты.
№ варианта |
U |
U |
U |
U |
1 |
30y |
30(1-x²) |
0 |
0 |
2 |
20y |
30(cos) |
30(cos) |
20 x² |
3 |
50y(1-y²) |
0 |
0 |
50sinπx |
4 |
20y |
20 |
20y² |
50x(1-x) |
5 |
0 |
50x(1-x) |
50y(1-y²) |
50x(1-x) |
6 |
30sinπy |
20x |
20y |
30x(1-x) |
7 |
30(1-y) |
20 |
20y |
30x(1-x) |
8 |
50sinπy |
30 |
30y² |
50sinπx |
9 |
40y² |
40 |
40 |
40(sin) |
10 |
50y² |
50(1-x) |
0 |
60x(1-x²) |
11 |
20y² |
20 |
20y |
10x(1-x) |
12 |
40 |
40(1-x) |
20y(1-y) |
0 |
13 |
20(cos) |
30x(1-x) |
30y(1-y²) |
20(1-x²) |
14 |
30y²(1-y) |
50sinπx |
0 |
10x²(1-x) |
15 |
20y |
20(1-x²) |
30(1-y) |
0 |
16 |
30(1- y²) |
30x |
30 |
30 |
17 |
30(cos) |
30x² |
30y |
30(cos) |
18 |
0 |
50sinπx |
50y(1-y²) |
0 |
19 |
20 |
20 |
20y² |
40x(1-x) |
20 |
50y(1-y) |
20x²(1-x) |
0 |
40x(1-x²) |
21 |
20sinπy |
30x |
30y |
20x(1-x) |
22 |
40(1-y) |
30 |
30y |
40(1-x) |
23 |
20sinπy |
50 |
50y² |
20sinπx |
Задание(2):
Используя метод сеток, составить решение дифференциального уравнения Лапласа с заданными начальными условиями, шаг h=0.1. Уточнение решения производить до сотых долей с помощью метода верхней релаксации.
Варианты.
1. (Г); U(x,y)= |x|+|y|
2. (|x|+2)*(|y|+2) = 12 (Г); U(x,y)= 2|x|+|y|
3. |y| = 4-x², xЄ [-2;2] (Г); U(x,y)= |x|*|y|
4. x²+ y²=16 (Г); U(x,y)= |x|+2|y|
5. (Г); U(x,y)= |x|*|y|
6. |x| = 4-y², xЄ [-4;4] (Г); U(x,y)= |x|+|y|
7. (|x|+2)*(|y|+2) = 12 (Г); U(x,y)= |x|*|y|
8. (Г); U(x,y)= 2|x|+|y|
9. (Г); U(x,y)= |x|*|y|
10. |y| = 4-x², xЄ [-2;2] (Г); U(x,y)= |x|+|y|
11. x²+ y²=16 (Г); U(x,y)= 0.5|x|+|y|
12. (Г); U(x,y)= |x|+0.5|y|
1. |x| = 4-y², xЄ [-4;4] (Г); U(x,y)= |x|+
2. (|x|+2)*(|y|+2) = 12 (Г); U(x,y)= 2|x|+0.5|y|
3. (Г); U(x,y)= |x|+|y|
4. (Г); U(x,y)= 2|x|+0.5|y|
5. |y| = 9-x², xЄ [-3;3] (Г); U(x,y)= |x|+|y|
6. x²+ y²=16 (Г); U(x,y)= |x|+2|y|
7. (Г); U(x,y)= 0.5|x|+|y|
8. |x| = 9-y², xЄ [-9;9] (Г); U(x,y)= 0.5|x|+|y|
9. (Г); U(x,y)= 0.5|x|+2|y|
10. (Г); U(x,y)= 0.5|x|*|y|
11. (|x|+3)*(|y|+2) = 18 (Г); U(x,y)= |x|+0.5|y|
12. |y| = 9-x², xЄ [-3;3] (Г); U(x,y)= 2|x|+|y|
13. (|x|+2)*(|y|+3) = 18 (Г); U(x,y)=2|x|+0.5|y|
Задание № 6.
Тема: Методы оптимизации.
Постановка задачи.
Алгоритм.
Задание:
-
Минимизировать функцию методом перебора в квадрате , .
Написать программу перебора, реализующую два этапа:
Первый перебор – определение точки минимума с точностью ;
Второй перебор – в окрестности найденной точки минимума – определение точки минимума с точностью .
-
Ту же задачу решить методом градиентного спуска в квадрате ,.
Варианты.
№
|
A |
B |
C |
D |
|
1 |
1.2 |
-1.4 |
0.01 |
0.11 |
|
2 |
2.2 |
-1.3 |
0.04 |
0.12 |
|
3 |
3.2 |
-1.2 |
0.02 |
0.13 |
|
4 |
4.2 |
-1.1 |
0.16 |
0.14 |
|
5 |
5.2 |
-1.0 |
0.25 |
0.15 |
|
6 |
6.2 |
-0.9 |
0.36 |
0.16 |
|
7 |
7.2 |
-0.8 |
0.49 |
0.17 |
|
8 |
8.2 |
-0.7 |
0.64 |
0.18 |
|
9 |
9.2 |
-0.6 |
0.81 |
0.19 |
|
10 |
10.2 |
-0.5 |
0.94 |
0.2 |
|
11 |
11.2 |
-0.4 |
1.0 |
0.21 |
|
12 |
12.2 |
-0.3 |
1.21 |
0.22 |
|
13 |
13.2 |
-0.2 |
1.44 |
0.23 |
|
14 |
14.2 |
-0.1 |
1.69 |
0.24 |
|
15 |
15.2 |
0.0 |
1.96 |
0.25 |
|
16 |
16.2 |
0.0 |
1.99 |
0.26 |
|
17 |
17.2 |
0.1 |
2.56 |
0.27 |
|
18 |
18.2 |
0.2 |
2.89 |
0.28 |
|
19 |
19.2 |
0.3 |
3.24 |
0.29 |
|
20 |
20.2 |
0.4 |
3.81 |
0.30 |
|
21 |
30.0 |
1.4 |
8.41 |
0.40 |
|
22 |
29.0 |
1.3 |
7.29 |
0.39 |
|
23 |
28.0 |
1.2 |
6.98 |
0.38 |
|
24 |
27.0 |
1.1 |
6.76 |
0.37 |
|
25 |
26.0 |
1.0 |
6.25 |
0.36 |
|
26 |
25.0 |
0.9 |
5.76 |
0.35 |
|
27 |
24.0 |
0.8 |
5.29 |
0.34 |
|
28 |
23.0 |
0.7 |
4.84 |
0.33 |
|
29 |
22.0 |
0.6 |
5.02 |
0.32 |
|
30 |
21.0 |
0.5 |
4.00 |
0.31 |
|
31 |
20.0 |
0.4 |
3.81 |
0.30 |
|
32 |
19.0 |
0.3 |
3.24 |
0.29 |
|
33 |
18.0 |
0.2 |
2.89 |
0.28 |
|
34 |
17.0 |
0.1 |
2.56 |
0.27 |
|
35 |
16.0 |
0.0 |
1.99 |
0.26 |
|
36 |
15.0 |
0.0 |
1.96 |
0.25 |
|
36 |
14.0 |
-0.1 |
1.69 |
0.24 |
|
37 |
13.0 |
-0.2 |
1.44 |
0.23 |
|
38 |
12.0 |
-0.3 |
1.21 |
0.22 |
|
39 |
11.0 |
-0.4 |
1.00 |
0.21 |
|
40 |
10.0 |
-0.5 |
0.94 |
0.20 |
|
41 |
9.0 |
-0.6 |
0.8 |
0.19 |
|
42 |
8.0 |
-0.7 |
0.64 |
0.18 |
|
43 |
7.0 |
-0.8 |
0.49 |
0.17 |
|
44 |
6.0 |
-0.9 |
0.36 |
0.16 |
|
45 |
5.0 |
-1.0 |
0.25 |
0.15 |