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

Метод Конечных Разностей для уравнения в частных производных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Создать числовую последовательность http://www.cyberforum.ru/cpp-beginners/thread1002726.html
Создать числовую последовательность из 20 цифр, четные числа формируются по формуле -6,2 + i, нечетные i +5,1. Найти сумму элементов значения которых меньше 4,0 и среднее арифметическое добавленных чисел.
C++ исключение unknown software exception (0x0000094) в приложении по адресу Помогите решить проблему,при работе проекта выдает сообщение об ошибке"исключение unknown software exception (0x0000094) в приложении по адресу..." // tort.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv) { return 0; http://www.cyberforum.ru/cpp-beginners/thread1002709.html
Создание класса по обработке данных массива C++
Добрый день!!!Помогите в решении задачи на массивы. А то в них вообще бум-бум.. Нужно написать программу по обработке массива, как объекта созданного Вами класса «Массив», реализовать программно и используя указатели без индексов: Задача №1. Дана вещественная квадратная матрица порядка M. Упорядочить строки матрицы по возрастанию диагональных элементов. Добавлено через 2 часа 0 минут...
Создание спрайтов на С++ C++
Всем привет! Дана тема Курсовой создать небольшой мультфильм на основе спрайтов в Code blocks. Есть ли на форуме кто сталкивался с данной темой? Каким образом их создавать и есть ли тематический материал на форуме данного рода?
C++ Почему при вводе в массив числа отличного от 1 и 2 все равно происходит начисление К+1 http://www.cyberforum.ru/cpp-beginners/thread1002672.html
K=0; for (i=1;i<=4;i++){ cout<<"Vvedite otvet:"; cin>>one; if ((one=1)||(one=2)) K=K+1; }
C++ список инцидентности в матрицу смежности Ребят, помогите пожалуйста. нужно разработать алгоритм преобразования списка инцидентности в матрицу смежности для неориентированного графа, и это все на С++. Добавлено через 7 часов 50 минут Up вопрос подробнее

Показать сообщение отдельно
illuminates
3 / 3 / 0
Регистрация: 14.06.2012
Сообщений: 106

Метод Конечных Разностей для уравнения в частных производных - C++

10.11.2013, 08:46. Просмотров 2288. Ответов 7
Метки (Все метки)

Здравствуйте, требуется ваша помощь в нахождении ошибки в программе. Вычисляю по явной схеме. Выдает какие-то очень большие числа.

Задача такая:
http://www.cyberforum.ru/cgi-bin/latex.cgi?U_t=3(1,1-0,5x)U_{xx}+e^t-1
http://www.cyberforum.ru/cgi-bin/latex.cgi? U(0,t)=0
http://www.cyberforum.ru/cgi-bin/latex.cgi? U(1,t)=0
http://www.cyberforum.ru/cgi-bin/latex.cgi?U(x,0)=0.01(1-x)x

Решение нужно найти с точностью http://www.cyberforum.ru/cgi-bin/latex.cgi?0.0001 на отрезке http://www.cyberforum.ru/cgi-bin/latex.cgi?T=1/a^*, где a^*=\max a(x,t)
Построить графики функций http://www.cyberforum.ru/cgi-bin/latex.cgi?u(x^*,t), u(x,jt^*) где http://www.cyberforum.ru/cgi-bin/latex.cgi?x^*=0.6, t^*=T/10, j=1,2,4

явная разностная схема такая:
(http://www.cyberforum.ru/cgi-bin/latex.cgi?$u_t^{j+1}-u_i^j)/\tau=3(1,1-0,5x_i)(u_{i+1}^{j}-2u_i^j+u_{i-1}^j)/h^2+e^{t_j}+1

код программы:
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
int main ( void )
{
    setlocale(LC_ALL, "rus");
 
    int I = 10, J = 30, i, j;
    double  T = 1.0/ pow(3.3, 0.5), h_x = 1.0/ I, h_t = T/ J, epsilon = h_t + pow(h_x, 2), c;
    double **u = new double *[I + 1];
    for (i = 0; i <= I; i++) u[i] = new double [J + 1]; 
 
    cout<< "Схема может быть неустойчива  при значениях Х :\n";
    for (i = 0; i <= I; i++)
    {
        c = 3 * (1.1 - 0.5 * h_x * i) * h_t * pow(h_x, -2);
        if (c < 0.5) cout << i * h_x << "   ";
    }
    cout <<"\n";
    
    //нулевой слой (j = 0)
    for (i = 0; i <= I; i++)
    {
        u [i][0] = 0.01 * (1 - i * h_x) * i * h_x;
        //u [i][0] = 1 - i * h_x;  //НУ, несоответствие ГУ и НУ!
    }
        //последующие слои
    for (j = 0; j <= J; j++)
    {
        for (i = 1; i < I; i++) //расчёт j + 1 - го слоя по j-му
        {
            u [0][j + 1] = 0; //ГУ u [0][j + 1] = 1;
            u [I][j + 1] = 0; //ГУ
            u [i][j + 1] = u [i][j] + h_t * (3 * (1.1 - 0.5 * h_x * i) * (u [i + 1][j] -2 * u [i][j] + u [i - 1][j])/ pow(h_x, 2) + exp(h_t * j) - 1);
        }
    }
    int Jv = J/10;
 
    ofstream out;
    out.open ("D:\\proga7.txt");
 
    out << "U = U(0.6, t):\n";
    cout << "U = U(0.6, t):\n";
    for (i = 0; i <= J; i++)
    {
        out << h_t * i <<"\t"<< u [6][i] <<"\n";
        cout << h_t * i <<"\t"<< u [6][i] <<"\n";
    }
    out << "\n U = U(x, 0.33):\n";
    cout << "\n U = U(x, 0.33):\n";
    for (i = 0; i <= I; i++)
    {
        out << h_x * i <<"\t"<< u [i][Jv] <<"\n";
        cout << h_x * i <<"\t"<< u [i][Jv] <<"\n";
    }
    out << "\n U = U(x, 0.66):\n";
    cout << "\n U = U(x, 0.66):\n";
    for (i = 0; i <= I; i++)
    {
        out << h_x * i <<"\t"<< u [i][Jv * 2] <<"\n";
        cout << h_x * i <<"\t"<< u [i][Jv * 2] <<"\n";
    }
    out << "\n U = U(x, 1.32):\n";
    cout << "\n U = U(x, 1.32):\n";
    for (i = 0; i <= I; i++)
    {
        out << h_x * i <<"\t"<< u [i][Jv * 4] <<"\n";
        cout << h_x * i <<"\t"<< u [i][Jv * 4] <<"\n";
    }
    out.close();
    getch();
    return 0;
}
выводит следующее:


Добавлено через 23 минуты
вместо трех знаков вопроса, должно стоять слово "где"

Добавлено через 13 часов 23 минуты
Добавил также выгрузку динамического массива:
for (i=0; i<I;i++)
{
delete [] u[i];
}
delete [] u;
ругается:
ОС Windows инициировала точку останова в proga7Метод конечных разностей.exe.

Это может быть вызвано повреждением кучи и указывает на ошибку в proga7Метод конечных разностей.exe или в одной из загруженных им DLL.

Возможной причиной так же может быть нажатие пользователем клавиши F12, когда фокус принадлежит proga7Метод конечных разностей.exe

Выведенное на экран окно содержит дополнительные данные для диагностики ошибки
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru