2014 dxdy logo

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

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




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

вектор-строка (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 
Матрица B должна быть квадратной и тогда q.B.q вполне работает. А MatrixForm - это для печати, такое вот
Код:
MatrixForm[q].MatrixForm[B].MatrixForm[q]
вычисляться не будет.

 
 
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 15:49 
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 
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 
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 
Математика умножает как надо.

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

 
 
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 17:35 
Да, Вы правы, я ошибся в матрице В, но всё равно, даже после исправления , не получается верного результата:

п.с. но я всё равно, но понял, почему надо умножать 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 
Вектор-строка из 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 
Спасибо огромное ! :-) Т.е. главной проблемой было то, что я не пользовался функцией
Код:
Nest
для транспонирования :-) Спасибо

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

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

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

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

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

 
 
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 20:48 
Формула q.B.q выдает тот же резулоьтат, только не в списке {}. И транспонированный список qt, это просто {q}.

 
 
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 21:03 
Ага. Но 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.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 
точнее наоборот
Код:
(K - p*G).q

 
 
 
 Re: Mathematica ошибка при умножении матрицы на столбец
Сообщение27.05.2012, 22:54 
Не проверял код, но матрица умноженная на вектор и есть вектор. Может, нужно q.(K - p*G).q?

 
 
 [ Сообщений: 18 ]  На страницу 1, 2  След.


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