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

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

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

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




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Заполнение матрицы
СообщениеДобавлено: 13 сен 2020, 12:22 
Не в сети
Начинающий
Зарегистрирован:
02 сен 2020, 21:54
Сообщений: 3
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Добрый день! Решаю численно задачу (дифференциальное уравнение в частных производных 4 порядка - бигармоническое уравнение).
Для решения использую следующую разностную схему:

[math]\dfrac{{20}}{{h^4 }}y_i^j - \dfrac{8}{{h^4 }}\left( {y_{i + 1}^j + y_i^{j + 1} + y_i^{j - 1} } \right) + \dfrac{2}{{h^4 }}\left( {y_{i + 1}^{j + 1} + y_{i - 1}^{j + 1} + y_{i - 1}^{j - 1} + y_{i + 1}^{j - 1} } \right) + \dfrac{1}{{h^4 }}\left( {y_{i + 2}^j + y_i^{j + 2} + y_{i - 2}^j + y_{i - 2}^j } \right) = 0 , i,j = 2.. M-2[/math]

[math]\begin{array}{l}
\dfrac{{y_i^0 - 2y_{i - 1}^0 + y_{i - 2}^0 }}{{h^2 }} = - p\left( {x_i } \right),\,\,i = \overline {2,M - 1} , \\
\dfrac{{y_{i + 1}^1 - y_i^1 - y_{i + 1}^0 + y_i^0 }}{{h^2 }} = - q\left( {x_i } \right),\,\,\overline {i = 1,M - 1} . \\
\dfrac{{y_i^N - 2y_{i - 1}^N + y_{i - 2}^N }}{{h^2 }} = 0,\,\,\dfrac{{y_{i + 1}^N - y_i^N - y_{i + 1}^{N - 1} + y_i^{N - 1} }}{{h^2 }} = 0,\,\,i = \overline {2,M } , \\
\dfrac{{y_0^{j + 1} - 2y_0^j + y_0^{j - 1} }}{{h^2 }} = 0,\,\,\dfrac{{y_1^{j + 1} - y_0^{j + 1} - y_1^j + y_0^j }}{{h^2 }} = 0,\,\,j = \overline {0,M - 1} , \\
\dfrac{{y_M^{j + 1} - 2y_M^j + y_M^{j - 1} }}{{h^2 }} = 0,\,\,\dfrac{{y_M^{j + 1} - y_{M - 1}^{j + 1} - y_M^j + y_{M - 1}^j }}{{h^2 }} = 0,\,\,j = \overline {1,M - 1} . \\
\end{array}[/math]


Пытаюсь заполнить матрицу системы размером [math](M+1)^2[/math], где каждая строка -- это соответствующее уравнение, а столбцы -- это коэффициенты перед переменными..

Т.е. каждая строка матрицы -- уравнение с переменными [math]y_{0}^{0}, y_1^0 , y_2^0[/math] и т.д.

Возникла проблема именно программно, как в С++ эту матрицу заполнить циклически? Т.е. у меня каждый элемент матрицы [math]A[i][j][/math] , [math]i[/math]-номер уравнения, [math]j[/math]-- номер переменной. С номером уравнения еще ладно, а вот номер переменной [math]j[/math] -- как получить этот номер. Сижу уже 2 день, не могу никак сдвинуться.

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Заполнение матрицы
СообщениеДобавлено: 13 сен 2020, 15:27 
Не в сети
Начинающий
Зарегистрирован:
02 сен 2020, 21:54
Сообщений: 3
Cпасибо сказано: 0
Спасибо получено:
0 раз в 0 сообщении
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Внизу прилагаю код того, как хотя бы я пытался заполнить матрицу коэффициентов системы для первого уравнения. Я просто не могу выявить закономерность между переменной y[i][j] и номером столбца, в которой она стоит.

//Начальные данные для задачи


TIP T, h_x, h_z, M, N, a, b;


cout << "Введите a = ";
cin >> a;
cout << "Введите b = ";
cin >> b;
cout << "Введите шаг по x-координате h_x =";
cin >> h_x;
cout << "Введите шаг по x-координате h_z =";
cin >> h_z;




int m = a / h_x ; // количество точек сетки по пространству
int n = b / h_z ; // количество точек сетки по времени

cout << "m = " << n << endl;
cout << "n = " << m << endl;


Matrix A((n+1)*(m+1), vector <TIP>((n + 1) * (m + 1))); // матрица системы

for (int i = 0; i <= m; i++)
{
for (int j = 0; j <= n; j++)
{
A[i][j] = 0.0;
}
}


Menu(); //вызов меню пользователя для выбора решаемой задачи
int selector;
cin >> selector;



vec X(n+1); // сетка по X
vec Z(m+1); // сетка по Z

vec B((m+1) * (n+1));

for (int i = 0; i <= n * m; i++)
{
B[i] = 0;
}


for (int i = 0; i <= m; i++)
{
X[i] = i * h_x;
}

for (int j = 0; j <= n; j++)
{
Z[j] = j * h_z;
}

cout << "Сетка по X:" << endl;
out_of_right_vector(X);
cout << endl;

cout << "Сетка по Z:" << endl;
out_of_right_vector(Z);
cout << endl;

cout << "Формирование матрицы системы - 1 этап" << endl;



for (int k = 0; k < (m - 3) * (n - 3) ; k++)
{
for (int i = 2; i <= (m - 2); i++)
{
for (int j = 2; j <= (n - 2); j++)
{
A[k][j + i ] = 20 / pow(h_x, 4);

A[k][j + i + 1 ] = -8 / pow(h_x, 4);
A[k][j + 1 + i ] = -8 / pow(h_x, 4);
A[k][j - 1 + i] = -8 / pow(h_x, 4);

A[k][i + 1 + j + 1 ] = 2 / pow(h_x, 4);
A[k][j + 1 + i -1 ] = 2 / pow(h_x, 4);
A[k][j - 1 + i - 1 ] = 2 / pow(h_x, 4);
A[k][j - 1 + i + 1 ] = 2 / pow(h_x, 4);

A[k][j + i + 2 ] = 1 / pow(h_x, 4);
A[k][j + 2 + i ] = 1 / pow(h_x, 4);
A[k][j + i - 2 ] = 1 / pow(h_x, 4);
A[k][j - 2 + i ] = 1 / pow(h_x, 4);

}
}
}

Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Заполнение матрицы
СообщениеДобавлено: Вчера, 14:49 
Не в сети
Профи
Зарегистрирован:
02 июн 2018, 08:50
Сообщений: 389
Cпасибо сказано: 10
Спасибо получено:
57 раз в 55 сообщениях
Очков репутации: 10

Добавить очки репутацииУменьшить очки репутации
Что то Вы по моему перемудрили. Я например не понимаю для чего 3 вложенных цикла у Вас (если правильно понял что Вы хотите). Матрица квадратная, нужен 1 внешний цикл и один вложенный. И кроме того Вы ведь записываете в файл не переменные Y0...Yn, а пишите коэффициенты при Y. Не знаю как Вы хотите решать, но обычно просто записываются уравнения, в котором Y это элементы массива.
dy(1) = a1*y(1) + b1*y(2)...
dy(2) = a2*y(1) + b2*y(2)...

Правда с задачами в частных производных заниматься не приходилось, может быть там есть свои особенности.

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

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

в форуме MathCad

Alexandr_II

2

848

19 дек 2012, 17:11

Заполнение (связано с китайской теоремой об остатках)

в форуме Начала анализа и Другие разделы школьной математики

mathematician

1

386

25 сен 2012, 19:20

Для данной матрицы найти диагональную и унитарную матрицы

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

OceanDrama

1

727

01 дек 2014, 17:30

Равенство определителей матрицы и союзной матрицы

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

darklagger

10

713

22 дек 2012, 20:34

Диагонализация матрицы и корень из матрицы

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

german_m17

2

599

22 июн 2015, 15:38

Матрицы

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

ginkok

6

280

23 дек 2018, 22:18

Матрицы

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

Lina-Lina

1

421

07 окт 2013, 13:13

Матрицы

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

Mikki

2

258

28 дек 2011, 18:40

Матрицы

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

AbirkulovSherali

1

172

10 дек 2016, 16:12

Матрицы

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

Hevzysq

9

474

25 окт 2014, 19:51


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



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

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


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

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

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

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