Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6308
Последний выпуск: 19.06.2015

Решение уравнения теплопроводности численными методами

10K
23 октября 2015 года
trinitro
48 / / 14.06.2010
Здравствуйте!

Нужно построить график переходного процесса от криволинейной поверхности заданной функцией f(x),
с выводом графика самой f(x).
f(x) - представлена вектором (последовательный набор значений в точках по x).
Но то что у меня получилось выводит только прямые линии графика переходного процесса и графика самой функции.
Помогите пожалуйста!
Код:
...
#define X 20
...
{
        double  dt = 0.01,
                   dx = 0.1,
                   dy = 0.02,
                   a  = 0.0001;
        int       tsc; //время с сек.
       double dT[20][17],
                  T[20][17];
 //значение функции f(x) в точках по x
   int f[X] = {8,9,8,9,11,13,15,15,15,14,14,14,13,13,12,12,11,11,10,10};
//----------------------------Обнуление массивов---------------------------
 for (int i=0; i<19; ++i)
   {
       for (int j=0; j<16; ++j)
        {
                dT[i][j] = T[i][j] = 0;
        }
   }
//-----------------------------------------------------------------------------
for (int tsc=1; tsc<5000; ++tsc) //цикл по времени
{
         for (int i=1; i<18; ++i)
         {
               for (int f_iter=1; f_iter<X; ++f_iter)
                 {
                        int j = f[f_iter];
                        //уравнение теплопроводности в дескретной форме
                        double x = ( T[i-1][j] - 2 * T[i][j] + T[i+1][j] );
                        double y = ( T[i][j-1] - 2 * T[i][j] + T[i][j+1] );
                        dT[i][j] = a * dt * ( x/(dx*dx) + y/(dy*dy) + T[i][j]);
                 }
        }
//------------------граничные условия---------------------------------------
                       //сверху+воздействие
                       for (int x=0; x<19; ++x)
                       {
                                T[x][f[x]]  = 100;
                       }
                       //слева
                       for (int y_iter=0; y_iter<f[0]; ++y_iter)
                       {
                                int y = f[y_iter];
                                T[0][y]  = 0;
                       }
                       //снизу
                       for (int x=0; x<19; ++x)
                       {
                                T[x][0] = T[x][1];
                       }
                       //справа
                       for (int y_iter=0; y_iter<f[X-1]; ++y_iter)
                       {
                                int y = f[y_iter];
                                T[19][y]  = 0;
                       }
                       
//--------------------приращение-------------------------------------------
                       for (int x=0; x<19; ++x)
                       {
                                for (int y_iter=0; y_iter<X; ++y_iter)
                                {
                                        int y = f[y_iter];
                                        T[x][y] = T[x][y]+dT[x][y];
                                }
                       }
         Series1 -> AddXY(tsc, T[2][2]);
         Series2 -> AddXY(tsc,f[X-2]);
 }
}
10K
24 октября 2015 года
trinitro
48 / / 14.06.2010
Так заработало

Код:
{
double
           dt = 0.01,
            dx = 0.1,
            dy = 0.02,
            a  = 0.0001;
        int     tsc;
     
   double dT[20][17],
           T[20][17];
   int f[X] = {8,9,8,9,11,13,15,15,15,14,14,14,13,13,12,12,11,11,10,10};
for (int i=0; i<19; ++i)
   {
       for (int j=0; j<16; ++j)
        {
                dT[i][j] = T[i][j] = 0;
        }
   }
for (int tsc=1; tsc<20000; ++tsc)
{
         for (int i=1; i<18; ++i)
         {
               for (int j=1; j<15; ++j)
                 {
                        double x = ( T[i-1][j] - 2 * T[i][j] + T[i+1][j] );
                        double y = ( T[i][j-1] - 2 * T[i][j] + T[i][j+1] );
                        dT[i][j] = dt*(a*((x/(dx*dx)) + y/(dy*dy) + T[i][j]));
                 }
        }
     for (int x=0; x<18; ++x)
     {
          for (int y=0; y<16; ++y)
          {
                     T[x][f[x]]  = 100;
                     T[x][0] = T[x][1];
                     T[19][y]  = 0;
                     T[x][y] = T[x][y]+dT[x][y];
          }
      }
         Series1 -> AddXY(tsc, T[2][2]);
 }
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог