2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Задачка по линейной алгебре
Сообщение07.11.2014, 17:37 
Здравствуйте!

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

Исходная задача:

Решить методом Зейделя СЛАУ с точностью $\epsilon = 0.001$. СЛАУ задана расширенной матрицей $$\begin{pmatrix}
4 & 1 & 2 & 1 & 1\\ 
2 & 8 & 3 & 2 & -2 \\ 
3 & -1 & 6 & 1 & 5\\ 
3 & 2 & 1 & 6 & 8
\end{pmatrix}$$

Условие сходимости метода Зейделя выполняется.

Далее привожу заданную СЛАУ к виду $$\left\{\begin{matrix}
x_{1} = 0.25 - 0.25x_{2} - 0.5 x_{3} - 0.25 x_{4}\\ 
x_{2} = -0.25 - 0.25x_{1} - 0.375 x_{3} - 0.25 x_{4} \\ 
x_{3} = 0.833 - 0.5x_{1} + 0.166 x_{2} - 0.166 x_{4}  \\ 
x_{4} = 1.333 - 0.5x_{1} - 0.333 x_{2} - 0.166 x_{3} 
\end{matrix}\right.$$ или в матричной форме

$$x^{<k>} = C \cdot x^{<k-1>} + B$$

где:

$x^{<k>}$ - вектор $k$-ых приближений,

$x^{<k-1>}$ - вектор $k-1$-ых приближений,

$$C =  \begin{pmatrix}
0 & -0.25 & -0.5 & -0.25 \\ 
-0.25 & 0 & -0.375 & -0.25  \\ 
-0.5 & 0.166 & 0 & -0.166\\ 
-0.5 & -0.333 & -0.166 & 0
\end{pmatrix}$$

и

$$B =\begin{pmatrix}
0.25\\ 
-0.25\\ 
0.833\\ 
1.333
\end{pmatrix}$$


Собственно вопрос: как выразить вектор $x^{<k>}$ через вектор $x^{<k-1>}$ ?

Для метода простых итераций сработала бы формула $$x^{<k>} = C \cdot x^{<k-1>} + B$$ ,но в силу специфики метода Зейделя (при вычислении иксов на каждой итерации, используются уже вычисленные иксы на этой же итерации), данная формула тут не совсем работает.

Пробовал как-то разложить матрицу $C$ на сумму верхнетреугольной и нижнетреугольной матриц, но все равно как-то некорректно считает.

Помогите, пожалуйста :|

PS. Все это буду реализовывать в MathCad.

 
 
 
 Re: Задачка по линейной алгебре
Сообщение07.11.2014, 22:14 
Аватара пользователя
Можно записать покоординатную формулу, она ничем не лучше и не хуже матричной

 
 
 
 Re: Задачка по линейной алгебре
Сообщение07.11.2014, 22:49 

(Оффтоп)

Limit79 в сообщении #927868 писал(а):
Собственно вопрос: как выразить вектор $x^{<k>}$ через вектор $x^{<k-1>}$ ?
Имелось в виду такое:$$x^{\langle k\rangle} = C'x^{\langle k-1\rangle} + B' \equiv (E-L)^{-1}Ux^{\langle k-1\rangle} + (E-L)^{-1}B\;?$$

А почему не считать, перезаписывая компоненты текущего вектора по очереди? Такой код, наверно, не так хорошо параллелится, но зато в нём предварительно вычислять $B',C'$ не надо. И вдруг (не имею понятия) умножение на $B'$ и прибавление $C'$ численно хуже умножения на $B$ и прибавления $C$?

 
 
 
 Re: Задачка по линейной алгебре
Сообщение07.11.2014, 22:54 
Аватара пользователя
Limit79 в сообщении #927868 писал(а):
но в силу специфики метода Зейделя (при вычислении иксов на каждой итерации, используются уже вычисленные иксы на этой же итерации), данная формула тут не совсем работает.

Условие сходимости проверяли?

 
 
 
 Re: Задачка по линейной алгебре
Сообщение08.11.2014, 01:39 
cool.phenon
arseniiv в сообщении #927982 писал(а):
А почему не считать, перезаписывая компоненты текущего вектора по очереди?

Это первое, что я пробовал сделать, но в маткаде так сделать не получается.

мат-ламер в сообщении #927986 писал(а):
Условие сходимости проверяли?

Да, проверял, условие сходимости выполняется, так как модули диагональных элементов не меньше сумм модулей других элементов в каждой строке.


Задачку, кстати, решил, хоть формула получилась и огроменная.

 
 
 
 Re: Задачка по линейной алгебре
Сообщение08.11.2014, 01:53 
Limit79 в сообщении #928066 писал(а):
Задачку, кстати, решил, хоть формула получилась и огроменная.
Как так? А
arseniiv в сообщении #927982 писал(а):
$$x^{\langle k\rangle} = C'x^{\langle k-1\rangle} + B' \equiv (E-L)^{-1}Ux^{\langle k-1\rangle} + (E-L)^{-1}B\;?$$
Это не то разве? Отделяем, переносим, обращаем… :?

 
 
 
 Re: Задачка по линейной алгебре
Сообщение08.11.2014, 02:00 
arseniiv в сообщении #928072 писал(а):
Как так? А

Я объяснить толком не могу :shock: но суть в том, что, например, для расчета второй переменной, нам нужно использовать ранее вычисленное значение первой переменной, вот таким образом я сделал.

Если Вам интересно, могу показать маткадовский файл с формулами и самим решением.

arseniiv в сообщении #928072 писал(а):
Это не то разве? Отделяем, переносим, обращаем… :?

Ох, может быть и оно, но я несколько не понимаю эту формулу...

 
 
 
 Re: Задачка по линейной алгебре
Сообщение08.11.2014, 02:08 
$E$ — единичная,
$L$ — часть $C$ снизу от диагонали,
$U$ — оставшаяся часть $C$ — из элементов сверху и на диагонали;
один раз перед итерациями считаем $C' = (E - L)^{-1}U$, $B' = (E - L)^{-1}B$ и пошли упоминавшейся вами выше простой итерацией (не знаю, насколько это полезно, но как-нибудь сработать точно должно).

-- Сб ноя 08, 2014 05:16:27 --

Limit79 в сообщении #928075 писал(а):
вот таким образом я сделал
Так это и хорошо (наверно)!

(Чисто из любопытства.) Я правильно вывожу, что в маткаде нет локальных переменных? Тогда можно, к примеру, хвостовую рекурсию с передачей изменённого в одной компоненте вектора сделать — наверно, так у вас и есть? (Или в маткаде есть named let. :lol: )

 
 
 
 Re: Задачка по линейной алгебре
Сообщение08.11.2014, 03:43 
arseniiv в сообщении #928078 писал(а):
что в маткаде нет локальных переменных?

Заданные переменные видны до конца файла, но в маткаде есть эдакая возможность программирования каких-либо функций, там, думаю, есть локальные переменные.

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group