Дискуссионный математический форумМатематический форум

Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 4 часа [ Летнее время ]
MathHelpPlanet.com RSS-лента Математического форума

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Решение уравнения переноса с помощью схемы Кранка-Николсона
СообщениеДобавлено: 03 мар 2017, 18:09 
Не в сети
Начинающий
Зарегистрирован:
03 мар 2017, 17:45
Сообщений: 1
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Здравствуйте. Есть такая задача:
Найти решение начально-краевой задачи

[math]u_t + u_x = 0, \quad 0 \leqslant x \leqslant 1, \quad 0 \leqslant t \leqslant 1[/math]
[math]u(x,0)=0[/math] при [math]x>0[/math]
[math]u(0,t) = 1, u(1,t) = 0[/math] при [math]t \geqslant 0[/math]

с помощью разностной схемы Кранка-Николсона

[math]\frac{u_j^{n+1} - u_j^n}{ \tau } + \frac{\frac{1}{2} (u_{j+1}^n + u_{j+1}^{n+1}) - \frac{1}{2} (u_{j-1}^n + u_{j-1}^{n+1})}{2h}=0[/math]

Решаю методом прогонки и получается такой график:
▼ График
Изображение


Но мне сказали, что он неправильный. "Волна" должна идти всегда из единицы, но как видно она начинается с 1 и опускается до 1/2. Помогите, пожалуйста, найти ошибку. Код на C++ ниже.
▼ Код
double L = 1, T = 1;
int N = 300, M = 100;
double h = L / N, t = T / M;

void init_conditions(vector<vector<double>> &Y) {
for (int i = 1; i <= N; i++) {
Y[i][0] = 0;
}
for (int n = 0; n <= M; n++) {
Y[0][n] = 1;
Y[N][n] = 0;
}
}

void solve(vector<vector<double>> &Y) {
init_conditions(Y);
vector<double> A(N + 1), B(N + 1), C(N + 1), F(N + 1), alpha(N + 1), beta(N + 1);
for (int n = 0; n < M; n++) {
for (int i = 1; i < N; i++) {
A[i] = -1 / (4 * h);
B[i] = 1 / t;
C[i] = 1 / (4 * h);
F[i] = (Y[i - 1][n] - Y[i + 1][n]) / (4 * h) + Y[i][n] / t;
}
alpha[2] = -C[1] / B[1]; beta[2] = F[1] / B[1];
for (int i = 2; i < N; i++) {
alpha[i + 1] = -C[i] / (A[i] * alpha[i] + B[i]);
beta[i + 1] = (F[i] - A[i] * beta[i]) / (A[i] * alpha[i] + B[i]);
}
for (int i = N - 1; i > 0; i--) Y[i][n + 1] = alpha[i + 1] *Y[i + 1][n + 1] + beta[i + 1];
}
}

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Решение уравнения переноса с помощью схемы Кранка-Николсона
СообщениеДобавлено: 03 мар 2017, 22:13 
Не в сети
Light & Truth
Зарегистрирован:
15 мар 2016, 16:08
Сообщений: 2353
Cпасибо сказано: 17
Спасибо получено:
339 раз в 324 сообщениях
Очков репутации: 118

Добавить очки репутацииУменьшить очки репутации
По виду правая часть схемы Кранка-Николсона - это аппроксимация второй производной. У вас в уравнении - первая производная.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Решение уравнения переноса с помощью схемы Кранка-Николсона
СообщениеДобавлено: 03 мар 2017, 23:20 
Не в сети
Light & Truth
Зарегистрирован:
15 мар 2016, 16:08
Сообщений: 2353
Cпасибо сказано: 17
Спасибо получено:
339 раз в 324 сообщениях
Очков репутации: 118

Добавить очки репутацииУменьшить очки репутации
searcher писал(а):
По виду правая часть схемы Кранка-Николсона - это аппроксимация второй производной. У вас в уравнении - первая производная.

Извиняюсь. При внимательном рассмотрении оказалось, что я не прав. Всё-таки первая производная.

Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

 Похожие темы   Автор   Ответы   Просмотры   Последнее сообщение 
Программирование уравнения переноса

в форуме Информатика и Компьютерные науки

zolla

6

122

04 фев 2017, 18:57

Решение задачи с помощью уравнения

в форуме Алгебра

aftafa333

9

300

18 ноя 2012, 17:58

Решение диф. уравнения с помощью ряда

в форуме Дифференциальное исчисление

SleapingForest

0

90

23 ноя 2014, 18:31

Решение диф. уравнения с помощью ряда

в форуме Ряды

SleapingForest

5

209

23 ноя 2014, 17:19

Привести к каноническому виду путем параллельного переноса

в форуме Аналитическая геометрия и Векторная алгебра

Vladptica

1

179

13 ноя 2013, 15:20

Решение с помощью индексирования

в форуме Теория чисел

Kakao Baba

4

480

19 фев 2014, 23:14

Решение диффур с помощью рядов

в форуме Дифференциальные и Интегральные уравнения

Gargantua

6

240

18 авг 2014, 19:48

С помощью ряда найти решение ДУ

в форуме Ряды

Vlad0777

0

166

11 дек 2012, 18:19

Решение уравнений с помощью производной

в форуме Алгебра

Olga1975

4

240

08 ноя 2015, 00:25

Найти решение ДУ с помощью ряда

в форуме Ряды

Dafanich

0

233

14 дек 2012, 13:54


Часовой пояс: UTC + 4 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Яндекс.Метрика

Copyright © 2010-2016 MathHelpPlanet.com. All rights reserved