2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 13:22 


27/10/11
228
Здравствуйте, помогите пожалуйста понять, что за ерунда происходит при умножении матрицы и векторов:

вектор-строка (1x6) * матрицу (6x6)*вектор-столбец( 6x1)

1х6*6х6*6х1 равно 1х6*6х1 и равносильно 1х1 или полиному

т.е.должно получаться в итоге выражение, а получается какая-то фигня.
Код:
B = {{3/5, -1, 0, 0, 0, 0}, {-1, 2, 0, 0, 0, 0}, {0, 0, 3/2, -1/2, 0,
    0}, {0, 0, 0, 0, 3/2, -1}, {0, 0, 0, 0, -1, 2}};
q = {q1, q2, q3, q4, q5, q6};
L != 0; p != 0; q != 0;
Print["B = ", MatrixForm[B]]
(*a1=-p*1/2;*)
(*a2=B/L;
Print["q = ",q]
Print["a2 = ",MatrixForm[a2]]*)
qq = Transpose[{q}];
qqq = Transpose[qq];


Print["transpose q = ", MatrixForm[qqq]]
Print["(1/L)*B*(-p)*(1/2) = ",
SigmaP = MatrixForm[qqq].MatrixForm[(-p*(1/2))*(B/L)].MatrixForm[q]]
Print["(-p)*(1/2)Transponse[q]*(1/L)*B = ", qqq.(-p*(1/2))*{(B/L).q}]

qqq.(-p*(1/2))*{(B/L).q}
Simplify[{qqq}]

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 14:11 
Заслуженный участник


25/02/11
1797
Матрица B должна быть квадратной и тогда q.B.q вполне работает. А MatrixForm - это для печати, такое вот
Код:
MatrixForm[q].MatrixForm[B].MatrixForm[q]
вычисляться не будет.

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 15:49 


27/10/11
228
Vince Diesel в сообщении #577108 писал(а):
Матрица B должна быть квадратной и тогда q.B.q вполне работает. А MatrixForm - это для печати, такое вот
Код:
MatrixForm[q].MatrixForm[B].MatrixForm[q]
вычисляться не будет.

СОгласен с Вами, я специально записал в таком виде, чтобы было наглядней искать ошибку, на самом деле за умножение отвечает вот эта строка кода, и она и вместо нормального решения глупость какую-то выдаёт

Код:
qqq.(-p*(1/2))*{(B/L).q}


да, но мне нуджно в виде $q^T.B.q$
где $q = (q1,q2,q3,q4,q5,q6)^T$
т.е. в итоге надо умножить
Код:
MatrixForm[qqq].MatrixForm[B].MatrixForm[q]

где переменную qqq я ввёл, чтобы сделать транспозицию вектора q, и получить из вектора столба 6х1 вектор строку 1х6, а без введения переменных qq и qqq прога выдавала ещё больше странных ошибок...

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 16:38 
Заслуженный участник


25/02/11
1797
Alexeybk5 в сообщении #577165 писал(а):
да, но мне нуджно в виде $q^T.B.q$
где $q = (q1,q2,q3,q4,q5,q6)^T$

Вот q.B.q будет давать этот результат. Только надо сначала сделать B размером 6 на 6.

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 17:01 


27/10/11
228
Vince Diesel в сообщении #577192 писал(а):
Alexeybk5 в сообщении #577165 писал(а):
да, но мне нуджно в виде $q^T.B.q$
где $q = (q1,q2,q3,q4,q5,q6)^T$

Вот q.B.q будет давать этот результат. Только надо сначала сделать B размером 6 на 6.


А почему ? ведь q размерности 6х1
1*6х6*6х1
не совместимые ведь тогда , разве нет ?

И как сделать В размерностью 6х6 ? Я же и так задал
Код:
B = {{3/5, -1, 0, 0, 0, 0}, {-1, 2, 0, 0, 0, 0}, {0, 0, 3/2, -1/2, 0,
    0}, {0, 0, 0, 0, 3/2, -1}, {0, 0, 0, 0, -1, 2}};
q = {q1, q2, q3, q4, q5, q6};

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 17:12 
Заслуженный участник


25/02/11
1797
Математика умножает как надо.

Ну, должно быть 6 строк :-) А тут пять.

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 17:35 


27/10/11
228
Да, Вы правы, я ошибся в матрице В, но всё равно, даже после исправления , не получается верного результата:

п.с. но я всё равно, но понял, почему надо умножать q.B.q, а не q^t.B.q ?
Код:
B = {{3/5, -1, 0, 0, 0, 0}, {-1, 2, 0, 0, 0, 0}, {0, 0, 3/2, -1/2, 0,
    0}, {0, 0, -1/2, 3/2, 0, 0}, {0, 0, 0, 0, 3/2, -1}, {0, 0, 0,
    0, -1, 2}};
q = {q1, q2, q3, q4, q5, q6};
L != 0; p != 0; q != 0;
Print["B = ", MatrixForm[B]]
(*a1=-p*1/2;*)
(*a2=B/L;
Print["q = ",q]
Print["a2 = ",MatrixForm[a2]]*)
qq = Transpose[{q}];
qqq = Transpose[qq];


Print["transpose q = ", MatrixForm[qqq]]
Print["(1/L)*B*(-p)*(1/2) = ",
SigmaP = MatrixForm[qqq].MatrixForm[(-p*(1/2))*(B/L)].MatrixForm[q]]
Print["(-p)*(1/2)Transponse[q]*(1/L)*B = ", qqq.(-p*(1/2))*{(B/L).q}]

q.(-p*(1/2))*(B/L).q
Simplify[{qqq}]

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 20:06 


20/12/11
44
Вектор-строка из q и умножение:
Код:
qt = Nest[Transpose, {q}, 2]
qt.B.q

Все вместе:
Код:
Clear[B, q, qt]
B = {{3/5, -1, 0, 0, 0, 0}, {-1, 2, 0, 0, 0, 0}, {0, 0, 3/2, -1/2, 0,
    0}, {0, 0, -1/2, 3/2, 0, 0}, {0, 0, 0, 0, 3/2, -1}, {0, 0, 0,
    0, -1, 2}};
q = {q1, q2, q3, q4, q5, q6};
qt = Nest[Transpose, {q}, 2];
qt.B.q

Out> {q1 ((3 q1)/5 - q2) + q2 (-q1 + 2 q2) + q3 ((3 q3)/2 - q4/2) +
  q4 (-(q3/2) + (3 q4)/2) + q5 ((3 q5)/2 - q6) + q6 (-q5 + 2 q6)}

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 20:31 


27/10/11
228
Спасибо огромное ! :-) Т.е. главной проблемой было то, что я не пользовался функцией
Код:
Nest
для транспонирования :-) Спасибо

p,s
Если Вам не трудно, Вы не могли бы пояснить, а почему мой код работал неверно ( чтобы в будущем не допускать ошибок )?

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 20:44 


20/12/11
44
Alexeybk5 в сообщении #577370 писал(а):
Т.е. главной проблемой было то, что я не пользовался функцией Nest для транспонирования

Не... :-)
Код:
qq = Transpose[{q}];
qqq = Transpose[qq];

и
Код:
qt=Nest[Transpose, {q}, 2];

эквивалентны.
Мне кажется, вы просто запутались в своем коде (в куче Print'ов) и не заметили какую-нибудь мелочь.

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 20:48 
Заслуженный участник


25/02/11
1797
Формула q.B.q выдает тот же резулоьтат, только не в списке {}. И транспонированный список qt, это просто {q}.

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 21:03 


20/12/11
44
Ага. Но q -- это вектор-столбец, а qt -- вектор-строка. И как оказалось:
Mathematica tutorial/VectorsAndMatrices писал(а):
Because of the way Mathematica uses lists to represent vectors and matrices, you never have to distinguish between "row" and "column" vectors.

их можно не различать :D

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 21:04 


27/10/11
228
Спасибо большое за ответы :-)

-- 27.05.2012, 22:59 --

Товарищи, в продолжение темы, опять странность какая-то:
Не хочет опять в выражение преобразовываться :-)

Код:
A = {{5/4, 0, -1, -1/2, 0, 0}, {0, 1, 0, -1, 0, 0}, {-1, 0, 5/2,
    1/2, -1, 0}, {-1/2, -1, 1/2, 5/2, -1/2, -1}, {0, 0, -1, -1/2, 9/4,
     0}, {0, 0, 0, -1, 0, 2}};
K = k*A;
q = {q1, q2, q3, q4, q5, q6};
C1 = {1, 1, 0, 0, 0, 0};
QQ = Q*C1;
B = {{3/5, -1, 0, 0, 0, 0}, {-1, 2, 0, 0, 0, 0}, {0, 0, 3/2, -1/2, 0,
    0}, {0, 0, -1/2, 3/2, 0, 0}, {0, 0, 0, 0, 3/2, -1}, {0, 0, 0,
    0, -1, 2}};
G = (1/L)*B;
MatrixForm[(K - p*G)] MatrixForm[q]
q.(K - p*G)

Т.е. вот это формула не хочет выдавать в качестве ответа выражение, почему-то опять пишет вектор...
Код:
q.(K - p*G)

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 22:07 


27/10/11
228
точнее наоборот
Код:
(K - p*G).q

 Профиль  
                  
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 22:54 
Заслуженный участник


25/02/11
1797
Не проверял код, но матрица умноженная на вектор и есть вектор. Может, нужно q.(K - p*G).q?

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ]  На страницу 1, 2  След.

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



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

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


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

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