2014 dxdy logo

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

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




 
 Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 18:58 
Помогите сосчитать, ответ должен быть в виде матрици
Hack attempt!
У самого не получается. Желательно выложите ваше оформление кода в Mathematica/

 
 
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 19:03 
Скиньте сначала сюда свой код в математике. Так проще будет разобраться)

 
 
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение27.02.2011, 19:15 
Нужно реализовать подсчет той формулы что я написал, в 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 
Не понял, в чем разница между двумя дельтами, но, похоже, проблема в том, что если верхний индекс больше верхнего, то произведение получается из нулевого количества множителей, что дает в математике единицу. Например, результатом для матриц
Код:
Product[IdentityMatrix[2], {k, 1, 0}]
все равно будет 1, а это не матрица.

 
 
 
 Re: Помогите сосчитать произведение матриц в Mathematica
Сообщение28.02.2011, 20:49 
Аватара пользователя
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 
Добрый день я обратно вернулся к той проблеме что возникла сначала. Не получается записать в математике сумму произведений, да так что бы оно верно подсчитывалось.
Например:
Запишем требуемую сумму произведений через простые переменные.
Код:
\[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 
Первую часть не понял.
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 
Так вот есть формула
$$\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 
Чтобы получалось умножение матриц, надо использовать команду 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 
Vince Diesel
Да я тоже до этого дошел, но как записать сумму произведений через Dot?Что бы всё время матрици перемножались "по матричному".

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

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

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


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