Разобраться в граничных условиях моделирования в коде и статье
Есть статья (приложена внизу) и всё, что в ней описано, реализовано её авторами в коде на Matlab (тоже приложен внизу). Большая часть понятна, кроме момента, как получились граничные условия для неявной конечно-разностной схемы, которую они используют в коде.
Понимаю, что задача непростая , но и я готова рассмотреть разные бюджеты и временные рамки.
Суть задачи в том, что находится значение массива h на n+1 шаге с помощью n-го шага. Для этого решается матричное уравнение:
И всё прекрасно решается, но только непонятно, как заполняются первые две и последние две строки матрицы (это как раз и есть граничные условия). Вот как они выглядят в коде на Matlab:
Первая строка матрицы:
A(1, 1) = Cv * h(1,ts) * h(2,ts)^2 / dr^4 / eta(2,ts) + 1/dt;
A(1, 2) = 2 * Cv * h(1,ts) * h(2,ts)^2 / dr^4 / eta(2,ts);
A(1, 3) = -5 * Cv * h(1,ts) * h(2,ts)^2 / dr^4 / eta(2,ts);
A(1, 4) = 2 * Cv * h(1,ts) * h(2,ts)^2 / dr^4 / eta(2,ts);
где Cv и dr -это константы, eta(i , j)- вспомогательный массив
Вторая строка матрицы:
i = 2;
A(i, i-1) = Cv * h(i,ts)^3 / eta(i,ts) / dr * ( 1/dr^3 - 1/r(i)^3 - 2/dr/r(i)^2 - 1/dr^2/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^2 / r(i) * ( 1/2/dr^2 - 1/4/r(i)^2 - 1/2/dr/r(i)) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^2 / r(i) * (-1/2/dr^2 + 1/4/r(i)^2 + 1/2/dr/r(i));
A(i, i) = Cv * h(i,ts)^3 / eta(i,ts) / dr^2 * (-4/dr^2 + 4/r(i)^2 + 3/dr/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^3 / r(i) * (-3/2/dr + 1/r(i)) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^3 / r(i) * ( 3/2/dr - 1/r(i)) + 1/dt;
A(i, i+1) = Cv * h(i,ts)^3 / eta(i,ts) / dr * ( 6/dr^3 + 1/r(i)^3 - 2/dr/r(i)^2 - 3/dr^2/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^2 / r(i) * ( 3/2/dr^2 + 1/4/r(i)^2 - 1/2/dr/r(i)) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^2 / r(i) * (-3/2/dr^2 - 1/4/r(i)^2 + 1/2/dr/r(i));
A(i, i+2) = Cv * h(i,ts)^3 / eta(i,ts) / dr^3 * (-4/dr + 1/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^4 / r(i) * (-1/2) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^4 / r(i) * ( 1/2);
A(i, i+3) = Cv * h(i,ts)^3 / eta(i,ts) / dr^4;
где r(i) - вспомогательный массив
Предпоследняя строка матрицы:
i = len-1;
A(i, i-3) = Cv * h(i,ts)^3 / eta(i,ts) / dr^4;
A(i, i-2) = Cv * h(i,ts)^3 / eta(i,ts) / dr^3 * (-4/dr - 1/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^4 / r(i) * ( 1/2) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^4 / r(i) * (-1/2);
A(i, i-1) = Cv * h(i,ts)^3 / eta(i,ts) / dr * ( 6/dr^3 - 1/r(i)^3 - 2/dr/r(i)^2 + 3/dr^2/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^2 / r(i) * (-3/2/dr^2 - 1/4/r(i)^2 - 1/2/dr/r(i)) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^2 / r(i) * ( 3/2/dr^2 + 1/4/r(i)^2 + 1/2/dr/r(i));
A(i, i) = Cv * h(i,ts)^3 / eta(i,ts) / dr^2 * (-4/dr^2 + 4/r(i)^2 - 3/dr/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^3 / r(i) * ( 3/2/dr + 1/r(i)) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^3 / r(i) * (-3/2/dr - 1/r(i)) + 1/dt;
A(i, i+1) = Cv * h(i,ts)^3 / eta(i,ts) / dr * ( 1/dr^3 + 1/r(i)^3 - 2/dr/r(i)^2 + 1/dr^2/r(i)) + Cv * h(i-1,ts)^3 * r(i-1) / eta(i-1,ts) / dr^2 / r(i) * (-1/2/dr^2 + 1/4/r(i)^2 - 1/2/dr/r(i)) + Cv * h(i+1,ts)^3 * r(i+1) / eta(i+1,ts) / dr^2 / r(i) * ( 1/2/dr^2 - 1/4/r(i)^2 + 1/2/dr/r(i));
Последняя строка матрицы:
A(len, len) = 1;
Додатки 2
Актуальні фриланс-проєкти в категорії Прикладне програмування
Програма автоматичного обзвону
7845 UAH
Потрібно написати програму для обзвону співробітників компанії. Є сервер Asterisk, SIP акаунт, адміністратор виділив 5 ліній. База даних зберігається локально. Базу даних для обзвону повинен формувати оператор: 1. ПІБ 2. Посада 3. Номер телефону 4. Пріоритет Також оператор… IP-телефонія та VoIP, Прикладне програмування |
Зробити імпорт товарів на сайт Simpla і оновлювати їхПривіт, потрібно зробити імпорт товарів за вивантаженням. Є різні формати вивантаження - csv, xml, xls Також потрібно потім оновлювати наявність товарів з таблиці Google Потрібно при цьому, щоб всюди товари з одним і тим самим артикулом з різних джерел (зараз товари… Веб-програмування, Прикладне програмування ∙ 3 ставки |
Розробити розумний будинок на Raspberryзлити якийсь тач скрін з розбери Під час завантаження екрану повинно бути 10 зображень і всі при натисканні на зображення лампочки сигнал 3в один повинен бути при натисканні на зображення чайника сигнал 3в інший повинен бути І тд і т Прикладне програмування |
Налаштувати фід вивантаження товарів з Хорошоп на КастаНалаштувати фід для вивантаження товарів, з інтернет-магазину на платформі Хорошоп на Каста, відповідно до вимог і інструкції Каста. 4-5 категорій товарів, до 50 товарів в категорії. Парсинг даних, Прикладне програмування ∙ 2 ставки |
Зробити іспорт товарів на сайт Simpla та оновлювати їхДоброго дня, треба зробити імпорт товарів з вигрузки. Є різні формати вигрузки - csv, xml, xls Також потім потрібно оновлювати наявність товарів з гугл таблиці Веб-програмування, Прикладне програмування ∙ 2 ставки |