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

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

Теоретический раздел
Часовой пояс: UTC + 3 часа [ Летнее время ]
новый онлайн-сервис
число, сумма и дата прописью

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Решение уравнения переноса с помощью схемы Кранка-Николсона
СообщениеДобавлено: 03 мар 2017, 17:09 
Не в сети
Начинающий
Зарегистрирован:
03 мар 2017, 16: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, 21:13 
Не в сети
Последняя инстанция
Аватара пользователя
Зарегистрирован:
15 мар 2016, 15:08
Сообщений: 9390
Cпасибо сказано: 122
Спасибо получено:
1726 раз в 1634 сообщениях
Очков репутации: 235

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

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Решение уравнения переноса с помощью схемы Кранка-Николсона
СообщениеДобавлено: 03 мар 2017, 22:20 
Не в сети
Последняя инстанция
Аватара пользователя
Зарегистрирован:
15 мар 2016, 15:08
Сообщений: 9390
Cпасибо сказано: 122
Спасибо получено:
1726 раз в 1634 сообщениях
Очков репутации: 235

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

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

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

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

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

zolla

6

578

04 фев 2017, 17:57

С помощью схемы Горнера разложить а(х) по степеням в(х)

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

ilya17

3

467

08 фев 2018, 08:02

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

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

SleapingForest

0

286

23 ноя 2014, 17:31

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

в форуме Ряды

SleapingForest

5

429

23 ноя 2014, 16:19

Построение методом параллельного переноса

в форуме Геометрия

_Astarta_

5

711

28 апр 2018, 21:37

Уравнение переноса, явная схема

в форуме Численные методы

constantin01

1

687

29 окт 2020, 22:02

Как можно менять знаки переменных без переноса за знак равно

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

koderman

7

340

04 фев 2020, 08:17

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

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

Olga1975

4

602

07 ноя 2015, 23:25

найти с помощью резольвенты решение

в форуме Интегральное исчисление

Limpompo

0

484

26 мар 2018, 13:27

Решение предела с помощью интеграла

в форуме Интегральное исчисление

Viki4

2

214

22 апр 2023, 14:54


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



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

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


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

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

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

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