2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 18:58 


27/02/11
12
Помогите сосчитать, ответ должен быть в виде матрици
Hack attempt!
У самого не получается. Желательно выложите ваше оформление кода в Mathematica/

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 19:03 
Заслуженный участник


25/02/11
1786
Скиньте сначала сюда свой код в математике. Так проще будет разобраться)

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 19:15 


27/02/11
12
Нужно реализовать подсчет той формулы что я написал, в Mathematice оно не работает почему-то.

-- Вс фев 27, 2011 19:21:26 --

То что есть.
Код:
Subscript[h, 1] = 3;
Subscript[h, 2] = 6;
Subscript[\[Lambda], 1] = 2;
Subscript[\[Lambda], 2] = 3;
\[Upsilon] = 0.5;
\[Mu] = 4;
NN = 10;
A1[i_] := ( {
    {Subscript[\[Lambda], 1] + i*\[Upsilon], -\[Mu]},
    {-Subscript[\[Lambda], 1],
     Subscript[\[Lambda], 1] + i*\[Upsilon] + \[Mu]}
   } );
B1[i_] := ( {
    {0, 0},
    {((i + 1)*\[Upsilon]*(Subscript[\[Lambda], 1] + 2*\[Mu]))/
     Subscript[\[Lambda], 1], ((i + 1)*\[Upsilon]*2*\[Mu])/
     Subscript[\[Lambda], 1]}
   } );
CC1 = ( {
    {0, 0},
    {(Subscript[h, 1]*\[Upsilon]*2*\[Mu])/Subscript[\[Lambda], 1], (
     Subscript[h, 1]*\[Upsilon]*2*\[Mu])/Subscript[\[Lambda], 1]}
   } );
A2[i_] := ( {
    {Subscript[\[Lambda], 2] + i*\[Upsilon], -\[Mu]},
    {-Subscript[\[Lambda], 2],
     Subscript[\[Lambda], 2] + i*\[Upsilon] + \[Mu]}
   } );
B2[i_] := ( {
    {0, 0},
    {((i + 1)*\[Upsilon]*(Subscript[\[Lambda], 2] + 2*\[Mu]))/
     Subscript[\[Lambda], 2], ((i + 1)*\[Upsilon]*2*\[Mu])/
     Subscript[\[Lambda], 2]}
   } );
CC2 = ( {
    {0, 0},
    {(Subscript[h, 1]*\[Upsilon]*2*\[Mu])/Subscript[\[Lambda], 2], (
     Subscript[h, 1]*\[Upsilon]*2*\[Mu])/Subscript[\[Lambda], 2]}
   } );
EE = ( {
    {1, 0},
    {0, 1}
   } );
Subscript[EE, 0] = {{0, 0}, {1, 0}};
DD = ( {
    {1, 0},
    {Subscript[\[Lambda], 2] + NN*\[Upsilon], -\[Mu]}
   } );
\[CapitalDelta]1[j_] := (\!\(
\*UnderoverscriptBox[\(\[Product]\), \(i = j\), \(
\*SubscriptBox[\(h\), \(1\)] - 1\)]\(Inverse[A1[i]] .
      B1[i]\)\)).(((\!\(
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(Inverse[A1[i]] .
           B1[i]\)\)).Inverse[A1[Subscript[h, 2] - 1]].CC2 + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k =
\*SubscriptBox[\(h\), \(1\)]\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(k - 1\)]Inverse[A1[i]] .
            B1[i])\) Inverse[A1[k]] . CC2\)\)) + EE).Inverse[(EE + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k =
\*SubscriptBox[\(h\), \(1\)]\), \(
\*SubscriptBox[\(h\), \(2\)] - 1\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(k - 1\)]Inverse[A2[i]] .
           B2[i])\) Inverse[A2[k]] . CC2\)\))].(\!\(
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(NN - 1\)]\(Inverse[A2[i]] .
      B2[i]\)\)).Inverse[DD].Subscript[EE, 0];

А нужно сделать кругом матричные произведения.
Код:
\[CapitalDelta]1[j_] := (\!\(
\*UnderoverscriptBox[\(\[Product]\), \(i = j\), \(
\*SubscriptBox[\(h\), \(1\)] - 1\)]\(Inverse[A1[i]] .
      B1[i]\)\)).(((\!\(
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(Inverse[A1[i]] .
           B1[i]\)\)).Inverse[A1[Subscript[h, 2] - 1]].CC2 + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k =
\*SubscriptBox[\(h\), \(1\)]\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(k - 1\)]Inverse[A1[i]] . B1[i])\) .
         Inverse[A1[k]] . CC2\)\)) + EE).Inverse[(EE + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k =
\*SubscriptBox[\(h\), \(1\)]\), \(
\*SubscriptBox[\(h\), \(2\)] - 1\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(k - 1\)]Inverse[A2[i]] . B2[i])\) .
        Inverse[A2[k]] . CC2\)\))].(\!\(
\*UnderoverscriptBox[\(\[Product]\), \(i =
\*SubscriptBox[\(h\), \(1\)]\), \(NN - 1\)]\(Inverse[A2[i]] .
      B2[i]\)\)).Inverse[DD].Subscript[EE, 0];

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 19:41 
Заслуженный участник


25/02/11
1786
Не понял, в чем разница между двумя дельтами, но, похоже, проблема в том, что если верхний индекс больше верхнего, то произведение получается из нулевого количества множителей, что дает в математике единицу. Например, результатом для матриц
Код:
Product[IdentityMatrix[2], {k, 1, 0}]
все равно будет 1, а это не матрица.

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение28.02.2011, 20:49 
Аватара пользователя


15/01/06
200
Anton2010, так а в чем проблема? Если по-вашему произведение что по возрастающему, что по убывающему индексу это одно и то же, то просто сделайте чтобы индекс был всегда возрастающий, поскольку математике так "больше нравится". Например, вот так
Код:
Sum[Product[
   Inverse[a1[i]].b1[i], {i, Min[k - 1, h1], Max[k - 1, h1]}].Inverse[
   a1[k]].CC2, {k, h1, h2 - 1}]

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение30.04.2011, 12:07 


27/02/11
12
Добрый день я обратно вернулся к той проблеме что возникла сначала. Не получается записать в математике сумму произведений, да так что бы оно верно подсчитывалось.
Например:
Запишем требуемую сумму произведений через простые переменные.
Код:
\[CapitalDelta]1[j_] := \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k = j\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i = j\), \(k - 1\)]
SubscriptBox[\(a\), \(i\)]
\*SubscriptBox[\(b\), \(i\)])\)
SubscriptBox[\(a\), \(k\)]
\*SubscriptBox[\(c\), \(k\)]\)\);

При начальных значениях:
Код:
Subscript[h, 1] = 10;
Subscript[h, 2] = 15;
Subscript[\[Lambda], 1] = 3;
Subscript[\[Lambda], 2] = 8;
\[Upsilon] = 0.7;
\[Mu] = 4;
NN = 20;
a[i_] := ( {
    {1, 1},
    {1, 1}
   } );
b[i_] := ( {
    {1, 1},
    {1, 1}
   } );
c[i_] := ( {
    {1, 1},
    {1, 1}
   } );

Получим результат:
Код:
\[CapitalDelta]1[10]=Subscript[a, 10] Subscript[c, 10] +
Subscript[a, 10] Subscript[a, 11] Subscript[b, 10] Subscript[c, 11] +
  Subscript[a, 10] Subscript[a, 11] Subscript[a, 12] Subscript[b, 10]
   Subscript[b, 11] Subscript[c, 12] +
Subscript[a, 10] Subscript[a, 11] Subscript[a, 12] Subscript[a, 13]
   Subscript[b, 10] Subscript[b, 11] Subscript[b, 12] Subscript[c, 13]

При подстановке матриц из всех единиц на места всех переменных получим матрицу со значением в каждой ячейке равным 170.
Код:
\[CapitalDelta]1[11]=Subscript[a, 11] Subscript[c, 11] +
Subscript[a, 11] Subscript[a, 12] Subscript[b, 11] Subscript[c, 12] +
  Subscript[a, 11] Subscript[a, 12] Subscript[a, 13] Subscript[b, 11]
   Subscript[b, 12] Subscript[c, 13]
Аналогично 42.
Код:
\[CapitalDelta]1[12]=Subscript[a, 12] Subscript[c, 12] +
Subscript[a, 12] Subscript[a, 13] Subscript[b, 12] Subscript[c, 13]
Аналогично матрица из 10.
Код:
\[CapitalDelta]1[13]=Subscript[a, 13] Subscript[c, 13]
Аналогично матрица из 2.

При записи через матричную форму в виде.
Код:
\[CapitalDelta]2[j_] := \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k = j\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i = j\), \(k - 1\)]a[i] .
       b[i])\) . a[k] . c[k]\)\);

Математика выдает не верный результат.
Очень надеюсь на помощь спасибо.

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение30.04.2011, 15:16 
Заслуженный участник


25/02/11
1786
Первую часть не понял.
Anton2010 в сообщении #440230 писал(а):
При записи через матричную форму в виде.Код:
Код:
\[CapitalDelta]2[j_] := \!\(\*UnderoverscriptBox[\(\[Sum]\), \(k = j\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i = j\), \(k - 1\)]a[i] .
 b[i])\) . a[k] . c[k]\)\);
Математика выдает не верный результат.

Я уже писал, в чем дело. Оформляйте произведения так, чтобы не встречались случаи $$k-1<j$:
Код:
\[CapitalDelta]2[j_] := \!\(\*UnderoverscriptBox[\(\[Sum]\), \(k = j+1\), \(
\*SubscriptBox[\(h\), \(2\)] - 2\)]\(\((
\*UnderoverscriptBox[\(\[Product]\), \(i = j\), \(k - 1\)]a[i] .
b[i])\) . a[k] . c[k]\)\);

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение30.04.2011, 16:04 


27/02/11
12
Так вот есть формула
$$\Delta 1(j) = \sum\limits_{k = j}^{{h_2} - 2} {(\prod\limits_{i = j}^{k - 1} {{a_i}{b_i}} } ){a_k}{c_k}$$
соответственно:
$$\Delta 1(10) = {a_{10}}{c_{10}} + {a_{10}}{a_{11}}{b_{10}}{c_{11}} + {a_{10}}{a_{11}}{a_{12}}{b_{10}}{b_{11}}{c_{12}} + {a_{10}}{a_{11}}{a_{12}}{a_{13}}{b_{10}}{b_{11}}{b_{12}}{c_{13}}$$

Вы рекомендуете:
$$\Delta 2(j) = \sum\limits_{k = j + 1}^{{h_2} - 2} {(\prod\limits_{i = j}^{k - 1} {{a_i}{b_i}} } ){a_k}{c_k}$$
$$\Delta 2(j) = {a_{10}}{a_{11}}{b_{10}}{c_{11}} + {a_{10}}{a_{11}}{a_{12}}{b_{10}}{b_{11}}{c_{12}} + {a_{10}}{a_{11}}{a_{12}}{a_{13}}{b_{10}}{b_{11}}{b_{12}}{c_{13}}$$

Легко можно заметить:
$$\begin{gathered}
  \Delta 3(j) = \mathop \sum \limits_{k = j + 1}^{{h_2} - 2} (\mathop \prod \limits_{i = j}^{k - 1} {a_i}{b_i}){a_k}{c_k} + {a_j}{c_j}; \hfill \\
  \Delta 3(j) = {a_{10}}{c_{10}} + {a_{10}}{a_{11}}{b_{10}}{c_{11}} + {a_{10}}{a_{11}}{a_{12}}{b_{10}}{b_{11}}{c_{12}} + {a_{10}}{a_{11}}{a_{12}}{a_{13}}{b_{10}}{b_{11}}{b_{12}}{c_{13}} \hfill \\ 
\end{gathered} $$

Но вот я подставил ради интереса в программу mathematica:
$\[{a_i} = (\begin{array}{*{20}{c}}
  1&1 \\ 
  1&1 
\end{array})\]$
$\[{b_i} = (\begin{array}{*{20}{c}}
  1&1 \\ 
  1&1 
\end{array})\]$
$\[{c_i} = (\begin{array}{*{20}{c}}
  1&1 \\ 
  1&1 
\end{array})\]$

Получил ответ $\[\Delta 3(j)\]$ =$\[(\begin{array}{*{20}{c}}
  {58}&{58} \\ 
  {58}&{58} 
\end{array})\]$

Но насколько мне кажется верный ответ $\[(\begin{array}{*{20}{c}}
  {170}&{170} \\ 
  {170}&{170} 
\end{array})\]$

Под всеми произведениями нужно понимать исключительно матричное произведение.

Я уже совсем во всем запутался.

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение30.04.2011, 17:45 
Заслуженный участник


25/02/11
1786
Чтобы получалось умножение матриц, надо использовать команду Dot:
Код:
\[CapitalDelta]2[j_] := a[j].c[j] + \!\(
\*UnderoverscriptBox[\(\[Sum]\), \(k = j + 1\), \(
\*SubscriptBox[\(h\), \(2\)] -
      2\)]\(\((Dot @@ Table[a[i] . b[i], {i, j, k - 1}])\) . a[k] .
     c[k]\)\);

Команда Product перемножает матрицы поэлементно.

 Профиль  
                  
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение30.04.2011, 18:12 


27/02/11
12
Vince Diesel
Да я тоже до этого дошел, но как записать сумму произведений через Dot?Что бы всё время матрици перемножались "по матричному".

-- Сб апр 30, 2011 18:33:17 --

Vince Diesel
Огромное, спасибо! Действительно работает! Мозги просто уже плывут от работы над дипломом.Спасибо!!!

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

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



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

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


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

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group