Форум программистов, компьютерный форум CyberForum.ru

Конечно-разностный метод (уравнение теплопроводности) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Конструкторы с тремя аргументами http://www.cyberforum.ru/cpp-beginners/thread1007296.html
Как мне это реализировать в классах, если у меня уже есть функция в какой я ввожу строки и столбики рандомно генерирую числа в это массив и вывожу его и центральные координати но нужно сделать вот такой конструктор: с тремя аргументами (третий аргумент - по умолчанию) - динамично резервирует память на заданное количество строк и столбцов и заполняет матрицу заданным значением; если значение...
C++ typeid Кто-нибудь может объяснить зачем в C++ , а конкретно в ООП нужен оператор tepeid. Что он делает и т.п. Вот например что делает данная строка символов. Заранее спасибо. if(strcmp("class express", typeid(*p).name())==0) http://www.cyberforum.ru/cpp-beginners/thread1007283.html
C++ Копирование содержимого контейнера map
Итак, есть контейнер map<string,fsElem *>, где fsElem - базовый класс, также есть наследуемый от него класс catalog. class catalog:public fsElem { private: int address; catalogStruct *catalogStructure; catalog *parentCatalog; public: catalog(const catalog& orig); };
Массив указателей на функцию в классе C++
Доброго всем времени суток.Пожалуйста помогите разобраться. #include <stdlib.h> #include "iostream" using namespace std; template <class T> //Шаблон Pr класса с параметром T class Pr { T x;
C++ Аргумент функции - указатель на метод класса http://www.cyberforum.ru/cpp-beginners/thread1007262.html
Здравствуйте. Содержание задания - написать программу, создающую копию выбранного пользователем файла при помощи n-го кол-ва потоков (среда разработки "VS 2012"). Написание программы процедурным методом не вызвало ни каких трудностей. Но вот при написании её же при помощи классов... Суть вопроса в том, что при попытке передать метод класса в виде одного из аргументов в ф-цию CreateThread() -...
C++ Двумерный динамический массив. Все нечетные строки матрицы сдвинуть циклически на К элементов влево Помогите пожалуйста нужно нужно создать двумерный динамический массив и все нечетные строки матрицы сдвинуть циклически на К элементов влево. Я попыталась хотя бы просто их сдвинуть но у меня не получается не могли бы вы помочь ? #include <iostream> #include <stdlib.h> #include <conio.h> int **formMatr (int &n, int &m) { подробнее

Показать сообщение отдельно
Victory_Valery
7 / 1 / 1
Регистрация: 24.12.2012
Сообщений: 13
14.11.2013, 02:17     Конечно-разностный метод (уравнение теплопроводности)
Добрый день! Задача распространения тепла в стержне описывается уравнением теплопроводности
ut= a2uxx+f(x,t)
дополняется краевыми условиями первого рода: на концах стержня поддерживается заданный температурный режим:
u(0, t) = mu_1(t), u(l, t) = mu_2(t) (2)
Задано начальное распределение температуры в стержне
u(x, 0) = phi(x);
В уравнении (1):
u(x,t) - температура, х - координата, t - время, a2 - коэффициент теплопроводности, f(x,t) - внутренние тепловые источники.
Подобрав шаг по времени tau, вычислить решение задачи вплоть до заданного конечного значения времени t=T. Решение находить в точках стержня c заданным шагом h.
СХЕМА ЯВНАЯ.

Вот листинг программы и заодно мои попытки что-то переработать... Выдает столб нулей и не пишет в файл, не могу понять почему.. (в выходном файле должна быть матрица со значением температуры в каждой точке шаблона(сетки))
Может быть кто-то сможет подправить?
L=6
a2=4
phi(x)=x2(x-6)ex
mu_1(t) = 5
mu_2(t) = 47
h = 0.25
T = 3
f(x,t) = 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main(void);
float f (float x, float t);
float mu_1 (float t);
float mu_2 (float t);
float phi (float x);
 // – //
 int main(void)
{
    clrscr();
    FILE *myfile;
    FILE *plotter;
    float a[120] [120];
    float b[120] [120];
    float u[120] [120];
    float T = 3;
    float l =6;
    float h = 0.25;
    float tau = 0.01;
    int n, i, j, k;
    float s = pow (h, 2) / tau;
    n = ceil (l / h);
    for (i = 0; i <= 119; i++){
        for (j = 1; j <= 119; j++){
            u[i] [j] = 0;
            a[i] [j] = 0;
            b[i] [j] = 0;
        }
    }
    for (i = 0; i <= n; i++){
        u[i] [0] = phi (i * h);
    }
    for (j = 0; j <= floor (T /tau); j++){
        u[0] [j] = mu_1 (tau * j);
        u[n] [j] = mu_2 (tau * j);
    }
    for (j = 0; j <= floor (T / tau); j++){
        a[1] [j + 1] = 1 / (2 + s);
    for (i = 2; i <= n - 1; i++){
        a[i] [j + 1] = 1 / (2 + s - a [i - 1] [j + 1]);
    }
    b[1] [j + 1] = mu_1 ((j + 1) * tau) + s * u[1] [j] + pow (h, 2) * f (h, (j + 1) * tau);
    for (i = 2; i <= n - 1; i++){
        b[i] [j + 1] = a [i - 1] [j + 1] + s * u[i] [j] + pow (h, 2) * f (i * h, (j + 1) * tau);
    }
    u[n] [j + 1] = mu_2 ((j + 1) * tau);
    for (k = 1; k <= n - 1; k++){
        u [n - k] [j + 1] = a [n - k] [j + 1] * (b [n - k] [j + 1] + u [n - k + 1] [j + 1]);
    }
    }
 
    for (j = 0; j <= floor (T / tau); j++){
        for (i = 0; i <= n; i++){
            printf ("%.2f", u[i] [j]);
            fprintf (myfile, "u(%g) (%g)=%g; \n", i * h, j * tau, u[i] [j]);
            if (i < n && j < floor (T / tau)){
                fprintf (plotter, "[[%g, %g, %g], [%g, %g, %g], [%g, %g, %g], [%g, %g, %g]]", i * h, j * tau, u[i] [j], (i + 1) * h, j * tau, u [i + 1] [j], i * h, (j + 1) * tau, u[i] [j + 1], (i + 1) * h, (j + 1) * tau, u [i + 1] [j + 1]);
                if (i >= n - 1 && j >= floor (T / tau) - 1){
            }
            else{
            fprintf (plotter,",");
            }
            }
        }
        printf ("\n");
    }
    fclose(myfile);
    fclose(plotter);
    printf ("\n Ось x расположена горизонтально; ось t расположена вертикально и направлена вниз");
    printf ("Шаг по оси x равен % g; шаг по оси t равен % g.\n", h, tau);
    printf ("\nДля выхода нажмите ENTER…");
    while (getch()!= 13);
    return(0);
}
 // – //
float f (float x, float t)
{
return 2;
}
 // – //
float mu_1 (float t)
{
return 5;
}
 // – //
float mu_2 (float t)
{
return 47;
}
 // – //
float phi (float x)
{
return x^2*(x-6)*exp(x);
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 06:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru