ГДЗ №2 Вариант 3 (1051185), страница 2
Текст из файла (страница 2)
b[1] = y[2] – y[3];
b[2] = y[3] – y[1];
b[3] = y[1] – y[2];
c[1] = x[3] – x[2];
c[2] = x[1] – x[3];
c[3] = x[2] – x[1];
OMEGA = (x[2]*y[3]-x[3]*y[2]+x[1]*y[2]-x[1]*y[3]+x[3]*y[1]-x[2]*y[1])/2.0;
Составление локальной матрицы жесткости:
for (inti(1); i<= 3; i++)
{
for (int j(1); j <= 3; j++)
{
k_1[i][j] = (lam / (4.0 * OMEGA))*(b[i] * b[j] + c[i] * c[j]);
}
}
Локальная правая часть:
for (int i(1); i <= 3; i++) b[i] = 0;
Составления локальной матрицы жесткости и локальной правой части для элемента 5:
for (int i(1); i <= 3; i++) b[i] = 0;
case 5:
{
b[2] = (q*sqrt(pow(x[3] - x[2], 2) + pow(y[3] - y[2], 2)) / 2.0);
b[3] = (q*sqrt(pow(x[3] - x[2], 2) + pow(y[3] - y[2], 2)) / 2.0);
for (int i(1); i <= 3; i++)
{
for (int j(1); j <= 3; j++)
{
k_i_j[i][j] = k_1[i][j];//Локальная матрица жёсткости
}
}
break;
}
Составления локальной матрицы жесткости и локальной правой части для элемента 40:
for (int i(1); i <= 3; i++) b[i] = 0;
case 40:
{
for (int i(1); i <= 3; i++)
{
for (int j(1); j <= 3; j++)
{
k_2[i][j] = (a_g*sqrt(pow(x[3] - x[1], 2) + pow(y[3] - y[1], 2)) / 6.0)*ghost_1_3[i][j];
}
b[1] = (a_g*T_g*sqrt(pow(x[3] - x[1], 2) + pow(y[3] - y[1], 2)) / 2.0);
b[3] = (a_g*T_g*sqrt(pow(x[3] - x[1], 2) + pow(y[3] - y[1], 2)) / 2.0);
}
for (int i(1); i <= 3; i++)
{
for (int j(1); j <= 3; j++)
{
k_i_j[i][j] = k_1[i][j] + k_2[i][j];//Локальная матрица жёсткости
}
}
break;
}
-
Собираем локальные матрицы жесткости в глобальную матрицу жесткости и локальные правые части в глобальные правые части.
For (inti(1); i <= m; i++)//Текущийэлемент
{
for (int j(1); j <= 3; j++)
{
s[j] = elements[i][j];//Номераузловтекущегоэлемента
}
s[j]-номера узлов текущего (i-го) элемента(всего m=64 элемента).
Формирование глобальной матрицы жесткости
for (intj(1); j<= 3; j++)
{
for (int r(1); r <= 3; r++)
{
int t = s[j],p=s[r];
K[t][p] += k_i_j[j][r];
}
}
Формирование глобального вектора правой части
for (intj(1); j<= 3; j++)
{
int t = s[j];
f[t] += b[j];
}
Далее решаем СЛАУ относительно узловых значений:
-
Метод Холецкого для решения СЛАУ.
Описание метода.
Если матрица системы является симметричной и положительно определенной, то для решения системы применяют метод Холецкого (метод квадратных корней). В основе метода лежит алгоритм специального LU-разложения матрицы A, в результате чего она приводится к виду .Если разложение получено, то как и в методе
-разложения, решение системы сводится к последовательному решению двух систем с треугольными матрицами:
и
. Для нахождения коэффициентов матрицы
неизвестные коэффициенты матрицы
приравнивают соответствующим элементам матрицы
. Затем последовательно находят требуемые коэффициенты по формулам:
,
,
...............
,
,
-
Реализация метода на ЭВМ.
Составление матрицы L, в разложении
double **l_matrix;l_matrix = new double*[n];
for (int i(1); i < n; i++) l_matrix[i] = new double[m];
l_matrix[1][1] = sqrt(a[1][1]);for (int j = 2; j < n; j++) l_matrix[j][1] = a[j][1] / l_matrix[1][1];
for (int i = 2; i < n; i++)
{
double sum = 0;
for (int p = 1; p <= i – 1; p++)
{sum += pow(l_matrix[i][p], 2);}
l_matrix[i][i] = sqrt(a[i][i] – sum);
for (int j = i + 1; j < n; j++)
{
double sum = 0;
for (int p = 1; p <= i – 1; p++)
{
sum += l_matrix[i][p] * l_matrix[j][p];}
l_matrix[j][i] = (a[j][i] – sum) / l_matrix[i][i];
}}
Решениеуравнения
double *x = new double[n];
x[1] = b[1] / l_matrix[1][1];
for (int i = 2; i < n; i++)
{
x[i] = b[i];
for (int j = 1; j < i; j++)
{x[i] -= l_matrix[i][j] * x[j];}
x[i] /= l_matrix[i][i];
}
Транспонирование матрицы L
for (int i(1); i < n; i++)
{
for (int j(i); j < m; j++)
{
doublebuf = l_matrix[i][j];
l_matrix[i][j] = l_matrix[j][i];
l_matrix[j][i] = buf;
}
}
for (int i(1); i < n; i++)
{b[i] = x[i];}
x[n – 1] = b[n – 1] / l_matrix[n – 1][m – 1];
Решение уравнения
for (int i = n – 2; i >= 1; i--)
{
x[i] = b[i];
for (int j = m – 1; j > i; j--)
{
x[i] -= l_matrix[i][j] * x[j];
}
x[i] /= l_matrix[i][i];
}
for (int i(1); i < n; i++)
{
std::cout<< “x[“ << i << “]_=” << x[i] <<std::endl;
}}
-
Результаты решения задачи теплопроводности
В результате решения задачи были получены следующие распределения температуры в исследуемой области (рис. 5):
Рис. 5 – Распределение температуры в области с использованием треугольного симплексного конечного элемента
Сравним данные результаты с разультатами полученными в ДЗ№1, с использованием дискретных одномерных элементов (рис. 6).
Рис. 6 – Распределение температуры в области с использованием одномерного конечного элемента
№ |
|
|
| № |
|
|
| № |
|
|
| ||
1 | 110,352 | 110,352 | 0,000 | 17 | 99,854 | 99,854 | 0,000 | 33 | 105,556 | 105,556 | 0,000 | ||
2 | 104,067 | 104,067 | 0,000 | 18 | 91,105 | 91,104 | 0,001 | 34 | 107,656 | 107,656 | 0,000 | ||
3 | 95,288 | 95,289 | 0,001 | 19 | 79,874 | 79,873 | 0,001 | 35 | 106,383 | 106,383 | 0,000 | ||
4 | 83,974 | 83,979 | 0,005 | 20 | 66,214 | 66,206 | 0,008 | 36 | 105,989 | 105,989 | 0,000 | ||
5 | 69,942 | 69,976 | 0,034 | 21 | 105,354 | 105,354 | 0,000 | 37 | 108,118 | 108,118 | 0,000 | ||
6 | 108,557 | 108,558 | 0,001 | 22 | 99,226 | 99,226 | 0,000 | 38 | 106,758 | 106,758 | 0,000 | ||
7 | 102,267 | 102,267 | 0,000 | 23 | 90,508 | 90,507 | 0,001 | 39 | 106,334 | 106,334 | 0,000 | ||
8 | 93,491 | 93,492 | 0,001 | 24 | 79,307 | 79,304 | 0,003 | 40 | 108,437 | 108,437 | 0,000 | ||
9 | 82,191 | 82,195 | 0,004 | 25 | 65,735 | 65,724 | 0,011 | 41 | 107,028 | 107,028 | 0,000 | ||
10 | 68,253 | 68,263 | 0,010 | 26 | 105,044 | 105,044 | 0,000 | 42 | 106,584 | 106,584 | 0,000 | ||
11 | 107,176 | 107,176 | 0,000 | 27 | 99,012 | 99,012 | 0,000 | 43 | 108,625 | 108,625 | 0,000 | ||
12 | 100,864 | 100,864 | 0,000 | 28 | 90,309 | 90,308 | 0,001 | 44 | 107,192 | 107,191 | 0,001 | ||
13 | 92,098 | 92,098 | 0,000 | 29 | 79,119 | 79,115 | 0,004 | 45 | 106,736 | 106,736 | 0,000 | ||
14 | 80,831 | 80,831 | 0,000 | 30 | 65,577 | 65,565 | 0,012 | 46 | 108,687 | 108,687 | 0,000 | ||
15 | 67,038 | 67,036 | 0,002 | 31 | 107,033 | 107,033 | 0,000 | 47 | 107,246 | 107,246 | 0,000 | ||
16 | 106,214 | 106,214 | 0,000 | 32 | 105,911 | 105,911 | 0,000 | 48 | 106,787 | 106,787 | 0,000 |
-
Выводы
Используя метод конечных элементов мы решили задачу теплопроводности в заданной области двумя способами:
-
с использованием одномерного конечного элемента
-
с использованием треугольного симплексного конечного элемента
Сравненивая температуры полученные при использовании обоих методов видим, что их разница не превышает величины , следовательно было выбранно достаточное колличество узлов для того, что бы оба метода дали точный результат.
10. Список литературы
1. Сегерлинд Л. Применение метода конечных элементов.М.: Мир, 1979.— 392 с.