Курсовая работа: 2018 - Решение курсовой 12 на С++
Описание
Характеристики курсовой работы
Список файлов
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
#include <math.h>
#include <stdlib.h>
int main()
{
double L, t_e, hx, hy, tau, al[102], be[102], time = 0, a, b, c, f, tD;
double T[102][102];
int Nx, Ny, i, j;
ofstream data;
data.open("T.txt");
//ввод значений
cout << "Insert the number of spatial nodes by x:" << endl;
cin >> Nx;
cout << "Insert the number of spatial nodes by y:" << endl;
cin >> Ny;
cout << "Insert the end time:" << endl;
cin >> t_e;
cout << "Insert the size:" << endl;
cin >> L;
cout << "Insert the number of spatial nodes by t:" << endl;
cin >> tD;
//шаг сетки про пространству и времени
hx = 2.0*L / (Nx - 1);
hy = 2.0*L / (Ny - 1);
tau = t_e / tD;
//поле Т в начальный момент времени.
for (i = 1; i <= Nx; i++)
{
for (j = 1; j <= Ny; j++)
{
T[i][j] = (1 - (pow(i-1, 2) / pow(Nx-1, 2)))*(1 - (pow(j-1, 2) / pow(Ny-1, 2)));
}
}
//интегрирование
while (time < t_e)
{
time = time + tau;
//СЛАУ по Ох, опр поле Т
for (j = 1; j <= Ny; j++)
{
//нач прогонные коэф
al[1] = 0.0;
be[1] = 0.0;
//цикл для прогонных коэф
for (i = 2; i <= (Nx - 1); i++)
{
//a,b,c,f - коэф каноничного СЛАУ с трёхдиаг мц
a = 1.0 / pow(hx, 2);
c = 1.0 / pow(hx, 2);
b = (2.0 / pow(hx, 2)) + 1.0 / tau;
f = -T[i][ j] / tau;
//al[i] и be[i] - прогонные коэф
al[i] = a / (b - c * al[i - 1]);
be[i] = (c*be[i - 1] - f) / (b - c * al[i - 1]);
}
//значение Т на правой границе из ГУ
T[Nx][ j] = 0.0;
//поле Т на промежуточном временном слое
for (i = (Nx - 1); i >= 1; i--)
{
T[i][ j] = al[i] * T[i + 1][ j] + be[i];
}
}
//СЛАУ для Оу для опр поля Т на целом временном слое
for (i = 2; i <= (Nx - 1); i++)
{
//начальные прогонные коэф на основе нижнего ГУ
al[1] = 2.0*tau / (2.0*tau*pow(hy, 2));
be[1] = pow(hy, 2)*T[i][ 1] / (2.0*tau + pow(hy, 2));
//цикл с параметром для определения прогонных коэф
for (j = 2; j <= (Ny - 1); j++)
{
//a,b,c,f - коэф каноничного СЛАУ с трёхдиаг мц
a = 1.0 / pow(hy, 2);
c = 1.0 / pow(hy, 2);
b = (2.0 / pow(hy, 2)) + 1.0 / tau;
f = -T[i][ j] / tau;
//al[i] и be[i] - прогонные коэф
al[j] = a / (b - c * al[j - 1]);
be[j] = (c*be[j - 1] - f) / (b - c * al[j - 1]);
}
//T на верхней границе
T[i][ Ny] = 0.0;
//Поле Т на промежуточном временном слое
for (j = (Ny - 1); j >= 1; j--)
{
T[i][ j] = al[j] * T[i][ j + 1] + be[j];
}
}
//результаты в файл
data << time << "" << T[(Nx - 1) / 2][(Ny - 1) / 2] << endl;
}
data.close();
return 0;
}